
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 infile
und verglichen hexdump infile
und drei Unterschiede festgestellt:
- Die xxd-Ausgabe hat einen Doppelpunkt nach der Adresse
- Bei der xxd-Ausgabe sind die Positionen in den Daten umgekehrt (Beispiel:
5a42
in der Hexdump-Ausgabe wird425a
eine xxd-Ausgabe) - 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:
- Entfernen Sie Adressen aus
hexdump
der Ausgabe mitsed
- Konvertieren in Binärformat mit
xxd
- Die Endian-Konvertierung (zum Beispiel
5a42
wird425a
) 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 sed
Befehl durchgeführt werden. Es genügt, :
nach der Adresse das anzufügen und die Byte-Reihenfolge zu ändern (Umschalten ab12
auf 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
hexdump
mit einem bearbeitet wurden*
.
Antwort3
Versuchen Sie hinzuzufügen -p
.
xxd -r -p hexdumpfile > binaryfile
Antwort4
Sie können einfach die folgenden Dinge verwenden
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
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.
Verwenden Sie jetzt den Befehl xxd
xxd -r -p Binärdatei.txt > Binärdatei_wiederherstellen.bin
Sie können die MD5-Summe beider Dateien überprüfen. Sie sollte übereinstimmen
md5sum binary_file.bin
md5sum wiederherstellen_binärdatei.bin