tienen - que hace la libreria os en python
Binary Analizing MIPS: ¿hay una biblioteca de Python para analizar datos binarios? (6)
No conozco ninguno, pero si todo lo demás falla, podría usar ctypes para usar libdwarf, libelf o libbfd directamente.
Estoy trabajando en una utilidad que necesita resolver direcciones hexadecimales para un nombre de función simbólica y un número de línea de código fuente dentro de un binario. La utilidad se ejecutará en Linux en x86, aunque los binarios que analiza serán para un sistema integrado basado en MIPS. Los binarios de MIPS están en formato ELF, utilizando DWARF para la información de depuración simbólica.
Actualmente estoy planificando el fork objdump, pasando una lista de direcciones hexadecimales y analizando la salida para obtener los nombres de las funciones y los números de las líneas fuente. He compilado un objdump con soporte para binarios MIPS, y está funcionando.
Preferiría tener un paquete que me permita buscar cosas de forma nativa desde el código de Python sin forzar otro proceso. No puedo encontrar ninguna mención de libdwarf, libelf, o libbfd en python.org, ni ninguna mención de python en dwarfstd.org.
¿Hay algún módulo adecuado disponible en alguna parte?
He estado desarrollando un analizador DWARF usando Construct . Actualmente es bastante difícil, y el análisis es lento. Pero pensé que debería al menos hacerte saber. Puede adaptarse a sus necesidades, con un poco de trabajo.
Tengo el código en Mercurial, alojado en bitbucket:
- http://bitbucket.org/cmcqueen1975/pythondwarf/
- http://bitbucket.org/cmcqueen1975/construct/ (modificaciones necesarias a la biblioteca Construir)
Construct es una biblioteca muy interesante. DWARF es un formato complejo (como estoy descubriendo) y creo que Construye hasta sus límites.
Hachior es otra biblioteca para analizar datos binarios
Puede que le interese la biblioteca DWARF de pydevtools :
>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF(''test/test'')
>>> dwarf.get_loc_by_addr(0x8048475)
(''/home/emilmont/Workspace/dbg/test/main.c'', 36, 0)
Por favor revisa pyelftools - una nueva biblioteca pura de Python diseñada para hacer esto.