Hexdump vs. XXD-Formatunterschied

17990
tanon

Ich suchte nach einem umgekehrten Hexdump und fand xxd erwähnt. Es scheint jedoch nicht einfach zu funktionieren:

xxd -r hexdumpfile > binaryfile 

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

  1. Die xxd-Ausgabe hat nach der Adresse einen Doppelpunkt
  2. Bei der xxd-Ausgabe sind die Positionen in den Daten umgekehrt (z. B. wird die 5a42Ausgabe in Hexdump 425ain der xxd-Ausgabe).
  3. Es gibt einige zusätzliche Zeichen nach jeder Zeile

Ich habe nur die Hexdump-Version bestimmter Dateien auf einem Server. Wie kann ich die binären Daten mit xxd richtig zurückbekommen?

8
War in xxd auf der Suche nach einer Option, die im Hexdump-Format verwendet werden sollte, aber im Moment gelang es mit ein paar einfachen sed-Operationen tanon vor 12 Jahren 0
Ich habe nicht wirklich genau das getestet, was Sie fragen, aber versuchen Sie es mit xxd -p und -b, -p ist einfach -b ist binär und Ihr -r. Was die Bytereihenfolge angeht, so hat das mit Big Endian und Little Endian zu tun, und vielleicht kann xxd das nicht rückgängig machen. Es hängt jedoch davon ab, wie die Bytes in der Datei gespeichert sind. Ähnlich, wenn Sie eine Textdatei im Editor haben Sie können es als Unicode-16-Bit-Big-Endian oder Little-Endian oder UTF-8 oder was auch immer speichern. Sie sehen den Unterschied zu xxd. Der od-Befehl zeigt es möglicherweise anders an. barlop vor 12 Jahren 0
Zur späteren Verwendung können Sie mit "hexdump" die Endianness auswählen, die in der Ausgabe verwendet wird. Dies könnte die Vereinfachung erleichtern. (Warum jetzt? Fand Ihre Frage hilfreich für etwas, das nichts miteinander zu tun hat.) jpaugh vor 7 Jahren 0

2 Antworten auf die Frage

6
Tim

Es gibt keinen Befehl, von dem ich weiß, dass er die Konvertierung durchführt, aber er kann leicht in einige Schritte unterteilt werden:

  1. Adressen aus der hexdumpAusgabe entfernensed
  2. Konvertieren in binär mit xxd
  3. Endian - Umwandlung (beispielsweise 5a42wird 425a) unter Verwendung vondd

Hier ist der volle Befehl:

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

Sie können die Konvertierung in einem sedBefehl ausführen. Es ist ausreichend, :die Adresse hinter der Adresse hinzuzufügen und die Endanforderung zu ändern (Umschalten ab12auf 12ab).

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