Comment interpréter un vidage octal ou hexadécimal d'un fichier binaire?

14

Le fichier binaire a des chaînes et quelques chiffres, si je le fais od -c filenameou 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 filenameest 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.

Gilles 'SO- arrête d'être méchant'
la source
4
Pour «l'interpréter», vous devez savoir dans quel format il est stocké.
Kevin
On m'a dit que les nombres sont au format binaire, en particulier les entiers binaires. Est-ce que cela aide ma question?
Non, tout sur un ordinateur est binaire, vous devez connaître la disposition du fichier - où est chaque numéro, que signifie chaque numéro. Où avez-vous obtenu ce fichier?
Kevin
juste pour clarifier, j'ai aussi un fichier normal. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] L'une des balises du fichier normal a la valeur en ascii, le fichier normal est généralement utilisé pour lire les journaux, mais pour vous assurer qu'il avait la valeur correcte mais dans un format différent, nous examinons ce fichier binaire.
Le côté droit d'un vidage hexadécimal "standard" est généralement la représentation ASCII de ces données. Si vous voyez ce texte: not textdans 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.
Peter.O

Réponses:

4

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.

symcbean
la source
19

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:

file filename

Si cela arrive avec quelque chose comme:

filename: data

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 que o, 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 standard 0(par exemple 032= 26 décimal). Votre fichier est interprété comme un flux d' octets 8 bits .

Sortie de vidage hexadécimal

hexdumpproduit 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:

  • S'agit-il de binaires «corrects» ou décimaux codés binaires (BCD) ? (probablement binaire)
  • Quelle est leur largeur en bits?
  • Si leur largeur n'est pas un multiple de 8, sont-ils compressés comme des SMS ou Base64, ou alignés en octets?
  • Si leur largeur est de 8 bits ou plus, quel est l' ordre des octets ? Est-ce Big Endian, Little Endian ou l'un des autres types plus rares?
  • Les entiers sont-ils signés ou non signés ?
  • S'ils sont signés, sont-ils représentés en complément à deux (plus probable), ou à son complément , ou quelque chose de rare et bizarre?

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.

Alexios
la source