Er det noen ARM (eller andre ikke-x86) demonterere som spalter en instruksjon i komponentdelene i en maskinvennlig struktur? Ideelt sett vil det være noe sånt som XED eller distorm3 , som demonteres i en struktur og deretter gir et API for å spørre om ting som «Er dette en samtale?» «Er dette en betinget gren?» osv., eller å få operandene til en instruksjon.
Jeg fant armstorm , men den støtter foreløpig bare TOMMEL.
Rediger: For å avklare er jeg på jakt etter noe som kan kalles fra et annet program og forhåpentligvis har liberal lisensiering (GPL-kompatibel).
Kommentarer
- For hva det er verdt, tror jeg det er noe som sannsynligvis vil bli lagt til ERESI på kort sikt, de har det allerede for Intel og Sparc og legger til mer ARM-støtte.
Svar
DARM (GitHub) av Jurriaan Bremer er en ARMv7 demonterer skrevet i C og er tilgjengelig under en 3-klausul BSD-lisens.
Merk: Den støtter foreløpig ikke Thumb-modus.
Et enkelt eksempel på bruk av DARM kan være som følger:
// 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 ); }
Kommentarer
- Dette ser ut som det jeg gikk til! Jeg antar at jeg til og med kunne bruke begge DARM og armstorm for å få full støtte …
Svar
Ja, IDA Pros SDK lar deg få tilgang til instruksjoner «komponentdeler via insn_t klasse (i ua.hpp).
Kommentarer
- At ' er utmerket å vite, men jeg ' Jeg ser etter noe som kan kalles fra et annet program og forhåpentligvis har liberal lisensiering.
- @ BrendanDolan-Gavitt: kanskje å si at det i spørsmålet er en god ide da?
Svar
Et mer oppdatert svar på dette spørsmålet vil være å foreslå Capstone -bibliotek. Jeg har brukt den til ARM-demontering, og den er ganske pålitelig. IMHO, det er det beste åpne kildekodebiblioteket som er tilgjengelig.
Biblioteket er basert på LLVMs TabelGen-instruksjonsbeskrivelser. Derfor er ISA-støtten like fullstendig som LLVM.