2011-08-25 13 views
8

Sto provando a disassemblare un oggetto creato per ARM con gcc. Sfortunatamente, objdump sta cercando di indovinare se il codice è ARM e Thumb, e sta sbagliando: pensa che il mio codice sia Thumb quando in realtà è ARM.objdump e ARM vs Thumb

Vedo che objdump ha un'opzione per forzare l'interpretazione di tutte le istruzioni come Thumb (-Mforce-thumb), ma non ne ha uno per forzare la modalità ARM!

Questa sembra un'omissione davvero bizzarra per me, e sta seriamente ostacolando la mia capacità di portare a termine il lavoro (sono su un dispositivo embedded e il mio unico mezzo di debug è guardare allo smontaggio). Ho provato vari approcci, incluso provare a dire a objdump di usare un'architettura ARM che non supporta Thumb, ma nulla sembra funzionare. Qualche idea?

(E sì, lo so che le istruzioni sono davvero ARM ...)

+0

stai eliminando i file binari (elfo), forse le informazioni erano lì e quindi rimosse. O forse devi aggiungere un interruttore per includere le informazioni di debug nel binario. –

+0

Oggi è 'objdump ... -Mno-force-thumb'. Non posso dire se questo fosse presente nel 2011. Essenzialmente è ARM o Thumb, quindi quando dici 'no-force-thumb' il set di istruzioni è ARM. – JSmyth

risposta

0

Questo suona come un insetto in entrambi compilatore/linker o objdump. Normalmente i simboli dovrebbero essere marcati correttamente se sono Thumb o ARM e disassemblati di conseguenza.

Detto questo, ci sono alcune cose che puoi provare:

  1. file come binario semplice (-b -D binario) interpretano - questo consente di disattivare il simbolo controllo e sarà smontare tutto il file come ARM. Lato negativo: un sacco di spazzatura nell'output, nessun indirizzo piacevole.
  2. utilizzare IDA Pro. Anche se indovina in modo errato, puoi sempre ignorare la sua decisione. Inoltre, è un ambiente di smontaggio molto più bello :)
+0

Ho bisogno delle informazioni sul simbolo, quindi so cosa sto guardando, quindi usare il binario non lo taglia, temo. Il file in questione ha informazioni di debug in modo che le informazioni di marcatura dovrebbero essere lì. Il mio processo di compilazione è complicato ma coinvolge gcc in tutto; qualche idea su cosa potrebbe essere il simbolo del marchio? –

+0

È difficile dire qual è esattamente il problema. Stampa il contenuto della tabella dei simboli e dai un'occhiata a print_insn (_arm) in arm-dis.c. Forse questo ti darà alcune idee. –

3

arm-linux-gnueabi-objdump -marm -b binary -D fa il trucco per me. Tuttavia, non conserva le informazioni sui simboli, quindi non è proprio quello che stai cercando, ma ti dà il disassemblaggio, che è un inizio.