Unterschied zwischen Hexdump- und XXD-Format

Unterschied zwischen Hexdump- und XXD-Format

Ich habe nach einer Möglichkeit gesucht, einen umgekehrten Hexdump durchzuführen und habe xxd erwähnt gefunden. Allerdings scheint es nicht zu funktionieren mit einfachem:

xxd -r hexdumpfile > binaryfile

Ich habe dann die Differenz zwischen den Ausgaben von xxd infileund verglichen hexdump infileund drei Unterschiede festgestellt:

  1. Die xxd-Ausgabe hat einen Doppelpunkt nach der Adresse
  2. Bei der xxd-Ausgabe sind die Positionen in den Daten umgekehrt (Beispiel: 5a42in der Hexdump-Ausgabe wird 425aeine xxd-Ausgabe)
  3. Nach jeder Zeile stehen einige zusätzliche Zeichen

Ich habe von bestimmten Dateien auf einem Server nur die Hex-Dump-Version. Wie kann ich mit xxd die Binärdaten korrekt zurückerhalten?

Antwort1

Mir ist kein Befehl bekannt, der die Konvertierung durchführt, aber sie lässt sich leicht in ein paar Schritte aufteilen:

  1. Entfernen Sie Adressen aus hexdumpder Ausgabe mitsed
  2. Konvertieren in Binärformat mitxxd
  3. Die Endian-Konvertierung (zum Beispiel 5a42wird 425a) erfolgt mitdd

Hier ist der vollständige Befehl:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile

Antwort2

Diese Antwort ist ein Cross-Post vonhttps://stackoverflow.com/a/52834021/6770384

Die Konvertierung kann mit einem einzigen sedBefehl durchgeführt werden. Es genügt, :nach der Adresse das anzufügen und die Byte-Reihenfolge zu ändern (Umschalten ab12auf 12ab).

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r

Bekannte Fehler(siehe Kommentarbereich)

  • Wenn die Originaldatei eine ungerade Länge hatte (z. B. 1, 3, 5, 7, ... Byte lang), wird ein nachstehendes Nullbyte hinzugefügt.
  • Wiederholende Abschnitte der Originaldatei werden nicht korrekt wiederhergestellt, wenn sie hexdumpmit einem bearbeitet  wurden *.

Antwort3

Versuchen Sie hinzuzufügen -p.

xxd -r -p hexdumpfile > binaryfile

Antwort4

Sie können einfach die folgenden Dinge verwenden

  1. Holen Sie sich den Hexdump im erforderlichen Format

    hexdump -Cv <binärdatei.bin> > binärdatei.txt

-C druckt die Daten byteweise

-v verwendet * nicht für wiederholten Inhalt

  1. Jetzt müssen Sie für jede Zeile die ersten und letzten Zeichen aus binary_file.txt entfernen. Sie können hier den Befehl sed verwenden.

  2. Verwenden Sie jetzt den Befehl xxd

    xxd -r -p Binärdatei.txt > Binärdatei_wiederherstellen.bin

  3. Sie können die MD5-Summe beider Dateien überprüfen. Sie sollte übereinstimmen

    md5sum binary_file.bin

    md5sum wiederherstellen_binärdatei.bin

verwandte Informationen