Există vreo dezasamblare ARM (sau alte tipuri non-x86) care descompune o instrucțiune în componentele sale într-o structură compatibilă cu mașina? În mod ideal ar fi ceva de genul XED sau distorm3 , care se dezasamblează într-o structură și apoi furnizează un API pentru interogarea unor lucruri precum „Este un apel?” „Este aceasta o ramură condiționată?” etc., sau obținerea operanzilor unei instrucțiuni.
Am găsit armstorm , dar în prezent acceptă doar THUMB.
Edit: Pentru a clarifica, caut ceva care poate fi apelat dintr-un alt program și, sperăm, are licențe liberale (compatibile GPL).
Comentarii
- Pentru ceea ce merită, cred că este ceva care va fi adăugat probabil la ERESI pe termen scurt, deja îl au pentru Intel și Sparc și adaugă mai mult suport ARM.
Răspuns
DARM (GitHub) de Jurriaan Bremer este un dezasamblator ARMv7 scris în C și este disponibil sub o licență BSD cu 3 Clauze.
Notă: momentan nu acceptă modul Thumb.
Un exemplu simplu de utilizare a DARM ar putea fi următorul:
// 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 ); }
Comentarii
- Acest lucru pare a fi ceea ce urmăresc! Presupun că aș putea folosi și ambele DARM și furtună de brațe pentru a obține asistență completă …
Răspuns
Da, SDK IDA Pro vă permite să accesați instrucțiunile „părților componente prin intermediul insn_t class (în ua.hpp).
Comentarii
- Este ' excelent de știut, dar eu ' Caut ceva care poate fi apelat dintr-un alt program și sperăm că are licențe liberale.
- @ BrendanDolan-Gavitt: poate că afirmarea că în întrebare este o idee bună atunci?
Răspuns
Un răspuns mai actualizat la această întrebare ar fi sugerarea Biblioteca Capstone . L-am folosit pentru dezasamblarea ARM și este destul de fiabil. IMHO, este cea mai bună bibliotecă open source disponibilă.
Biblioteca se bazează pe descrierile de instrucțiuni TabelGen ale LLVM. Prin urmare, suportul său ISA este la fel de complet ca LLVM.