Esistono disassemblatori ARM che forniscono output strutturato?

Esistono disassemblatori ARM (o altri non x86) che scompongono unistruzione nelle sue parti componenti in una struttura a misura di macchina? Idealmente sarebbe qualcosa come XED o distorm3 , che si smontano in una struttura e quindi forniscono unAPI per interrogare cose come “È una chiamata?” “È un ramo condizionale?” ecc. o ottenendo gli operandi di unistruzione.

Ho trovato armstorm , ma attualmente supporta solo THUMB.

Modifica: per chiarire, sto cercando qualcosa che possa essere chiamato da un altro programma e spero abbia una licenza liberale (compatibile con GPL).

Commenti

  • Per quel che vale, penso che sia qualcosa che probabilmente verrà aggiunto a ERESI a breve termine, lo hanno già per Intel e Sparc e stanno aggiungendo più supporto ARM.

Answer

DARM (GitHub) di Jurriaan Bremer è un disassemblatore ARMv7 scritto in C ed è disponibile con una licenza BSD di 3 clausole.

Nota: attualmente non supporta la modalità Thumb.

Un semplice esempio di utilizzo di DARM potrebbe essere il seguente:

// The structure which will hold all the metadata about the disassembled instruction... darm_t d; // disassemble a 32bit opcode... if( darm_armv7_disasm( &d, 0xE12FFF14 ) >= 0 ) { if( d.instr == I_BX ) { // do something with a BX instructiuon... } // print the disassembled full instruction darm_str_t str; if( darm_str( &d, &str) > 0 ) printf( "%s\n", str.instr ); } 

Commenti

  • Questo sembra quello che stavo cercando! Suppongo di poter usare entrambi DARM e armstorm per ottenere il supporto completo …

Rispondi

Sì, IDA Pro “s SDK consente di accedere alle parti dei componenti delle istruzioni tramite la classe insn_t (in ua.hpp).

Commenti

  • ' è eccellente da sapere, ma ' Sto cercando qualcosa che possa essere chiamato dallinterno di un altro programma e spero abbia una licenza liberale.
  • @ BrendanDolan-Gavitt: forse affermare che nella domanda è una buona idea allora?

Risposta

Una risposta più aggiornata a questa domanda sarebbe suggerire Libreria Capstone . Lho usato per lo smontaggio ARM ed è abbastanza affidabile. IMHO, è la migliore libreria open source disponibile.

La libreria è basata sulle descrizioni delle istruzioni TabelGen di LLVM. Pertanto, il suo supporto ISA è completo come LLVM.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *