Wie interpretiere ich einen oktalen oder hexadezimalen Speicherauszug einer Binärdatei?

13

Die Binärdatei enthält Zeichenfolgen und einige Zahlen. Wenn ich od -c filenameoder tue strings filename, kann ich die Zeichenfolgen richtig sehen. Aber was ist mit Zahlen? Sie haben ein komisches Format.

Der Text danach od -c filenameist wie folgt:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 Seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 - 002 3 001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 - 002 3 001 - \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1 ó 002 3 001 é 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 Ñ \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

Wie kann man das entschlüsseln?

Ich habe es sogar versucht hexdump -C filename

Die Ausgabe sieht folgendermaßen aus:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... ó.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..Ñ ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

Zur Verdeutlichung hatte die Hauptdatei, die eine reguläre Datei ist, ein Attribut, das angezeigt wurde, ein seltsames Format, also schauen wir uns die Roh- / Binärdatei an.

Durch Ausführen eines Oktal-Dumps für die reguläre Datei wurde das Anzeigeproblem behoben.

Mit grep 'id=123' regular_file | head -1 | od -ckonnte ich sehen, welche Nummer drin war. Ich hatte 1 erwartet, es zeigte sich uns als 001.

Gilles 'SO - hör auf böse zu sein'
quelle
4
Um es zu "interpretieren", müssen Sie wissen, in welchem ​​Format es gespeichert ist.
Kevin
Mir wurde gesagt, dass Zahlen im Binärformat sind, insbesondere binäre Ganzzahlen. Hilft das meiner Frage?
Nein, alles auf einem Computer ist binär, Sie müssen das Layout der Datei kennen - wo ist jede Zahl, was bedeutet jede Zahl. Woher hast du diese Datei?
Kevin
nur um das zu verdeutlichen, ich habe auch normale dateien. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] Eines der Tags in der normalen Datei hat den Wert in ASCII Die normale Datei wird normalerweise zum Lesen der Protokolle verwendet, aber um sicherzustellen, dass sie den richtigen Wert hat, schauen wir uns diese Binärdatei in einem anderen Format an.
Die rechte Seite eines "Standard" -Hexdumps ist normalerweise die ASCII-Darstellung dieser Daten. Wenn Sie diesen Text sehen: not textin dieser ASCII-Ansicht bedeutet das nicht, dass es sich um ASCII für das Programm handelt, das die Datei liest. z.B. Die Nummer 7957706749327538292, wenn sie als vorzeichenlose 64-Bit-Little-Endian-Ganzzahl codiert ist. Sieht aus wie dies in der ASCII - Ansicht: not text.
Peter.O

Antworten:

4

Es gibt viele Möglichkeiten, Zahlen zu speichern - ASCII (mit länderspezifischen Varianten, z. B. mit ',' zum Trennen von Bruchteilen ODER als Tausendergruppierung), binäre Ganzzahl (variable Anzahl von Bits) / float / double (alle) Dies hängt von der Endian-Architektur ab und davon, ob Software, die die Datei erstellt, die Darstellung formalisiert.), BCD (unkomprimiert, gepackt, Festkomma und andere Varianten), ...

Es gibt keinen Standard.

symcbean
quelle
18

Eines der ersten Dinge, die ich mir für die Informatik merken musste, war Daten + Interpretation = Nützliche Informationen . Eine Konsequenz daraus ist, dass Sie nichts haben, wenn Sie Daten oder Interpretation vermissen. Die Daten selbst können Ihnen nicht sagen, wie Sie sie interpretieren sollen. (Sie können Metadaten haben, die Ihnen dies mitteilen, aber dann müssen Sie auch wissen, wie die Metadaten zu interpretieren sind. )

Unter diesen Umständen schlage ich vor, Folgendes zu versuchen:

file filename

Wenn es mit etwas kommt, wie:

filename: data

und Sie haben absolut keine Ahnung, was das Format ist, aus welchem ​​Programm es stammt, wie es verwendet wird oder was mit dem Inhalt zu tun hat filename, dann sollten Sie wahrscheinlich aufgeben.

Oktaldump-Ausgabe

od(oktaler Speicherauszug) erzeugt einen hybriden Text-und-Oktal-Speicherauszug. Nicht-Zahlen sind entweder druckbare Zeichen wie o, s, f, usw., oder nicht-druckbaren Zeichen , wie beispielsweise \0(ASCII 0, NUL) oder \a(ASCII 7 BEL) oder Zahlen im Boden 8, mit dem Standard - C - Präfix0 (z 032= 26 in Dezimal). Ihre Datei wird als Stream von 8-Bit-Bytes interpretiert .

Hex-Dump-Ausgang

hexdumpErzeugt einen traditionellen Hex-Dump, wobei eine Spalte 8-Bit-Bytes hexadezimal auflistet und die andere zeigt, welchen ASCII-Zeichen diese Bytes gegebenenfalls entsprechen (wenn der Bytewert ein nicht druckbares ASCII-Zeichen oder überhaupt kein ASCII-Zeichen ist) , .ist in dieser Position gezeigt). Auch hier wird Ihre Datei als Stream von interpretiert 8-Bit-Bytes .

Ganze Zahlen

Wenn Ihre Datei zu 100% aus binären Ganzzahlen besteht (dh eine kopflose, einheitliche, eindimensionale Matrix mit einer Art Ganzzahlendarstellung), müssen Sie alle folgenden Fragen selbst beantworten:

  • Handelt es sich um "richtige" binäre oder binärcodierte Dezimalzahlen (BCD) ? (wahrscheinlich binär)
  • Wie breit sind sie in Bits?
  • Wenn ihre Breite nicht ein Vielfaches von 8 ist, sind sie bitweise wie SMS-Nachrichten oder Base64 oder byteweise ausgerichtet?
  • Wenn ihre Breite 8 Bit oder mehr beträgt, wie lautet die Bytereihenfolge ? Ist es Big Endian, Little Endian oder eine der anderen, selteneren Sorten?
  • Sind die ganzen Zahlen mit oder ohne Vorzeichen ?
  • Wenn sie angemeldet sind, sind sie in dargestellt Zweier-Komplement (wahrscheinlicher) oder Einerkomplement oder etwas Seltenes und seltsam?

Es gibt wahrscheinlich noch mehr, die ich gerade vergesse.

Und dies ist nur für eine eindimensionale, einheitliche Anordnung von ganzen Zahlen, die aus einer gemeinsamen, modernen Computerarchitektur stammen. Wenn Ihre Daten irgendeine Art von Komplexität aufweisen, werden die Dinge so haarig, dass es schnell einfacher wird, im Lotto zu gewinnen, als nur das Format zu erraten. Und Sie müssen raten (eine fundierte Vermutung, aber eine Vermutung), es sei denn, Sie kennen das Format.

Alexios
quelle