Какие-нибудь общие утилиты или библиотеки для преобразования шестнадцатеричных дампов в удобочитаемую форму? - PullRequest
5 голосов
/ 10 октября 2008

Я много работаю с последовательной связью с различными устройствами, и поэтому мне часто приходится анализировать шестнадцатеричные дампы в файлах журналов. В настоящее время я делаю это вручную, просматривая дампы, просматривая спецификации протокола и записывая результаты. Однако это утомительно и подвержено ошибкам, особенно когда сообщения содержат сотни байтов и содержат смеси данных с прямым и прямым порядком байтов, ASCII, Unicode, сжатие, CRC,. , , .

Я написал несколько скриптов Python, чтобы помочь в более распространенных случаях. Но есть много протоколов, с которыми приходится иметь дело, и нет смысла тратить время на написание собственного скрипта, если я не знаю, у меня будет много дампов для анализа.

Что мне нужно, так это какая-то утилита, которая может автоматизировать эту деятельность. Так, например, если у меня есть текстовый шестнадцатеричный дамп, как это:

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

и какое-то описание формата сообщения, например:

# 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

Я бы получил вывод примерно так:

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

Аппаратные анализаторы протоколов часто имеют причудливые функции для подобных вещей, но мне нужно работать с текстовыми лог-файлами.

Существует ли такая утилита или библиотека?


Некоторые хорошие ответы пришли с тех пор, как я учредил награду. Я думаю, награды работают!

Wireshark и HexEdit выглядят многообещающе; Я посмотрю на них и, возможно, присужду награду тому, кто мне больше подходит. Но я все еще открыт для других идей.

Ответы [ 10 ]

2 голосов
/ 05 февраля 2009

Полагаю, вам нужен хороший шестнадцатеричный редактор. Взгляните на hexedit . Я использовал бесплатную версию в прошлом, и это хорошо, но я не знаю, предлагает ли она то, что вы ищете. По сути, вы хотите иметь возможность определить структуру и затем иметь возможность декодировать шестнадцатеричные данные в нее. Я полагаю, хороший редактор hex поддержит это. Проверьте платную версию HexEdit или Google для другого редактора; Есть много доступных.

2 голосов
/ 05 февраля 2009

Wireshark неплохо умеет открывать сетевые протоколы.

1 голос
/ 07 февраля 2009

WinHex поддерживает отображение / редактирование пользовательских форматов записи. Есть несколько примеров на http://www.x -ways.net / winhex / templates / index.html

1 голос
/ 07 февраля 2009

Взгляните на hexworkshop

Я использую его годами для анализа гекс-дампов. Он имеет просмотрщик структуры, который позволяет вам определять структуру данных a в стиле C / C ++ и затем отображать данные в этом формате.

1 голос
/ 06 февраля 2009

Вы должны использовать команды Tcl binary для подобных вещей. Далее следует отправная точка для вашего примера выше. Tcl действительно прост в изучении и написании сценариев. Если вы занимаетесь последовательной связью, вы обязаны изучить хотя бы основы.

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

Когда вы делали свой порядок байтов, вы переключали байты, но не биты, поэтому я не совсем уверен, что вы там искали. В любом случае, это поможет вам начать.

1 голос
/ 06 февраля 2009

Одной из возможных отправных точек будет libPDL , библиотека C ++.

Другой вариант может быть NetPDL .

1 голос
/ 05 февраля 2009

В моей работе мы разрабатывали сетевые и последовательные протоколы для управления встроенным оборудованием. Я также устал от неправильного чтения дампов и написания скриптов для каждого протокола, поэтому я написал библиотеку, которая будет делать именно то, что вы описываете. Вы можете дать ему описание протокола в текстовом файле, и в нем есть графический интерфейс для поддержки отдельных битов, переключатели для выбора между допустимыми комбинациями битов и раскрывающиеся списки, когда вариантов много. Вы можете отредактировать шестнадцатеричное представление данных, двоичное представление каждого поля или даже указать и щелкнуть поля, и все остальные представления обновятся. Это сэкономило нам кучу времени. Это немного быстро и грязно, но я бы опубликовал его, если бы он не принадлежал моему работодателю. Дело в том, что писать было не очень сложно, и как только я отказался от сценариев для каждого протокола и от одной программы, которая могла бы понять описание протокола, все было замечательно. Мы прекратили провалы, связанные с неправильным чтением дампа, и добавление новых протоколов стало тривиальным. Кроме того, текстовое описание протокола вошло прямо в спецификации разработки, чтобы разработчики программного обеспечения знали, что делать с оборудованием. Я призываю вас попробовать его.

1 голос
/ 05 февраля 2009

Как правило, я использую emacs hexl-mode для просмотра двоичных файлов как «текстового дампа». Когда мне нужен более конкретный вывод, я просто делаю как вы и пишу парсер на C ++.

0 голосов
/ 29 апреля 2017

Существует утилита командной строки BSD под названием hexdump, которая делает это с помощью строк формата (которые могут быть во внешнем файле). См. https://www.suse.com/communities/blog/making-sense-hexdump/ для вступления и, например, https://www.freebsd.org/cgi/man.cgi?query=hexdump&sektion=1 для страницы руководства (с особым вниманием к опциям -e и -f и разделу под названием Форматы ).

0 голосов
/ 10 октября 2008

Я почти уверен, что видел что-то подобное на CPAN. Я мог бы быть более расплывчатым, если хотите. : -)

Обновление: Это не совсем то, что вы хотите, но посмотрите на Parse :: Binary :: FixedFormat

...