2010-07-19 11 views

risposta

50

È possibile utilizzare file e objdump su Linux. In particolare, puoi vedere se il file dice "stripped" o "not stripped", e se objdump --syms restituisce qualcosa di utile (per me, dice "no symbols" per una build regolare).

+4

Spogliato significa nessun simbolo, giusto? –

+17

l'equivalente per OS X è 'otool -Iv'. –

+5

cosa cercare nell'output di otool -Iv? –

29

Quando si esegue il comando objdump --syms, vedo molto di più di "senza simboli" in uscita (almeno, per gli oggetti kernel).

Per verificare se ci sono informazioni di debug all'interno dell'oggetto kernel, è possibile aggiungere quanto segue alla fine del comando objdump: | grep debug.

Se questa stringa viene trovata, si sa che l'oggetto kernel contiene informazioni di debug. In caso contrario, si tratta di un oggetto kernel "pulito".

Esempio di un modulo del kernel ho compilato senza informazioni di debug:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 

Esempio di quello stesso modulo del kernel ho compilato con le informazioni di debug:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 
00000000 l d .debug_frame 00000000 .debug_frame 
00000000 l d .debug_info 00000000 .debug_info 
00000000 l d .debug_abbrev 00000000 .debug_abbrev 
00000000 l d .debug_loc  00000000 .debug_loc 
00000000 l d .debug_aranges 00000000 .debug_aranges 
00000000 l d .debug_ranges 00000000 .debug_ranges 
00000000 l d .debug_line 00000000 .debug_line 
00000000 l d .debug_str  00000000 .debug_str 
00000010 l  .debug_frame 00000000 $d 

Come puoi vedere, la prima uscita non restituisce nulla, mentre la seconda uscita restituisce le linee con debug in essa.

Nota: nel mio caso, il comando file mi ha restituito "non rimosso" in sia nel caso sia nel caso di debug e non di debug. Tuttavia, la differenza di dimensioni dell'oggetto del kernel era notevole:

  • ca. 16k senza informazioni di debug
  • ca. 137k con informazioni di debug

Chiaramente, quest'ultima versione conteneva informazioni di debug all'interno.

La mia domanda: il comando file è affidabile in questi casi? Da quello che ho vissuto, mi affido al comando objdump --syms ... | grep debug.

+0

Anche io ho avuto lo stesso problema con 'file'. Per me, 'objdump --syms' senza il bit' grep' produce molti risultati anche nella build non di debug, ma 'grep' aiuta a richiamare i simboli specifici di debug, quindi funziona per me. – patrickvacek

+1

+ uno per cancellare la vaghezza nell'output 'file' – ADJ

Problemi correlati