¿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 de DWARF en un programa de Python.Biblioteca para leer el archivo ELF Información de depuración DWARF
Respuesta
Hay un nuevo chico en el bloque - pyelftools - una biblioteca de Python puro para analizar los formatos ELF y enano. Darle una oportunidad.
Su objetivo es ser de características completo y se encuentra actualmente en desarrollo activo, por lo que cualquier problema debe ser manejado de manera rápida y con entusiasmo :-)
El concepto de "información de depuración ELF" no existe realmente: la especificación ELF deja el contenido de la sección .debug deliberadamente sin especificar.
Los formatos comunes de depuración son STAB y DWARF. Una biblioteca para leer DWARF es libdwarf.
Sí, es verdad. DWARF es lo que me interesa. –
Actualicé la pregunta en consecuencia. –
Es libdwarf multiplataforma, ¿sabes? La página no dice, pero parece tener un sabor Unix general. –
Usted puede encontrar aquí informaciones útiles:
Gracias, me perdí esa otra pregunta, porque no estaba buscando "DWARF". Actualizaré el título de esta pregunta. –
Sus opciones para leer la información de depuración DWARF son por desgracia bastante limitada.
Por lo que sé, solo hay una biblioteca de propósito general para analizar la información de depuración de DWARF y es libdwarf. Lamentablemente, nadie ha escrito enlaces de Python para libdwarf (tal vez podría abordarlo y compartirlo con todos los demás :)) Sin duda podría intentar acceder a las funciones de la biblioteca utilizando ctypes o Python C API.
Una solución mucho menos elegante, sin embargo, es usar un analizador DWARF existente y analizar la información textual que genera. Sus opciones para este (en Linux) son
objdump -W
readelf --debug-dump=[OPTIONS]
Actualmente utilizo un proyecto que se construye fuera de readelf y es el apoyo a la información de depuración DWARF se ofrece muy completo. Simplemente podría 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 ser el truco.
EDIT: Noté en un comentario anterior que mencionó Windows. Ambos programas (objdump y readelf) son parte de GNU-binutils, por lo que deberían estar disponibles con Cygwin o mingw.
allí es 'dwarfdump', también. – hochl
Quizás se encuentre interesado en el enano de la biblioteca 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
[...]
Eso es genial de saber. Un par de preguntas: 1) ¿Qué plataformas son compatibles (Windows, Linux)? 2) ¿Puedes ponerlo en [PyPI] (http://pypi.python.org/pypi)? –
Está en PyPI: http://pypi.python.org/pypi/BinTools/0.1.0 – emilmont
¡Genial! La documentación no menciona plataformas compatibles. ¿Funciona en Windows? –
- 1. leer información de archivo de audio php
- 2. Obteniendo convenciones de llamadas desde la información de DWARF
- 3. Lectura del archivo DWARF en Mac OSX
- 4. dónde/cómo guarda Apples GCC DWARF dentro de un archivo ejecutable
- 5. Leer la entrada GOT en Elf Binary
- 6. Agregar sección al archivo ELF
- 7. Biblioteca compartida Proxy (sharedlib, shlib, so) para ELF?
- 8. archivo ELF a mano
- 9. Formato de archivo de núcleo ELF
- 10. Programado Leer estado de depuración en Manifiesto
- 11. ¿Cómo controlar el nivel de información de depuración en glib?
- 12. Biblioteca para leer un volcado de MySQL?
- 13. Biblioteca .NET para leer marcos de video
- 14. a.out reemplazado por formato de archivo ELF?
- 15. Linux: ¿Cómo incrustar información de versión en una biblioteca compartida y en un archivo binario?
- 16. de comandos por lotes de DOS para leer algo de información de archivo de texto
- 17. ¿Herramienta para la modificación simple del archivo elf?
- 18. Embalaje de un archivo en un archivo ejecutable ELF
- 19. Biblioteca para leer/escribir archivos pbxproj/xcodeproj?
- 20. glibc: archivo elf OS ABI no válido
- 21. C biblioteca para leer la versión EXE de Linux?
- 22. ¿Cuáles son las diferencias de encabezado ELF entre un archivo de objeto ELF y un objeto compartido?
- 23. GCC genera un archivo ELF ejecutable cuando quiero una biblioteca compartida
- 24. ¿Determina si el archivo .class se compiló con información de depuración?
- 25. Leer recursos de un archivo DLL
- 26. Cómo leer un archivo pim.vol
- 27. gcc: habilitar los símbolos de depuración en la biblioteca compartida
- 28. ¿Cómo puedo imprimir información sobre un NET: HTTPRequest para depuración?
- 29. MSbuild para actualizar el archivo de información de montaje
- 30. ¿Existe una amplia biblioteca de C para leer pares de nombre/valor de un archivo?
votación para cerrar como rec herramienta. –