Des utilitaires génériques ou des bibliothèques pour convertir les vidages hexadécimaux en une forme lisible par l'homme?

StackOverflow https://stackoverflow.com/questions/191652

Question

Je travaille beaucoup avec les communications série avec une variété de périphériques et je dois donc souvent analyser les vidages hexadécimaux dans les fichiers journaux. Actuellement, je le fais manuellement en examinant les vidages, en examinant les spécifications du protocole et en notant les résultats. Cependant, cela est fastidieux et source d’erreurs, en particulier lorsque les messages contiennent des centaines d’octets et contiennent des mélanges de données big-endian et little-endian, ASCII, Unicode, compression, CRC,. . . .

J'ai écrit quelques scripts Python pour vous aider dans les cas les plus courants. Mais il y a beaucoup de protocoles à traiter, et passer du temps à écrire un script personnalisé n'a pas de sens, à moins que je sache qu'il me faudra beaucoup de dumps à analyser.

Ce que j'aimerais, c'est une sorte d'utilitaire capable d'automatiser cette activité. Donc, par exemple, si j'ai un dump hexadécimal textuel comme ceci:

7e ff 00 7b  00 13 86 04
00 41 42 43  44 56 ef 7e

et une sorte de description du format du message, comme ceci:

# Field         Size        Byte Order  Output Format
Flag            1                       hex
Address         1                       hex
Control         1                       hex
DataType        1                       decimal
LineIndex       1                       decimal
PollAddress     2           msb         hex
DataSize        2           lsb         decimal
Data            (DataSize)              ascii
CRC             2           lsb         hex
Flag            1                       hex

Je voudrais obtenir une sortie comme ceci:

Flag            0x7e
Address         0xff
Control         0x00
DataType        123
LineIndex       0
PollAddress     0x1386
DataSize        4
Data            "ABCD"
CRC             0xef56
Flag            0x7e

Les analyseurs de protocoles matériels ont souvent des fonctionnalités sophistiquées pour réaliser ce type de tâche, mais je dois travailler avec des fichiers journaux textuels.

Existe-t-il un tel utilitaire ou une telle bibliothèque?

Quelques bonnes réponses ont été trouvées depuis que j'ai créé la prime. Je suppose que les primes fonctionnent!

Wireshark et HexEdit semblent prometteurs; Je vais y jeter un coup d'œil, et j'attribuerai probablement la prime à celle qui me convient le mieux. Mais je reste ouvert à d’autres idées.

Était-ce utile?

La solution

Wireshark est très bon pour ouvrir des protocoles réseau.

Autres conseils

Je suppose que vous avez besoin d’un bon éditeur hexadécimal. Consultez hexedit . J'ai utilisé la version gratuite dans le passé et c'est bien, mais je ne sais pas si elle offre ce que vous recherchez. En gros, vous voulez pouvoir définir une structure, puis décoder les données hexadécimales. Je suppose qu'un bon éditeur d'hex supporterait cela. Vérifiez la version payante de HexEdit ou Google pour un autre éditeur. il y en a beaucoup disponibles.

Généralement, j'utilise emacs hexl-mode pour afficher les fichiers binaires sous la forme d'un "dump de texte". Lorsque j’ai besoin d’une sortie plus spécifique, je fais juste comme vous et écris un analyseur en C ++.

Dans mon travail, nous concevions des protocoles réseau et série pour contrôler le matériel intégré. J'en avais aussi marre de mal lire les dumps et d'écrire des scripts pour chaque protocole; j'ai donc écrit une bibliothèque pour faire exactement ce que vous décrivez. Vous pouvez lui donner une description du protocole sous forme de fichier texte, ainsi que des cases à cocher gui pour la définition de bits individuels, des boutons radio pour choisir entre les combinaisons de bits valides et des listes déroulantes lorsque les choix étaient nombreux. Vous pouvez éditer la vue hexadécimale des données, la vue binaire de chaque champ ou même pointer et cliquer sur les champs et toutes les autres vues seraient mises à jour. Cela nous a fait gagner beaucoup de temps. C'est un peu rapide et sale, mais je le posterais s'il n'appartenait pas à mon employeur. Le fait est que ce n’était pas très difficile à écrire, et une fois que j’ai abandonné les scripts pour chaque protocole et un programme capable de comprendre une description du protocole, les choses étaient formidables. Nous avons arrêté les erreurs liées à la lecture erronée d'un dump, et l'ajout de nouveaux protocoles est devenu trivial. De plus, la description textuelle du protocole est directement entrée dans les spécifications de développement afin que les développeurs de logiciels sachent quoi faire avec le matériel. Je vous encourage à essayer.

Un libPDL , une bibliothèque C ++, pourrait constituer un bon point de départ.

Une autre option peut être NetPDL .

Vous devriez utiliser les commandes binaires Tcl pour les commandes comme ça. Ce qui suit est le point de départ de votre exemple ci-dessus. Tcl est très facile à apprendre et à écrire des scripts. Si vous travaillez en série, vous vous devez d’apprendre au moins les bases.

bash$ tclsh
% binary scan [binary format H* 7eff007b00138604004142434456ef7e] \
  H2H2H2ccH4sa4h4H2 \
  flag1 addr ctl datatype lineidx polladdr datasize data crc flag2
10
% puts "$flag1 $addr $ctl $datatype $lineidx \
  $polladdr $datasize $data $crc $flag2"
7e ff 00 123 0 1386 4 ABCD 65fe 7e

Lorsque vous avez fait votre travail d'ordre d'octets, vous avez alterné les octets mais pas les bits, je ne suis donc pas vraiment sûr de ce que vous recherchiez là-bas. Quoi qu'il en soit, cela vous aidera à démarrer.

Découvrez hexworkshop

Je l'utilise depuis des années pour analyser les vidages hexadécimaux. Il possède un visualiseur de structure qui vous permet de définir la structure de données a dans un style C / C ++, puis d’afficher les données dans ce format.

WinHex prend en charge l'affichage / la modification de formats d'enregistrement définis par l'utilisateur. Vous trouverez quelques exemples à l'adresse http://www.x-ways.net/winhex/templates/index.html

Je suis à peu près sûr d'avoir vu quelque chose comme ça sur CPAN. Je pourrais être plus vague si vous aimez. : -)

Mise à jour: Ce n'est pas exactement ce que vous voulez, mais consultez Parse :: Binary :: FixedFormat

Il existe un utilitaire de ligne de commande BSD appelé hexdump qui le fait grâce à l'utilisation de chaînes de formatage (qui peuvent être dans un fichier externe). Voir https://www.suse.com/communities/blog/making- sense-hexdump / pour une introduction, et par exemple https://www.freebsd.org/cgi/man.cgi? query = hexdump & amp; sektion = 1 pour la page de manuel (avec une attention particulière pour les options -e et -f et la section intitulée Formats ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top