O arquivo binário possui cadeias e alguns números. Se eu tiver
od -c filename
ou 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.
not text
nessa 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
.Respostas:
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.
fonte
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:
Se surgir algo como:
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 comoo
,s
,f
, caracteres, etc., ou não imprimíveis, tais como\0
ASCII (0,NUL
), ou\a
(ASCII de 7,BEL
), ou os números de base 8, com o prefixo C padrão0
(por exemplo032
= 26 em decimal). Seu arquivo é interpretado como um fluxo de bytes de 8 bits .Saída Hex Dump
hexdump
produz 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.
fonte