2008-10-10 17 views
5

Я много работаю с последовательной связью с различными устройствами, поэтому мне часто приходится анализировать шестнадцатеричные дампы в файлах журналов. В настоящее время я делаю это вручную, глядя на дампы, глядя на спецификацию протокола и записывая результаты. Тем не менее, это утомительно и подвержено ошибкам, особенно сообщения whem содержат сотни байтов и содержат смеси больших и малых чисел, 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 выглядят многообещающими; Я посмотрю на них и проворно награжу щедрость в зависимости от того, что мне подходит. Но я все еще открыт для других идей.

ответ

0

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

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

+0

Ух-о, похоже, что моя подписка на бонус увеличила отрицательный рейтинг для этого ответа. – 2009-02-05 18:39:28

+0

Он спустился после того, как вы отправили щедрость, но это заставило меня опубликовать обновление, а затем оно поднялось на один, так что я чистый позитив на репутации. – 2009-02-05 18:54:09

1

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

1

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

2

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

1

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

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

1

Вы должны использовать команды 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

Посмотрите hexworkshop

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^