Come interpretare un dump ottale o esadecimale di un file binario?


14

Il file binario ha stringhe e alcuni numeri, se lo faccio od -c filenameo strings filename, posso vedere le stringhe correttamente. Ma che dire dei numeri? Sono in un formato strano.

Il testo dopo aver fatto od -c filenameè così:

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

Come decifrarlo?

Ci ho persino provato hexdump -C filename

L'output è così:

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 00 09 00 f3 02 33 01 | .......... O.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 |

Per chiarire, il file principale che è un file normale aveva un attributo che stava visualizzando è un formato strano, quindi stiamo guardando il file raw / binario.

Eseguendo il dump ottale sul file normale, risolto il problema di visualizzazione.

Con grep 'id=123' regular_file | head -1 | od -c, sono stato in grado di vedere quale numero era lì dentro. Mi aspettavo 1, ci ha mostrato come 001.


4
Per "interpretarlo", devi sapere in quale formato è archiviato.
Kevin

Mi è stato detto che i numeri sono in formato binario, in particolare numeri interi binari. Questo aiuta la mia domanda?

No, tutto su un computer è binario, devi conoscere il layout del file: dov'è ogni numero, cosa significa ogni numero. Dove hai preso questo file?
Kevin

solo per chiarire, ho anche un file normale. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] Uno dei tag nel file normale ha il valore in ascii, il il file normale viene solitamente utilizzato per leggere i registri, ma per accertarsi che avesse il valore corretto ma in un formato diverso, stiamo guardando questo file binario.

Il lato destro di un dump esadecimale "standard" è in genere la rappresentazione ASCII di tali dati. Se vedi questo testo: not textin quella vista ASCII, ciò non significa che sia ASCII per il programma che legge il file. per esempio. Il numero 7957706749327538292 se codificato come intero senza segno little-endian a 64 bit. Sembra che questo nella vista ASCII: not text.
Peter

Risposte:


4

Esistono molti modi per memorizzare i numeri: ASCII (che può avere varianti specifiche della locale, come usare ',' per separare la parte frazionaria O come un raggruppamento di migliaia), intero binario (numero variabile di bit) / float / double (tutti che può variare a seconda dell'architettura endian e se il software che produce il file formalizza la rappresentazione), BCD (non compresso, impacchettato, punto fisso e altre varianti), decimale codificato bi-quinary ...

Non esiste uno standard


19

Una delle prime cose che ho dovuto memorizzare per l'informatica è stata Data + Interpretazione = Informazioni utili . Un corollario di ciò è che se ti mancano i dati o l'interpretazione, non hai nulla. I dati stessi non possono dirti come interpretarli. (puoi avere metadati che ti dicono questo, ma poi devi anche sapere come interpretare i metadati )

In queste circostanze, suggerisco di provare questo:

file filename

Se viene fuori con qualcosa come:

filename: data

e non hai assolutamente idea di quale sia il formato, di quale programma provenga, di quale sia il suo utilizzo o di qualsiasi cosa riguardo al contenuto di filename, quindi probabilmente dovresti rinunciare.

Uscita di scarico ottale

od(dump ottale) produce un dump ibrido di testo e ottale. Non numeri sono caratteri o stampabili quali o, s, f, caratteri ecc, o non stampabili come \0(ASCII 0, NUL), o \a(ASCII 7 BEL), o numeri in base 8, con il prefisso standard C 0(es 032= 26 in decimale). Il file viene interpretato come un flusso di byte a 8 bit .

Uscita di scarico esadecimale

hexdumpproduce un dump esadecimale tradizionale, con una colonna che elenca i byte a 8 bit in esadecimali, l'altro che mostra quali caratteri ASCII corrispondono a questi byte, se presenti (se il valore del byte è un carattere ASCII non stampabile o non è affatto un carattere ASCII , .viene mostrato in quella posizione). Ancora una volta, il file viene interpretato come un flusso di byte a 8 bit .

Interi

Se il tuo file comprende numeri interi binari al 100% (ovvero è un array unidimensionale senza intestazione, uniforme di una sorta di rappresentazione di numeri interi), allora devi rispondere a tutte queste domande:

  • Sono binari 'propri' o decimali con codice binario (BCD) ? (probabilmente binario)
  • Quanto sono larghi in bit?
  • Se la loro larghezza non è un multiplo di 8, sono pieni di bit come i messaggi SMS o Base64 o allineati a byte?
  • Se la loro larghezza è di 8 bit o più, qual è l' ordine dei byte ? È Big Endian, Little Endian o uno degli altri tipi più rari?
  • Gli interi sono firmati o non firmati ?
  • Se sono firmati, sono rappresentati nel complemento a due (più probabile), nel complemento a qualcuno o in qualcosa di raro e strano?

Probabilmente ce ne sono altri che sto dimenticando proprio ora.

E questo è solo per un array uniforme di dimensioni unidimensionali di numeri interi, proveniente da un'architettura moderna e comune del computer. Se i tuoi dati hanno qualche tipo di complessità, le cose diventeranno così pelose che diventerà rapidamente più facile vincere alla lotteria piuttosto che indovinare il formato. E voi dovete indovinare (un'ipotesi, ma una supposizione), se non si conosce il formato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.