Библиотека для чтения файла отладки ELF DWARF - PullRequest
19 голосов
/ 09 июля 2009

Какие-нибудь рекомендации для хорошей кроссплатформенной библиотеки для чтения отладочной информации файла ELF в формате DWARF? Я хотел бы прочитать отладочную информацию DWARF в программе на Python.

Ответы [ 4 ]

21 голосов
/ 06 января 2012

В блоке появился новый ребенок - pyelftools - чистая библиотека Python для анализа форматов ELF и DWARF. Попробуйте.

Он стремится быть полнофункциональным и в настоящее время находится в активной разработке, поэтому любые проблемы должны решаться быстро и с энтузиазмом: -)

10 голосов
/ 09 июля 2009

Понятие "информация отладки ELF" на самом деле не существует: спецификация ELF оставляет содержание раздела .debug намеренно неопределенным.

Распространенными форматами отладки являются STAB и DWARF . Библиотека для чтения DWARF: libdwarf .

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

Вас может заинтересовать библиотека DWARF из pydevtools :

>>> from devtools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
>>> print dwarf
.debug_info
COMPILE_UNIT<header overall offset = 0>
<0><11> compile_unit
producer: GNU C 4.4.3
language: C89
name: a/test.c
comp_dir: /home/emilmont/Workspace/dbg/test
low_pc: 0x080483e4
high_pc: 0x08048410
stmt_list: 0
[...]
4 голосов
/ 15 июля 2009

Ваши параметры для чтения отладочной информации DWARF, к сожалению, весьма ограничены.

Насколько я знаю, существует только одна универсальная библиотека для анализа отладочной информации DWARF, а это libdwarf . К сожалению, никто не написал Python-привязки для libdwarf (возможно, вы могли бы взять его на себя и поделиться им со всеми остальными :)) Вы наверняка могли бы попытаться получить доступ к функциям библиотеки, используя ctypes или Python C API .

Однако гораздо менее элегантное решение - использовать существующий анализатор DWARF и анализировать выводимую им текстовую информацию. Ваши варианты для этого (в Linux):

objdump -W
readelf --debug-dump=[OPTIONS]

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

РЕДАКТИРОВАТЬ: я заметил в предыдущем комментарии вы упомянули Windows. Обе эти программы (objdump и readelf) являются частью GNU-binutils, поэтому они должны быть доступны с Cygwin или mingw.

...