Анализ двоичных файлов 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)

Вы должны дать Построить попытку. Очень полезно анализировать двоичные данные в объекты Python.

Есть даже пример для формата файла ELF32.

Я не знаю ни одного, но если ничего не помогает, вы можете использовать ctypes для непосредственного использования libdwarf, libelf или libbfd.

Я разрабатывал парсер DWARF с использованием Construct. В настоящее время довольно грубо, и разбор медленный. Но я подумал, что должен хотя бы сообщить тебе. Это может удовлетворить ваши потребности, с небольшим количеством работы.

У меня есть код в Mercurial, размещенный в bitbucket:

Construct - очень интересная библиотека. DWARF - это сложный формат (как я обнаружил), который, я думаю, расширяет возможности Construct.

hachior - еще одна библиотека для анализа двоичных данных

Другие вопросы по тегам