Existují nějaké disassemblery ARM (nebo jiné non-x86), které rozkládají instrukce na její součásti ve strojově příjemné struktuře? V ideálním případě by to bylo něco jako XED nebo distorm3 , které se rozloží na strukturu a poté poskytnou API pro dotazy jako „Je to hovor?“ „Je to podmíněná větev?“ atd., nebo získání operandů instrukce.
Našel jsem armstorm , ale aktuálně podporuje pouze PALEC.
Upravit: Abych to objasnil, hledám něco, na co lze volat z jiného programu a doufejme, že má liberální licence (kompatibilní s GPL).
Komentáře
- Za to, co to stojí, si myslím, že je to něco, co bude pravděpodobně přidáno do ERESI v blízké budoucnosti, již to mají pro Intel a Sparc a přidávají další podporu ARM.
Odpověď
DARM (GitHub) od Jurriaana Bremera je disassembler ARMv7 v C a je k dispozici pod tříčlennou licencí BSD.
Poznámka: Aktuálně nepodporuje režim palce.
Jednoduchý příklad použití DARM může být následující:
// 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 ); }
Komentáře
- Vypadá to, co jsem chtěl! Předpokládám, že bych mohl použít i DARM a armstorm získat plnou podporu …
Odpovědět
Ano, Sada SDK IDA Pro umožňuje přístup k dílčím součástem instrukcí prostřednictvím insn_t třídy (v ua.hpp).
Komentáře
- To ' je skvělé vědět, ale ' Hledám něco, z čeho lze volat v rámci jiného programu, a doufejme, že má liberální licence.
- @ BrendanDolan-Gavitt: možná uvádí, že v otázce je tedy dobrý nápad?
Odpověď
Aktuálnější odpovědí na tuto otázku by bylo navrhnout Knihovna Capstone . Použil jsem to k demontáži ARM a je to docela spolehlivé. IMHO, je to nejlepší dostupná knihovna s otevřeným zdrojovým kódem.
Knihovna je založena na popisech instrukcí TabelGen od LLVM. Proto je jeho podpora ISA stejně úplná jako LLVM.