Kontext
Dies ist ein erneuter Post meiner StackOverflow-Frage, die falsch gestellt wurde, da sie sich nicht auf die Programmierung bezieht.
Ich spiele Bandit auf OverTheWire undStufe dreizehnerfordert das Entpacken verschiedener komprimierter Dateiformate ohne Kenntnis der Dateierweiterung. Dazu habe ich den Hexdump mit Dateisignaturen von verglichenGary Kesslers Website.
Was mir jedoch aufgefallen ist, ist, dass die Hex-Signatur rückwärts erscheint. Nehmen wir zum Beispiel diese gz, tgz gzip
Archivdatei:
0000000 8b1f 0808 5006 5eb4 0302 6164 6174 2e32
0000010 6962 006e 3d01 c202 42fd 685a 3139 5941
0000020 5326 8e59 1c4f 00c8 1e00 ff7f f9fb da7f
...
Die Signatur 8b1f 0808
ist im Vergleich zu dem, was auf Gary Kesslers Website angegeben ist, rückwärts:
1F 8B 08 .‹. GZ, TGZ GZIP archive file
VLT VLC Player Skin file
Frage
Warum ist die Signatur rückwärts? 1F 8B 08
vs. 8b1f 0808
Die erste gefundene Datei ist ein Hexdump einer Archivdatei, data.txt
und hat eine korrekte Signatur von 1f8b 0808
(gefunden mit head data.txt
), die perfekt mit der Signatur übereinstimmt. Wenn ich jedoch ausführe, xxd -r data.txt | hexdump
erhalte ich erneut 8b1f 0808
.
Die Kommentare zu meiner StackOverflow-Frage scheinen darauf hinzudeuten, dass es mit Big/Little-Endianess zusammenhängt, und haben mich auf das -g1
Flag von hingewiesen xxd
, das für Gruppierung steht.
Dies liefert zwar die richtige Ausgabe, aber ich verstehe nicht, was Gruppierung ist oder wie sie funktioniert.
Antwort1
Die Gruppierung xxd
bezieht sich auf die Anzahl der Bytes, die als Einheit behandelt (und angezeigt) werden.
Behandelt seine Eingabe standardmäßig xxd
als Gruppen von 2 Bytes/16 Bits (eine vierstellige Hexadezimalzahl), die in Big-Endian-Reihenfolge gespeichert sind.
Dies hat zur Folge, dass jede Gruppe von zwei Bytes aus der Eingabe in umgekehrter Reihenfolge angezeigt wird (aber tatsächlich in der richtigen Reihenfolge für ein Big-Endian-System).
D. h., die ersten beiden Bytes der Eingabe 18 8B
werden zu einer 16-Bit-Zahl 8B18
, die genau dem entspricht, was Sie sehen.
Wenn Sie die xxd
Gruppierung mit der Option auf „1“ ändern -g1
, werden alle Bytes der Eingabe als Einzelbyte-Zahlen (die offensichtlich keine „Endian-Reihenfolge“ haben) interpretiert und in der Reihenfolge angezeigt, in der sie aus der Eingabe gelesen werden.