Kontext

Kontext

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 gzipArchivdatei:

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 0808ist 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 08vs. 8b1f 0808Die erste gefundene Datei ist ein Hexdump einer Archivdatei, data.txtund 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 | hexdumperhalte 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 -g1Flag 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 xxdbezieht sich auf die Anzahl der Bytes, die als Einheit behandelt (und angezeigt) werden.

Behandelt seine Eingabe standardmäßig xxdals 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 8Bwerden zu einer 16-Bit-Zahl 8B18, die genau dem entspricht, was Sie sehen.

Wenn Sie die xxdGruppierung 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.

verwandte Informationen