Czy są jakieś dezasemblery ARM, które zapewniają uporządkowane dane wyjściowe?

Czy są jakieś dezasemblery ARM (lub inne niż x86), które rozkładają instrukcję na części składowe w strukturze przyjaznej dla maszyny? Idealnie byłoby coś takiego jak XED lub distorm3 , które rozkładają się na strukturę, a następnie zapewniają interfejs API do wykonywania zapytań takich jak „Czy to jest połączenie?” „Czy to jest gałąź warunkowa?” itp., lub pobierając operandy instrukcji.

Znalazłem armstorm , ale obecnie obsługuje tylko THUMB.

Edycja: aby wyjaśnić, szukam czegoś, co można wywołać z poziomu innego programu i mam nadzieję, że ma liberalne licencje (zgodne z GPL).

Komentarze

  • To, co jest warte, myślę, że jest to coś, co prawdopodobnie zostanie dodane do ERESI w najbliższym czasie. Oni już to mają dla Intel i Sparc i dodają więcej wsparcia dla ARM.

Odpowiedź

DARM (GitHub) autorstwa Jurriaan Bremer to dezasembler ARMv7 napisany w C i jest dostępny na 3-klauzulowej licencji BSD.

Uwaga: obecnie nie obsługuje trybu kciuka.

Prosty przykład użycia DARM może wyglądać następująco:

// 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 ); } 

Komentarze

  • To wygląda na to, do czego zmierzałem! Przypuszczam, że mógłbym nawet użyć obu DARM i burza armii aby uzyskać pełne wsparcie …

Odpowiedź

Tak, IDA Pro „s SDK umożliwia dostęp do części składowych instrukcji za pośrednictwem klasy insn_t (w ua.hpp).

Komentarze

  • To ' doskonale wiedzieć, ale ja ' szukam czegoś, co można by wywołać z poziomu innego programu i mam nadzieję, że ma liberalne licencje.
  • @ BrendanDolan-Gavitt: może stwierdzenie, że w pytaniu jest więc dobrym pomysłem?

Odpowiedź

Bardziej aktualną odpowiedzią na to pytanie byłaby sugestia Biblioteka Capstone . Użyłem go do demontażu ARM i jest całkiem niezawodny. IMHO, to najlepsza dostępna biblioteka open source.

Biblioteka jest oparta na opisach instrukcji LLVM TabelGen. Dlatego jego obsługa ISA jest tak kompletna jak LLVM.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *