Existují nějaké ARM disassemblery, které poskytují strukturovaný výstup?

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *