Вы можете взглянуть на avr-readelf в binutils. Функция display_debug_lines () в binutils / dwarf.c выполняет работу по декодированию информации о количестве белья в DWARF.
Также, как предложено выше, вы можете использовать libdwarf. Это делает хорошую работу по сокрытию низкоуровневых сложностей DWARF и позволяет вам сосредоточиться на получении данных.
После настройки libdwarf с помощью elfdescriptor и получения структуры Dwarf_Debug вы можете сделать следующее:
- Пройдите все единицы компиляции с помощью dwarf_srclines ()
- используйте dwarf_srclines () для каждого cu
- использовать dwarf_lineaddr () для каждой записи в массиве, возвращенной из dwarf_srclines ()
- не забудьте использовать dwarf_dealloc () в нужных местах.