Анализ двоичных файлов MIPS: есть ли библиотека Python для анализа двоичных данных? - PullRequest
11 голосов
/ 05 сентября 2008

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

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

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

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

Ответы [ 6 ]

8 голосов
/ 05 сентября 2010

Вас может заинтересовать библиотека 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)
4 голосов
/ 06 января 2012

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

4 голосов
/ 04 февраля 2009

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

Существует даже пример для формата файла ELF32 .

3 голосов
/ 30 августа 2009

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

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

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

3 голосов
/ 05 сентября 2008

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

2 голосов
/ 11 июня 2010

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

...