Библиотека для чтения отладочной информации DWARF файла ELF

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

5 ответов


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

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


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

общие форматы отладки-STAB и гном. Библиотека для чтения карлик libdwarf.


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

вы можете найти полезную информацию здесь:


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

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

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

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

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

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