Qualche raccomandazione per una buona libreria multipiattaforma per leggere le informazioni di debug del file ELF in formato DWARF? Mi piacerebbe leggere le informazioni di debug di DWARF in un programma Python.Libreria per leggere il file ELF Informazioni di debug DWARF
risposta
C'è un nuovo capretto sul blocco - pyelftools - una libreria Python puro per analizzare i formati ELF e nani. Provaci.
Vuole essere feature-complete ed è attualmente in fase di sviluppo, in modo che qualsiasi problema deve essere gestito in modo rapido e con entusiasmo :-)
Il concetto di "informazioni di debug ELF" non esiste realmente: la specifica ELF lascia il contenuto della sezione .debug volutamente non specificato.
I formati di debug comuni sono STAB e DWARF. Una libreria per leggere DWARF è libdwarf.
Sì, giusto. DWARF è quello che mi interessa. –
Ho aggiornato la domanda di conseguenza. –
È multipiattaforma libdwarf, lo sai? La pagina non dice, ma sembra avere un gusto generale per Unix. –
Potreste trovare informazioni utili qui:
Grazie, ho perso l'altra domanda SO, credo perché non stavo cercando "DWARF". Aggiornerò il titolo di questa domanda –
Le opzioni per la lettura delle informazioni di debug nani sono purtroppo abbastanza limitate.
Per quanto ne so, esiste una sola libreria di uso generale per l'analisi delle informazioni di debug del DWARF e che è libdwarf. Sfortunatamente nessuno ha scritto binding Python per libdwarf (forse potresti prenderlo su di te e condividerlo con tutti gli altri :)) Potresti certamente tentare di accedere alle funzioni della libreria usando ctypes o Python C API.
Una soluzione molto meno elegante, tuttavia, è utilizzare un parser DWARF esistente e analizzare le informazioni testuali che emette. Le opzioni per questo (su Linux) sono
objdump -W
readelf --debug-dump=[OPTIONS]
Attualmente uso un progetto che costruisce fuori di readelf ed è il supporto per le informazioni di debug NANO è molto piena funzionalità. Potresti semplicemente usare Python per eseguire entrambi i comandi nella shell e quindi analizzare le informazioni di cui hai bisogno. Certamente non è l'ideale come una biblioteca, ma dovrebbe fare il trucco.
EDIT: Ho notato in un commento precedente che hai menzionato Windows. Entrambi questi programmi (objdump e readelf) fanno parte di GNU-binutils, quindi dovrebbero essere disponibili con Cygwin o mingw.
c'è anche 'dwarfdump'. – hochl
Potreste essere interessati nella biblioteca nano di 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
[...]
È bello saperlo. Un paio di domande: 1) Quali piattaforme sono supportate (Windows, Linux)? 2) Puoi metterlo su [PyPI] (http://pypi.python.org/pypi)? –
È su PyPI: http://pypi.python.org/pypi/BinTools/0.1.0 – emilmont
Grande! La documentazione non menziona piattaforme supportate. Funziona su Windows? –
Le votazioni per chiudere come rec strumento. –