web-dev-qa-db-fra.com

Comment interpréter une vidage octale ou hexagonale d'un fichier binaire?

Le fichier binaire a des chaînes et des chiffres, si je le fais od -c filename ou strings filename, Je peux voir les cordes correctement. Mais qu'en est-il des chiffres? Ils sont dans un format étrange.

Le texte après avoir fait od -c filename est comme ça:

[.____] 0000000 036\0 032 004 SD\0\0\0 SEQ 1 [.____] 0000020\0\0\0\0\0\0\0\0\T\0\0 002 3 001 
 0000040 &\0 032\f O 2 006\0\0\0 osfus 1 
 0000060 ó 002 3 001 y\r\0\0\t\0\0 @ 3 × [.____] 0000100 233 004\0 ~\0\0 &\0 032\f o 2 7\0 [ .] 0000140\0\0 035 003\0\0 × 23 × 233 º 004\0\a\0\0 [.____] 0000160 Ä\0 032\0\0\0\0\0\0\0\0\0\0\0\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 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 03 00 00 E9 26 00 1a 0C 4F 32 37 00 
 | .º..é ... et ... O27 |. [. .____] 00000050 00 00 66 65 6f 73 75 31 20 20 02 33 01 f3 E9 9d | ..osfeu1 ó.3.é. | [. .____] 00000060 00 00 03 00 40 1d 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 | Ä ... OSFAP1 | 

Pour clarifier, le fichier principal qui est un fichier régulier avait un attribut affichant est un format étrange, nous examinons donc le fichier brut/binaire.

Faire du dépotoir octal sur le fichier ordinaire, résolvé le problème d'affichage.

Avec grep 'id=123' regular_file | head -1 | od -c, J'ai pu voir quel chiffre était là. Je m'attendais à 1, cela nous a montré comme 001.

14
user14039

Il y a beaucoup de façons de stocker des chiffres - ASCII (pouvant avoir des variantes spécifiques à la locale, telles que l'utilisation de "," pour séparer une partie fractionnée OR comme des milliers de personnes. regroupement), entier binaire (nombre variable de bits)/flotteur/double (qui peut varier en fonction de l'architecture de l'Endian et de déterminer le fichier produisant le fichier formalise la représentation), BCD (non compressé, emballé, point fixe et d'autres variantes), BI -Le décimal codé ...

Il n'y a pas de norme.

4
symcbean

L'une des premières choses que j'ai dû mémoriser pour l'informatique était Data + Interprétation = Informations utiles . Un corollaire en 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 l'interpréter. (Vous pouvez avoir des métadonnées qui vous indique cela, mais vous devez savoir comment interpréter le MetaData aussi)

Dans les circonstances, je suggère d'essayer ceci:

file filename

Si cela revient avec quelque chose comme:

filename: data

et vous avez Absolument Aucune idée de quel est le format, quel programme il provient, quelle est son utilisation, ou quoi que ce soit sur le contenu de filename, alors vous devriez probablement abandonner.

Sortie décharmée octale

od (Dump octal) produit un déchargement hybride de texte et octal. Les non-chiffres 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 chiffres de base 8, avec le préfixe C Préfixe standard 0 (par exemple, 032 = 26 en décimal). Votre fichier est interprété comme un flux de d'octets 8 bits .

Sortie de vidage hexagonale

hexdump produit un vidage hex-à-dessus traditionnel, avec une colonne d'octets de 8 bits à Hexadecimal, l'autre montre quoi ASCII ces octets correspondent à OT, le cas échéant (si la valeur de l'octet est un fichier ====ASCII caractère, ou non an ASCII caractère du tout, . est affiché à cette position). Encore une fois, Votre fichier est interprété comme un flux de d'octets 8 bits .

Entiers

Si votre fichier comprend 100% d'entiers binaires (c'est-à-dire un réseau sans tête, uniforme et uniforme d'une sorte de représentation entière), vous devez vous répondre à toutes ces questions:

  • Sont-ils "adéquats" binaires, ou décimal codé binaire (BCD) ? (probablement binaire)
  • Dans quelle mesure sont-ils dans des bits?
  • Si leur largeur n'est pas un multiple de 8, sont-ils emballés dans un bit SMS messages ou base64, ou octet-aligné?
  • Si leur largeur est de 8 bits ou plus, quelle est la Ordre d'octet ? Est-ce grand Endian, petite Endian ou l'une des autres choses plus rares?
  • Sont les entiers signés ou non signés ?
  • S'ils sont signés, sont-ils représentés dans complément de deux (plus susceptibles), ou son complément , ou quelque chose de rare et bizarre?

Il y a probablement plus j'oublie maintenant.

Et ceci est juste pour un ensemble uniforme uniforme itérale d'entiers, provenant d'une architecture commune et moderne de l'ordinateur. Si vos données ont une sorte de complexité, les choses vont devenir si poilues, cela deviendra rapidement plus facile de gagner la loterie que de deviner le format. Et vous avez Pour deviner (une supposition éduquée, mais une supposition), à moins que vous sachiez le format.

19
Alexios