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.