2011-08-17 17 views
14

Ho un file oggetto ELF. Voglio sapere quale tipo di informazioni di debug contiene. È stato compilato con il compilatore Diab (sorgente C) per l'architettura PPC. Sono abbastanza sicuro che sia stato costruito con i simboli di debug.Come posso sapere quale tipo di informazioni di debug si trovano in un file oggetto ELF?

Ho provato a estrarre le informazioni di debug con dwarfdump ma non funziona, quindi suppongo che le informazioni di debug non siano di tipo DWARF.

$ dwarfdump file.elf 
No DWARF information present in file.elf 

L'utilizzo di objdump per mostrare le informazioni di debug è vuoto.

$ objdump -g file.elf 
file.elf:  file format elf32-powerpc 

Può essere che questo file ELF non contiene informazioni di debug anche se il file ELF ha sezioni chiamato .debug_sfnames, .debug_srcinfo e .debug.srcinfo? O le informazioni di debug memorizzate in un formato non possono essere gestite da objdump?

+1

Puoi postare il file da qualche parte? –

+3

prova anche con "objdump -W file.elf", per ogni evenienza. Penso che objdump -g non sarà felice a meno che le informazioni non siano STABS – NullPointer

+1

Ok l'ho capito. Beh, non so ancora in che tipo di informazioni di debug il file ELF contenga, ma ho trovato il comando per estrarlo. ddump2 -D elffile fa il trucco. Penso che ddump2 appartenga alla toolchain fornita con il compilatore diab. – johnj33

risposta

6

Probabilmente si dovrebbe utilizzare l'utilità nm

La nm deve visualizzare le informazioni simboliche che appaiono nel file oggetto, file eseguibile, o object-file di libreria denominata dai file. Se non sono disponibili informazioni simboliche per un file di input valido, l'utilità nm segnala tale fatto, ma non considera una condizione di errore .

In alternativa è possibile utilizzare strumenti come ldd per vedere quali librerie sono richieste da un binario.

3

Non sembra che nessuno abbia mai risposto alla tua domanda effettiva, ovvero: come determinare a livello di codice il sapore dei simboli di debug presenti in un dato binario ELF. Come meglio posso dire, questo non è dato esplicitamente all'interno dell'ELF; tuttavia, può essere dedotto dalla presenza di nomi di sezione specifici all'interno del file ELF. Ad esempio: una sezione denominata ".debug_info" implica DWARF2 o superiore, mentre ".stab" implica stabs. Un googling veloce dei tuoi ".debug_sfnames" suggerisce DWARF1. (Non so il motivo per cui il vostro 'dwarfdump' non ha rilevato che ... forse la tua dwarfdump è per nani più recenti, e scaricai la compatibilità?)

3

In GNU/Linux:

$ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq 

Returns la versione dei simboli DWARF utilizzata nel file binario.