Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 5

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

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

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

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

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

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