Как просмотреть двоичное содержимое файла изначально в Windows 7? (Возможно ли это.)

у меня есть файл, немного больше, чем 500 МБ, что вызывает некоторые проблемы.

Я считаю вопрос в конце строки (EOL) конвенции используется. Я хотел бы посмотреть на файл в его неинтерпретированной сырой форме (1), чтобы подтвердить соглашение EOL файла.

Как я могу просмотреть "двоичный" файл, используя что-то встроенный в Windows 7? Я предпочел бы избежать необходимости загружать что-либо дополнительное.

(1) мой коллега и я открыл файл в текст редакторы, и они показывают, как можно было бы ожидать. Но оба текстовых редактора будут открывать файлы с различными соглашениями EOL и интерпретировать их автоматически. (TextEdit и Emacs 24.2. Для Emacs я создал второй файл только с первыми 4K байтами, используя head -c4096 на Linux и открыл коробку из моего окна.

Я попытался использовать hexl-mode в Emacs, но когда я перешел в hexl-mode и вернулся в текстовый режим, содержимое буфера изменилось, добавив видимое ^M в конец каждую строчку, так что я не доверяю этому в данный момент.

Я считаю, что проблема может быть в конец строки символ(ы). Редакторы мой коллега и я попробовали (1) просто автоматически распознали соглашение о конце строки и показали нам линии. И, основываясь на других доказательствах, я считаю, что Конвенция EOL-это только возврат перевозки. (2) возврат только.

чтобы узнать, что на самом деле находится в файле, я хотел бы посмотреть двоичное содержимое файла или, по крайней мере, пару тысяч байт файл, preferablely в hex, хотя я мог бы работать с десятичной или восьмеричной. Только в нулях будет очень тяжело смотреть.

обновление

кроме одного, предполагающего DEBUG, все ответы ниже в той или иной степени. Я проголосовал за каждого из них как полезного. Мой вопрос был плохо сформулирован. При тестировании каждого предложенного решения я обнаружил, что я действительно хотел бок о бок hex и просмотр текстового содержимого, и что я хотел, чтобы это было что-то, где когда я наведу курсор на что-то, либо на байтовое значение, либо на текстовый символ, соответствующая вещь с другой стороны будет выделена.

Я действительно решил свою проблему, когда Emacs hexl-mode начал работать "правильно". Поэтому я не использовал ни один из этих ответов, только тестировал их.(Действительно должен исследовать странное поведение Emacs и подать отчет об ошибке.)

17
задан Shannon Severance
17.02.2023 20:33 Количество просмотров материала 2898
Распечатать страницу

11 ответов

вам нужна "HEX-редактор". Я использовал" Hex Editor Neo " в течение многих лет, и это очень хорошо. Он доступен в бесплатная и платные версии. (И я уверен, что есть и другие подобные инструменты.)

10
отвечен Daniel R Hicks 2023-02-19 04:21

встроенный, быстрый и грязный: start powershell выполнить:

gc -encoding byte -TotalCount 100 "your_file_path" |% {write-host ("{0:x}" -f $_) -noNewline " "}; write-host   

TotalCount - это количество байт, которые вы хотите прочитать из файла.

Google "powershell hexdump", чтобы получить гораздо более полированные/работоспособные версии.

Если у вас есть Windows Resource Kit Tools (не совсем встроенный, но закрыть) вы также можете использовать утилиту cmd line с именем list.exe. Это небольшой редактор с HEX режиме. Разработан специально для работы с большими файлами:

список инструмент текстовый файл (список) является инструментом командной строки, которая отображает и поиск одного или нескольких текстовых файлов. В отличие от других инструментов отображения текста, список не считывает весь файл в память при его открытии. Это позволяет пользователей для редактирования текстового файла в шестнадцатеричном формате.

список полезен для удаленного отображения текста или файлов журнала, а также для использования на серверах, где администраторы обеспокоены деградацией производительность системы.

25
отвечен wmz 2023-02-19 06:38

Если у вас есть powershell версии 5.0 или более поздней версии, можно использовать powershell встроенная функция Format-Hex

PS:21 C:\Temp >Format-Hex application.exe

            0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

00000000   42 4D 5E 00 00 00 00 00 00 00 36 00 00 00 28 00  BM^.......6...(. 
00000010   00 00 0A 00 00 00 01 00 00 00 01 00 20 00 00 00  ............ ... 
00000020   00 00 00 00 00 00 C4 0E 00 00 C4 0E 00 00 00 00  ......Ä...Ä..... 
00000030   00 00 00 00 00 00 B7 59 71 FF B7 59 71 FF B7 59  ......•Yq.•Yq.•Y 
00000040   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF B7 59  q.•Yq.•Yq.•Yq.•Y 
00000050   71 FF B7 59 71 FF B7 59 71 FF B7 59 71 FF        q.•Yq.•Yq.•Yq.
7
отвечен Azi 2023-02-19 08:55

скопируйте файл с именем .COM расширение, где базовое имя не длиннее восьми символов.  Беги

DEBUG your_filename

это даст '-' подскажите.  Type

Dвведите

неоднократно display файл 128 байт одновременно.  Type

D адрес введите

для вывода 128 байт, начиная с адрес, который должен быть набран в hex, где начало файла-адрес 100.  Type

D адрес1 адрес2 введите

, из которых адрес1 to адрес2.  Type

D адрес Lnum введите

на экране num байт (длина), начиная с адресnum также вводится в hex.  Используйте Q бросить.

например,

C:\Users\scott\Documents> debug thispost.com
-d
0BE4:0100  43 6F 70 79 20 74 68 65-20 66 69 6C 65 20 74 6F   Copy the file to
0BE4:0110  20 61 20 6E 61 6D 65 20-77 69 74 68 20 61 20 2E    a name with a .
0BE4:0120  43 4F 4D 20 65 78 74 65-6E 73 69 6F 6E 2C 20 77   COM extension, w
0BE4:0130  68 65 72 65 20 74 68 65-20 62 61 73 65 20 6E 61   here the base na
0BE4:0140  6D 65 20 69 73 20 6E 6F-20 6C 6F 6E 67 65 72 20   me is no longer
0BE4:0150  74 68 61 6E 20 65 69 67-68 74 20 63 68 61 72 61   than eight chara
0BE4:0160  63 74 65 72 73 2E 0D 0A-52 75 6E 20 44 45 42 55   cters...Run DEBU
0BE4:0170  47 20 2A 79 6F 75 72 5F-66 69 6C 65 6E 61 6D 65   G *your_filename
-d
0BE4:0180  2A 0D 0A 49 74 20 77 69-6C 6C 20 67 69 76 65 20   *..It will give
0BE4:0190  61 20 27 2D 27 20 70 72-6F 6D 70 74 2E 0D 0A 54   a '-' prompt...T
0BE4:01A0  79 70 65 20 44 20 45 6E-74 65 72 20 72 65 70 65   ype D Enter repe
0BE4:01B0  61 74 65 64 6C 79 20 74-6F 20 2A 2A 64 2A 2A 69   atedly to **d**i
0BE4:01C0  73 70 6C 61 79 20 74 68-65 20 66 69 6C 65 20 31   splay the file 1
0BE4:01D0  32 38 20 62 79 74 65 73-20 61 74 20 61 20 74 69   28 bytes at a ti
0BE4:01E0  6D 65 2E 0D 0A 54 79 70-65 20 44 20 5F 61 64 64   me...Type D _add
0BE4:01F0  72 65 73 73 5F 20 74 6F-20 64 69 73 70 6C 61 79   ress_ to display
-d 200 L16
0BE4:0200  20 31 32 38 20 62 79 74-65 73 20 73 74 61 72 74    128 bytes start
0BE4:0210  69 6E 67 20 61 74                                 ing at
-
6
отвечен Scott 2023-02-19 11:12

HxD-это портативный шестнадцатеричный редактор, который не требует установки и представляет собой не более чем один exe-файл.

http://mh-nexus.de/en/hxd/

другой аналогично переносимый параметр Frhed:

http://frhed.sourceforge.net/en/screenshots/

6
отвечен Jay Sullivan 2023-02-19 13:29

Так как Windows 7 поставляется со встроенной платформой dotnet framework 3.5, у вас будет встроенный компилятор C#, поэтому вы можете, например, получить список из http://illegalargumentexception.blogspot.co.uk/2008/04/c-file-hex-dump-application.html а затем скомпилировать с помощью

  \windows\Microsoft.NET\Framework\v3.5\csc printhex.cs 

и вы должны в конечном итоге с printhex.exe, которые должны отображаться оба hex и ASCII символов.

5
отвечен sgmoore 2023-02-19 15:46

Это также работает на все после XP:

certutil -encodehex MyProgram.exe MyProgram.txt

XP требуется пакет средств администрирования Windows Server 2003 отсюда:

https://www.microsoft.com/en-us/download/details.aspx?id=16770

3
отвечен sparks 2023-02-19 18:03

Это не идеал, но если вы действительно не хотите ничего скачивать, то вы можете попробовать использовать fc / b (ie file compare in binary mode) чтобы сравнить этот файл с другим совершенно другим файлом, и он покажет вам шестнадцатеричные значения каждого байта, который отличается. Вы можете получить некоторые значения, которые оказались одинаковыми в двух файлах, и поэтому могут быть пропущены из вывода, но вы можете сказать, происходит ли это, проверяя пропущенные значения в столбце смещение.

2
отвечен sgmoore 2023-02-19 20:20

вы можете использовать функцию PowerShell ниже вместе с Get-Content, чтобы увидеть шестнадцатеричный дамп содержимого файла, то есть,Get-Content -Encoding Byte 'MyFile.bin' | Get-HexDump. Это занимает около 23 секунд, чтобы сбросить файл размером 222 КБ и, при желании, вывод может быть перенаправлен в текстовый файл, чтобы сделать изучение дампа проще.

function Get-HexDump
{
    [CmdletBinding()]
    param
    (
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [byte[]] $Bytes,
        [Parameter(ValueFromPipeline = $false)]
        [string] $Encoding
    )

    BEGIN
    {
        if ([string]::IsNullOrEmpty($Encoding) -eq $true)
        {
            $Encoding = "ascii"
        }

        if ($Encoding -inotin [System.Text.Encoding]::GetEncodings().Name + "ascii" + "unicode")
        {
            Throw New-Object ArgumentException("Encoding must be $([System.Text.Encoding]::GetEncodings().Name -join ", "), unicode, or ascii.", '$Encoding')
        }

        $displayEncoding = [System.Text.Encoding]::GetEncoding($Encoding)

        $counter = 0
        $hexRow = ""
        [byte[]] $buffer = @()
    }

    PROCESS
    {
        foreach ($byte in $Bytes)
        {
            $buffer += $byte
            $hexValue = $byte.ToString("X2")

            if ($counter % 16 -eq 0)
            {
                $buffer = @($byte)
                $hexRow = "$($counter.ToString("X8")): $($hexValue) "
            }
            elseif ($counter % 16 -eq 15)
            {
                $bufferChars = $displayEncoding.GetChars($buffer);
                $bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { "." } else { "$_" } }) -join "")
                $hexRow += "$($hexValue)   $($bufferText)"
                $hexRow
            }
            else
            {
                $hexRow += "$($hexValue) "
            }

            $counter++
        }
    }

    END
    {
        $counter--

        if ($counter % 16 -ne 15)
        {
            $hexRow += " " * (((16 - $counter % 16) * 3) - 1)
            $bufferChars = $displayEncoding.GetChars($buffer);
            $bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { "." } else { "$_" } }) -join "")
            $hexRow += "$($bufferText)"
            $hexRow
        }
    }
}

вывод выглядит так:

00000000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   ................
00000010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F   ................
00000020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
00000030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
00000040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F   @ABCDEFGHIJKLMNO
00000050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F   PQRSTUVWXYZ[\]^_
00000060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F   `abcdefghijklmno
00000070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F   pqrstuvwxyz{|}~.
00000080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F   ????????????????
00000090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F   ????????????????
000000A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF   ????????????????
000000B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF   ????????????????
000000C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF   ????????????????
000000D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF   ????????????????
000000E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF   ????????????????
000000F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF   ????????????????
1
отвечен JamieSee 2023-02-19 22:37

поскольку Sublime text мой любимый редактор, я использую его плагин для просмотра hex файлов. http://facelessuser.github.io/HexViewer/

HexViewer

1
отвечен Zuhayer 2023-02-20 00:54

Я знаю, что вы используете Emacs, но Vim пользователи могут использовать xxd утилиты:

xxd -s <start_offset> -l <length_offest> <file>

то есть

Usage:
       xxd.exe [options] [infile [outfile]]
    or
       xxd.exe -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
    -a          toggle autoskip: A single '*' replaces nul-lines. Default off.
    -b          binary digit dump (incompatible with -ps,-i,-r). Default hex.
    -c cols     format <cols> octets per line. Default 16 (-i: 12, -ps: 30).
    -E          show characters in EBCDIC. Default ASCII.
    -g          number of octets per group in normal output. Default 2.
    -h          print this summary.
    -i          output in C include file style.
    -l len      stop after <len> octets.
    -ps         output in postscript plain hexdump style.
    -r          reverse operation: convert (or patch) hexdump into binary.
    -r -s off   revert with <off> added to file positions found in hexdump.
    -s [+][-]seek  start at <seek> bytes abs. (or +: rel.) infile offset.
    -u          use upper case hex letters.
    -v          show version: "xxd V1.10 27oct98 by Juergen Weigert (Win32)".
0
отвечен Michaelangel007 2023-02-20 03:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх