Анализ двоичных файлов 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)
Я не знаю ни одного, но если все остальное не удастся, вы можете использовать ctypes напрямую использовать libdwarf, libelf или libbfd.
Я разрабатывал парсер карликов, используя построить. В настоящее время довольно грубо, и разбор идет медленно. Но я подумал, что должен, по крайней мере, дать тебе знать. Это может удовлетворить ваши потребности, с небольшим количеством работы.
У меня есть код в Mercurial, размещенный в bitbucket:
- http://bitbucket.org/cmcqueen1975/pythondwarf/
- http://bitbucket.org/cmcqueen1975/construct/ (необходимые изменения для построения библиотека)
построить очень интересная библиотека. DWARF-это сложный формат (как я обнаруживаю) и толкает конструкцию к ее пределам, я думаю.