Библиотека для чтения ELF файла DWARF отладочная информация
Любые рекомендации для хорошей кроссплатформенной библиотеки для чтения отладочной информации файла ELF в формате DWARF? Я хотел бы прочитать отладочную информацию DWARF в программе Python.
4 ответа
В блоке появился новый ребенок - pyelftools - чистая библиотека Python для анализа форматов ELF и DWARF. Попробуйте.
Он стремится быть полнофункциональным и в настоящее время находится в активной разработке, поэтому любые проблемы должны решаться быстро и с энтузиазмом:-)
Возможно, вас заинтересует библиотека 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
[...]
Вы можете найти полезную информацию здесь:
Ваши параметры для чтения отладочной информации 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.