Le fichier binaire a des chaînes et quelques chiffres, si je le fais
od -c filename
ou strings filename
, je peux voir les chaînes correctement. Mais qu'en est-il des chiffres? Ils sont dans un format bizarre.
Le texte après avoir fait od -c filename
est comme ceci:
0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 1 0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3001 0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1 0000060 - 002 3001 ÿ \ 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
Comment déchiffrer cela?
J'ai même essayé hexdump -C filename
La sortie est comme ceci:
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 |
Pour clarifier, le fichier principal qui est un fichier normal avait un attribut qui affichait un format bizarre, donc nous regardons le fichier brut / binaire.
Faire un vidage octal sur le fichier normal a résolu le problème d'affichage.
Avec grep 'id=123' regular_file | head -1 | od -c
, j'ai pu voir quel nombre y était. Je m'attendais à 1, cela nous a montré 001.
not text
dans cette vue ASCII, cela ne signifie pas qu'il est ASCII pour le programme qui lit le fichier. par exemple. Le nombre 7957706749327538292 lorsqu'il est codé comme un entier non signé 64 bits peu-endian. ressemble à ceci dans la vue ASCII:not text
.Réponses:
Il existe de nombreuses façons de stocker des nombres - ASCII (qui peut avoir des variantes spécifiques aux paramètres régionaux, telles que l'utilisation de ',' pour séparer la partie fractionnelle OU en tant que groupe de milliers), entier binaire (nombre variable de bits) / float / double (tous qui peut varier selon l'architecture endienne et si le logiciel produisant le fichier formalise la représentation), BCD (non compressé, compressé, virgule fixe et autres variantes), décimal codé bi-quinaire ...
Il n'y a pas de norme.
la source
L'une des premières choses que j'ai dû mémoriser pour l'informatique a été Data + Interpretation = Informations utiles . Un corollaire de cela est que si vous manquez des données ou une interprétation, vous n'avez rien. Les données elles-mêmes ne peuvent pas vous dire comment les interpréter. (vous pouvez avoir des métadonnées qui vous le disent, mais vous devez aussi savoir comment interpréter les métadonnées )
Dans les circonstances, je suggère d'essayer ceci:
Si cela arrive avec quelque chose comme:
et vous n'avez absolument aucune idée du format, du programme dont il est issu, de son utilisation ou de quoi que ce soit sur le contenu
filename
, alors vous devriez probablement abandonner.Sortie de vidage octal
od
(vidage octal) produit un vidage hybride texte et octal. Les non-numéros sont soit des caractères imprimables , tels queo
,s
,f
, etc, ou des caractères non-imprimables tels que\0
(ASCII 0,NUL
), ou\a
(ASCII 7,BEL
), ou des numéros de base 8, avec le préfixe C standard0
(par exemple032
= 26 décimal). Votre fichier est interprété comme un flux d' octets 8 bits .Sortie de vidage hexadécimal
hexdump
produit un vidage hexadécimal traditionnel, avec une colonne répertoriant les octets 8 bits en hexadécimal, l'autre indiquant quels caractères ASCII ces octets correspondent, le cas échéant (si la valeur en octets est un caractère ASCII non imprimable, ou pas du tout un caractère ASCII ,.
est affiché à cette position). Encore une fois, votre fichier est interprété comme un flux d' octets 8 bits .Entiers
Si votre fichier comprend 100% d'entiers binaires (c'est-à-dire un tableau unidimensionnel uniforme et sans en-tête d'une sorte de représentation entière), alors vous devez répondre à vous-même à toutes ces questions:
Il y a probablement plus que j'oublie en ce moment.
Et ceci est juste pour un tableau uniforme unidimensionnel d'entiers, provenant d'une architecture informatique commune et moderne. Si vos données ont une complexité quelconque, les choses vont devenir si velues qu'il deviendra rapidement plus facile de gagner à la loterie que de deviner le format. Et vous devez deviner (une supposition éclairée, mais une supposition), à moins que vous ne connaissiez le format.
la source