python - Biblioteca para leer información de depuración DWARF del archivo ELF
debugging (5)
Desafortunadamente, sus opciones para leer la información de depuración de DWARF son bastante limitadas.
Que yo sepa, solo hay una biblioteca de propósito general para analizar la información de depuración de DWARF y es libdwarf . Desafortunadamente, nadie ha escrito enlaces de Python para libdwarf (tal vez podrías asumirlo y compartirlo con todos los demás :)) Ciertamente, podrías intentar acceder a las funciones de la biblioteca utilizando ctypes o la API de Python C.
Sin embargo, una solución mucho menos elegante es utilizar un analizador DWARF existente y analizar la información textual que genera. Sus opciones para esto (en Linux) son
objdump -W
readelf --debug-dump=[OPTIONS]
Actualmente utilizo un proyecto que se basa en la lectura y su soporte para la información de depuración DWARF es muy completo. Simplemente puede usar Python para ejecutar cualquiera de los comandos en el shell y luego analizar la información que necesite. Ciertamente no es tan ideal como una biblioteca, pero debería hacer el truco.
EDITAR: Noté en un comentario anterior que mencionaste Windows. Ambos programas (objdump y readelf) son parte de GNU-binutils, por lo que deberían estar disponibles con Cygwin o mingw.
¿Alguna recomendación para una buena biblioteca multiplataforma para leer información de depuración de archivos ELF en formato DWARF? Me gustaría leer la información de depuración DWARF en un programa de Python.
Hay un nuevo niño en el bloque, pyelftools , una biblioteca de Python pura para analizar los formatos ELF y DWARF. Darle una oportunidad.
Su objetivo es ser completo y se encuentra actualmente en desarrollo activo, por lo que cualquier problema debe ser resuelto de manera rápida y con entusiasmo :-)
Podría estar interesado en la biblioteca DWARF de 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
[...]
Puede encontrar información útil aquí: