Анализ двоичных файлов MIPS: существует ли библиотека Python для анализа двоичных данных?

Я работаю над утилитой, которая должна разрешать шестнадцатеричные адреса для имени символьной функции и номера строки исходного кода в двоичном файле. Утилита будет работать в Linux на x86, хотя двоичные файлы, которые она анализирует, будут для встроенной системы на основе MIPS. Двоичные файлы MIPS находятся в формате ELF, используя DWARF для символьной отладочной информации.

в настоящее время я планирую fork objdump, передавая список шестнадцатеричных адресов и анализируя вывод, чтобы получить имена функций и источник номер строки. Я скомпилировал objdump с поддержкой двоичных файлов MIPS, и он работает.

Я бы предпочел иметь пакет, позволяющий мне искать вещи изначально из кода Python без разветвления другого процесса. Я не могу найти упоминания о libdwarf, libelf или libbfd на python.org, ни любое упоминание о python на dwarfstd.org.

есть ли где-нибудь подходящий модуль?

6 ответов


пожалуйста, проверьте pyelftools - новая чистая библиотека Python предназначена для этого.


вас может заинтересовать библиотека гномов из 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.


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

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

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


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