2012-08-30 22:25:48 +0000 2012-08-30 22:25:48 +0000
37
37

Wie kann ich den binären Inhalt einer Datei nativ in Windows 7 anzeigen? (Ist es möglich.)

Ich habe eine Datei, etwas größer als 500MB, die einige Probleme verursacht.

Ich glaube, das Problem liegt in der verwendeten Konvention für das Zeilenende (EOL). Ich würde mir die Datei gerne in ihrer uninterpretierten Rohform (1) ansehen, um die EOL-Konvention der Datei zu bestätigen.

Wie kann ich das “Binärformat” einer Datei mit Hilfe eines in Windows 7 eingebauten Programms anzeigen? Ich möchte vermeiden, etwas Zusätzliches herunterladen zu müssen.

(1) Mein Kollege und ich haben die Datei in Texteditoren geöffnet, und sie zeigen die Zeilen so an, wie man es erwarten würde. Aber beide Texteditoren öffnen Dateien mit unterschiedlichen EOL-Konventionen und interpretieren sie automatisch. (TextEdit und Emacs 24.2. Für Emacs hatte ich eine zweite Datei mit nur den ersten 4K-Bytes mit head -c4096 auf einer Linux-Box erstellt und diese von meiner Windows-Box aus geöffnet.

Ich habe versucht, den Hexl-Modus in Emacs zu benutzen, aber als ich in den Hexl-Modus und wieder zurück in den Textmodus wechselte, hatte sich der Inhalt des Puffers verändert, indem er ein sichtbares ^M am Ende jeder Zeile hinzufügte, also traue ich dem im Moment nicht.

Ich glaube, das Problem könnte in den verwendeten Zeilenendezeichen liegen. Die Editoren, die mein Kollege und ich ausprobiert haben (1), haben die Zeilenende-Konvention einfach automatisch erkannt und uns Zeilen angezeigt. Und aufgrund anderer Hinweise glaube ich, dass die EOL-Konvention nur Wagenrücklauf ist. (2) nur Return.

Um zu wissen, was tatsächlich in der Datei ist, würde ich mir gerne den binären Inhalt der Datei ansehen, oder zumindest ein paar tausend Bytes der Datei, vorzugsweise in Hex, obwohl ich auch mit dezimal oder oktal arbeiten könnte. Nur Einsen und Nullen wären ziemlich grob, um sie zu betrachten.

UPDATE

Mit Ausnahme des Vorschlags DEBUG funktionieren alle folgenden Antworten mehr oder weniger. Ich habe jede dieser Antworten als hilfreich hochgestuft. Meine Frage war schlecht formuliert. Beim Testen aller vorgeschlagenen Lösungen stellte ich fest, dass ich wirklich eine nebeneinanderliegende Anzeige von Hexadezimal- und Textinhalten wollte, und dass ich etwas wollte, bei dem, wenn ich mit dem Cursor über etwas fahre, entweder über einen Byte-Wert oder ein Textzeichen, die passende Sache auf der anderen Seite hervorgehoben wird.

Ich habe mein Problem tatsächlich gelöst, als Emacs Hexl-Modus anfing, “richtig” zu funktionieren. Also habe ich am Ende keine dieser Antworten benutzt, sondern sie nur getestet.(Ich sollte wirklich das seltsame Verhalten von Emacs untersuchen und einen Bug-Report einreichen.)

Antworten (11)

43
43
43
2017-09-06 05:04:26 +0000

Wenn Sie die Powershell-Version 5.0 oder höher verwenden, können Sie die eingebaute Funktion powershell

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.
26
26
26
2012-08-31 00:35:08 +0000

Eingebaut, schnell und schmutzig: start powershell, execute:

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

TotalCount ist die Anzahl der Bytes, die Sie aus der Datei lesen möchten.

Googeln Sie ‘powershell hexdump’, um viel ausgefeiltere/brauchbare Versionen zu erhalten.

Wenn Sie Windows Resource Kit Tools haben (nicht genau eingebaut, aber nahe dran), können Sie auch ein cmd-Zeilenprogramm namens list.exe verwenden. Es ist ein kleiner Editor mit Hex-Modus. Er wurde speziell für die Arbeit mit großen Dateien entwickelt:

List Text File Tool (List) ist ein Befehlszeilen-Tool, das eine oder mehrere Textdateien anzeigt und durchsucht. Im Gegensatz zu anderen Textanzeigetools liest List nicht die gesamte Datei in den Speicher, wenn Sie sie öffnen. Es ermöglicht dem Benutzer, eine Textdatei in einem hexadezimalen Format zu bearbeiten.

List ist nützlich für die Anzeige von Text- oder Protokolldateien aus der Ferne und für die Verwendung auf Servern, bei denen Administratoren eine Verschlechterung der Systemleistung befürchten.

11
11
11
2012-08-31 00:05:36 +0000

Sie benötigen einen “Hex-Editor”. Ich benutze seit Jahren “Hex Editor Neo” und er ist sehr gut. Es gibt ihn in kostenlosen und kostenpflichtigen Versionen . (Und ich bin sicher, dass es auch andere ähnliche Tools gibt.)

7
7
7
2018-09-06 00:15:24 +0000

Dies funktioniert auch auf allem nach XP:

certutil -encodehex MyProgram.exe MyProgram.txt

XP benötigt das Windows Server 2003 Administration Tools Pack von hier : https://www.microsoft.com/en-us/download/details.aspx?id=16770

6
6
6
2012-08-30 23:48:49 +0000

Kopieren Sie die Datei in einen Namen mit der Erweiterung .COM, wobei der Basisname nicht länger als acht Zeichen sein darf.  Führen Sie

DEBUG Ihr_Dateiname

aus. Es wird eine ‘ -’-Eingabeaufforderung angezeigt.  Geben Sie

DEingeben Sie

wiederholt ein, um d die Datei 128 Bytes auf einmal anzuzeigen.   Tippen Sie

D address Geben Sie

ein, um 128 Bytes ab address anzuzeigen, die in Hexadezimal eingegeben werden muss, wobei der Anfang der Datei die Adresse 100 ist.  Tippen Sie

D address1 address2 Geben Sie

ein, um von address1 bis address2 anzuzeigen.   Tippen Sie

D address Lnum Geben Sie

ein, um num Bytes (Länge) ab address anzuzeigen.  num wird auch in Hex eingegeben.  Verwenden Sie Q zum Beenden.

Zum Beispiel:

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
6
6
2014-02-12 22:39:12 +0000

HxD ist ein portabler Hex-Editor, d.h. es ist keine Installation notwendig und ist nichts weiter als eine einzelne exe-Datei. http://mh-nexus.de/en/hxd/

Eine weitere, ähnlich portable Option ist Frhed: http://frhed.sourceforge.net/en/screenshots/

5
5
5
2012-08-31 08:52:04 +0000

Da Windows 7 mit dem dotnet-Framework 3.5 ausgeliefert wird, haben Sie den C#-Compiler eingebaut, so dass Sie z. B. das Listing von http://illegalargumentexception.blogspot.co.uk/2008/04/c-file-hex-dump-application.html nehmen und dann mit

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

kompilieren können und Sie sollten am Ende eine printhex.exe haben, die sowohl Hex- als auch Ascii-Zeichen anzeigen sollte.

2
2
2
2012-08-30 23:04:31 +0000

Es ist nicht ideal, aber wenn Sie wirklich nichts herunterladen möchten, dann könnten Sie versuchen, mit fc /b (d. h. Dateivergleich im Binärmodus) diese Datei mit einer anderen, völlig anderen Datei zu vergleichen, und es werden Ihnen die Hex-Werte jedes Bytes angezeigt, das unterschiedlich ist. Sie erhalten möglicherweise einige Werte, die zufällig in den beiden Dateien gleich sind und daher in der Ausgabe übersprungen werden können, aber Sie können feststellen, ob das passiert, indem Sie auf fehlende Werte in der Offset-Spalte prüfen.

2
2
2
2016-06-06 15:42:30 +0000

Sie können die folgende PowerShell-Funktion zusammen mit Get-Content verwenden, um einen Hexdump des Dateiinhalts anzuzeigen, d. h. Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump. Es dauert etwa 23 Sekunden, um eine 222 KB große Datei zu dumpen, und wenn gewünscht, kann die Ausgabe in eine Textdatei umgeleitet werden, um das Prüfen des Dumps zu erleichtern.

$encodingAutoCompleter = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
    $availableEncodings = ([System.Text.Encoding]::GetEncodings() | Select Name, CodePage, DisplayName) + @( [PSCustomObject] @{ CodePage = '20127'; Name = 'ascii'; DisplayName = 'US-ASCII' }, [PSCustomObject] @{ CodePage = '1200'; Name = 'unicode'; DisplayName = 'Unicode' } )
    $availableEncodings | ?{ $_.Name.StartsWith($wordToComplete) } | %{ New-Object System.Management.Automation.CompletionResult -ArgumentList $_.Name, $_.Name, 'ParameterValue', "$($_.DisplayName). Code Page $($_.CodePage)." }
}

function Format-BufferText([byte[]] $buffer, [System.Text.Encoding] $displayEncoding, [switch] $useControlPictures)
{
    $bufferChars = $displayEncoding.GetChars($buffer);
    $bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { if ($useControlPictures -eq $false) { '.' } else { [char] ($_.ToInt16([cultureinfo]::InvariantCulture) + 0x2400) } } else { "$_" } }) -join "")

    $bufferText
}

<#
    .Synopsis
    Displays binary data as a hexadecimal dump.

    .Description
     Displays binary data as a hexadecimal dump. Options are available to suppress displaying text and to display control characters 
     as Unicode Control Pictures instead of dots.

    .Parameter Bytes
    The bytes to be displayed.

    .Parameter Encoding
    The name of the text encoding to use. The default is ascii.

    .Parameter NoTextDisplay
    If specified the text display sidebar will be suppressed; otherwise, the display text sidebar will be present.

    .Parameter UseControlPictures
    If specified control characters will be displayed as Unicode Control pictures; otherwise, dots are used to represent control 
    characters.

    .Example
    Format-HexDump -Encoding unicode $bytes

    .Example
    Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump -Encoding unicode

    .Example
    0..255 | Format-HexDump -NoTextDisplay
#>
function Format-HexDump
{
    [CmdletBinding()]
    param
    (
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [byte[]] $Bytes,
        [ValidateScript({ if (([System.Text.Encoding]::GetEncodings().Name + @('unicode', 'ascii')) -icontains $_) { return $true } else { Throw "Encoding must be one of the following: $([System.Text.Encoding]::GetEncodings().Name -join ', '), unicode, or ascii." } })]
        [Parameter(ValueFromPipeline = $false)]
        [string] $Encoding = "ASCII",
        [Parameter()]
        [switch] $NoTextDisplay,
        [Parameter()]
        [switch] $UseControlPictures
    )

    BEGIN
    {
        $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)
            {
                if ($NoTextDisplay -eq $true)
                {
                    $hexRow += "$($hexValue)"
                    $hexRow
                }
                else
                {
                    $bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
                    $hexRow += "$($hexValue) $($bufferText)"
                    $hexRow
                }
            }
            else
            {
                $hexRow += "$($hexValue) "
            }

            $counter++
        }
    }

    END
    {
        $counter--

        if ($counter % 16 -ne 15)
        {
            $hexRow += " " * (((16 - $counter % 16) * 3) - 1)

            if ($NoTextDisplay -eq $false)
            {
                $bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
                $hexRow += "$($bufferText)"
            }

            $hexRow
        }
    }
}

Register-ArgumentCompleter -CommandName Format-HexDump -ParameterName Encoding -ScriptBlock $encodingAutoCompleter

Die Ausgabe sieht wie folgt aus:

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
1
1
2017-05-04 12:26:00 +0000

Da Sublime Text mein Lieblingseditor ist, verwende ich dessen Plugin zum Anzeigen von Hex-Dateien. http://facelessuser.github.io/HexViewer/

0
0
0
2017-08-25 01:07:56 +0000

Ich weiß, dass Sie Emacs verwenden, aber Vim -Benutzer können xxd verwenden:

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

d.h.

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)".