Como interpretar um dump octal ou hexadecimal de um arquivo binário?

14

O arquivo binário possui cadeias e alguns números. Se eu tiver od -c filenameou strings filename, posso ver as cadeias corretamente. Mas e os números? Eles estão em algum formato estranho.

O texto depois de fazer od -c filenameé assim:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ou 002 3 001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 ó 002 3 001 r \ 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 ou 002 3 001 é 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O ou E \ 0 \ 0 \ 0 osfap 1

Como decifrar isso?

Eu até tentei hexdump -C filename

A saída é assim:

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 40 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 |

Para esclarecer, o arquivo principal, que é um arquivo regular, tinha um atributo que estava sendo exibido em algum formato estranho, por isso estamos analisando o arquivo bruto / binário.

Fazer dump octal no arquivo regular, resolveu o problema de visualização.

Com grep 'id=123' regular_file | head -1 | od -c, pude ver qual número estava lá. Eu estava esperando 1, ele nos mostrou como 001.

Gilles 'SO- parar de ser mau'
fonte
4
"Interpretar"-lo, você precisa saber que formato ele é armazenado no.
Kevin
Foi-me dito que os números estão no formato binário, especificamente números inteiros binários. Isso ajuda na minha pergunta?
Não, tudo no computador é binário, você precisa conhecer o layout do arquivo - onde está cada número, o que significa cada número. Onde você conseguiu esse arquivo?
21712 Kevin
só para esclarecer, eu tenho arquivo normal também. [seq = 132253932] [Maior = S] [Menor = D] [src = seq1] [Id = 0] [ref = 0] [Data = 20120307] Uma das tags no arquivo normal tem o valor em ascii, o O arquivo normal é geralmente usado para ler os logs, mas para ter certeza, ele tinha o valor correto, mas em formato diferente, estamos olhando para esse arquivo binário.
O lado direito de um despejo hexadecimal "padrão" é normalmente a representação ASCII desses dados. Se você vir este texto: not textnessa exibição ASCII, isso não significa que seja ASCII para o programa que lê o arquivo. por exemplo. O número 7957706749327538292 quando codificado como um número inteiro não assinado de little endian de 64 bits. Parece que este na vista ASCII: not text.
precisa saber é o seguinte

Respostas:

4

Existem várias maneiras de armazenar números - ASCII (que pode ter variantes específicas do código do idioma, como ',' para separar parte fracionária OU como um agrupamento de milhares), número inteiro binário (número variável de bits) / float / double (todos que pode variar dependendo da arquitetura endian e se o software que produz o arquivo formaliza a representação), BCD (descompactado, compactado, ponto fixo e outras variantes), decimal codificado bi-quinário ...

Não existe um padrão.

symcbean
fonte
19

Uma das primeiras coisas que tive que memorizar para a ciência da computação foi Data + Interpretação = Informações úteis . Um corolário disso é que, se estiver faltando Dados ou Interpretação, você não terá nada. Os dados em si não podem lhe dizer como interpretá-los. (você pode ter metadados que informam isso, mas também precisa interpretar os metadados )

Sob as circunstâncias, sugiro tentar o seguinte:

file filename

Se surgir algo como:

filename: data

e você não tem absolutamente nenhuma idéia de qual é o formato, de qual programa é, qual é a sua utilização ou qualquer coisa sobre o conteúdo filename, provavelmente você deve desistir.

Saída de Despejo Octal

od(despejo octal) produz um despejo híbrido de texto e octal. Não números são caracteres tanto de impressão, tais como o, s, f, caracteres, etc., ou não imprimíveis, tais como \0ASCII (0, NUL), ou \a(ASCII de 7, BEL), ou os números de base 8, com o prefixo C padrão 0(por exemplo 032= 26 em decimal). Seu arquivo é interpretado como um fluxo de bytes de 8 bits .

Saída Hex Dump

hexdumpproduz um dump hexadecimal tradicional, com uma coluna listando bytes de 8 bits em hexadecimal, a outra mostrando quais caracteres ASCII esses bytes correspondem ot, se houver (se o valor do byte for um caractere ASCII não imprimível ou nenhum caractere ASCII) , .é mostrado nessa posição). Novamente, seu arquivo é interpretado como um fluxo de bytes de 8 bits .

Inteiros

Se o seu arquivo compreender 100% de números inteiros binários (ou seja, um array unidimensional uniforme, sem cabeçalho, de algum tipo de representação inteira), você deverá responder a si mesmo todas estas perguntas:

Provavelmente há mais que estou esquecendo agora.

E isso é apenas para uma matriz uniforme unidimensional de números inteiros, proveniente de uma arquitetura moderna e comum de computador. Se seus dados tiverem algum tipo de complexidade, as coisas ficarão tão complicadas que rapidamente se tornará mais fácil ganhar na loteria do que adivinhar o formato. E você tem que adivinhar (um palpite, mas um palpite), a menos que conheça o formato.

Alexios
fonte