web-dev-qa-db-fra.com

Utilisation de hexdump pour la sortie uniquement ASCII

J'essaie de générer des valeurs ASCII correspondant à des données binaires. J'ai appliqué avec succès l'utilitaire hexdump à la sortie hexdump et ASCII côte à côte comme ci-dessous: 

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

Cependant, j'aimerais seulement voir ASCII en tant que valeurs de sortie. Je ne m'intéresse pas aux valeurs hexadécimales. Par exemple, le résultat devrait être le suivant (environ correspondant à ce qui précède): 

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(Je n'ai pas pu utiliser les commutateurs de hd pour cela.)

21
recluze

Si vous avez seulement besoin de voir le contenu du fichier binaire, strings devrait être utile:

Pour chaque fichier donné, GNU strings imprime le caractère imprimable séquences de 4 caractères au moins (ou le nombre indiqué avec l'option -n) et suivies d'un caractère non imprimable . strings est principalement utile pour déterminer le contenu de texte non textuel des dossiers.

32
raina77ow

Alors que answer de raina77ow à propos de la commande strings(1) est le moyen approprié d'obtenir le résultat souhaité, la demande spécifique de tirer parti de hexdump(1) pour filtrer uniquement les caractères imprimables peut avoir un sens dans certains contextes. Je vais répondre à cela spécifiquement ici.

L'utilitaire hexdump s'avère prendre en charge un moteur de formatage étonnamment généralisé. Cela a probablement été fait pour uniformiser la mise en œuvre des différents formats sélectionnables. Si votre copie de hexdump expose ce moteur (comme beaucoup le font) via l'option de ligne de commande -e, vous pouvez le demander à ce que vous demandiez.

La clé est l’option -e et le langage de formatage qu’elle prend en charge. Ce langage permet de spécifier des chaînes de format qui consomment des octets de l’entrée et produisent du texte. Une commande telle que:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16

consommera 16 octets à la fois, les affichera au format %_p et ajoutera une nouvelle ligne après chaque 16ème octet. Chaque caractère non imprimable est remplacé par un . dans la sortie. 

Les autres formats à prendre en compte sont %_c et %_u. Le premier remplace les caractères non imprimables par leur séquence d'échappement ANSI-C ou par un nombre octal à trois chiffres. La seconde remplace chaque caractère non-imprimé par le nom conventionnel du caractère de contrôle ASCII ou par un nombre hexadécimal à deux chiffres.

Si votre copie de hexdump ne possède pas l'option -e ou est lente ou si vous ne disposez pas de l'implémentation de hexdump, alors l'implémentation libérée, rapide et raisonnablement portable de hexdump récemment publiée par William Ahern mérite d'être examinée. . Il devrait être prêt à l'emploi pour de nombreux systèmes de type Unix, et avec des modifications mineures, il est construit avec MingW GCC sous Windows. Un attribut clé de cette implémentation est que le fichier source unique peut être construit en tant que bibliothèque partagée à inclure dans un autre programme, en tant que module Lua à utiliser à partir de Lua , ainsi qu’en tant qu’exécutable autonome implémentant la commande hexdump.

8
RBerteig

vous pouvez utiliser od :

od -t c file

Ou awk avec hexdump comme ceci:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

Remarque: vous devez modifier la commande awk si vous modifiez le nombre de colonnes dans hexdump.

6
iabdalkader
hexdump -C file /dev/sda4|cut -c 62-77

J'espère que ça aide

0
Ahtisham Wani