Анализ двоичных файлов MIPS: есть ли библиотека Python для анализа двоичных данных?
Я работаю над утилитой, которая должна преобразовывать шестнадцатеричные адреса в символическое имя функции и номер строки исходного кода в двоичном файле. Утилита будет работать в Linux на x86, хотя анализируемые ею двоичные файлы предназначены для встроенной системы на основе MIPS. Двоичные файлы MIPS представлены в формате ELF с использованием DWARF для символической информации отладки.
В настоящее время я планирую форкать objdump, передавая список шестнадцатеричных адресов и анализируя выходные данные, чтобы получить имена функций и номера исходных строк. Я скомпилировал objdump с поддержкой бинарных файлов MIPS, и он работает.
Я бы предпочел иметь пакет, позволяющий мне искать вещи из кода Python, не создавая другой процесс. Я не могу найти упоминания о libdwarf, libelf или libbfd на python.org, а также упоминания о python на dwarfstd.org.
Где-нибудь есть подходящий модуль?
6 ответов
Пожалуйста, проверьте pyelftools - новая чистая библиотека Python, предназначенная для этого.
Возможно, вас заинтересует библиотека DWARF от pydevtools:
>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
Я разрабатывал парсер DWARF с использованием Construct. В настоящее время довольно грубо, и разбор медленный. Но я подумал, что должен хотя бы сообщить тебе. Это может удовлетворить ваши потребности, с небольшим количеством работы.
У меня есть код в Mercurial, размещенный в bitbucket:
- http://bitbucket.org/cmcqueen1975/pythondwarf/
- http://bitbucket.org/cmcqueen1975/construct/ (необходимые изменения в библиотеке Construct)
Construct - очень интересная библиотека. DWARF - это сложный формат (как я обнаружил), который, я думаю, расширяет возможности Construct.