Van olyan ARM (vagy más, nem x86-os) szétszerelő, amely gépbarát struktúrában bontja le az utasítást annak alkatrészeire? Ideális esetben valami olyan lenne, mint XED vagy distorm3 , amelyek szétszerelődnek egy szerkezetté, majd biztosítják API olyan kérdések lekérdezéséhez, mint a “Ez egy hívás?” – Feltételes ág ez? stb., vagy egy utasítás operandusainak megszerzése.
Találtam armstormot , de jelenleg csak a THUMB-ot támogatja.
Szerkesztés: Tisztázásképpen keresek valamit, ami meghívható egy másik programon belül, és remélhetőleg liberális licenccel rendelkezem (GPL-kompatibilis).
Megjegyzések
- Amire érdemes, azt gondolom, hogy ez egy olyan dolog, amelyet a közeljövőben valószínűleg hozzáadnak az ERESI-hez, már rendelkeznek az Intel és a Sparc számára, és további ARM támogatást nyújtanak. / div>
Válasz
DARM (GitHub) Jurriaan Bremer, az ARMv7 szétszerelője C-ben, és 3 záradékú BSD licenc alatt érhető el.
Megjegyzés: Jelenleg nem támogatja a Thumb módot.
A DARM használatának egyszerű példája a következő lehet:
// 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 ); }
Megjegyzések
- Ez úgy néz ki, mint amire mentem! Feltételezhetem, hogy mindkét DARM-ot is használhatnám és karvihar a teljes támogatáshoz …
Válasz
Igen, IDA Pro SDK lehetővé teszi az utasítások összetevőinek elérését a insn_t osztályon keresztül (az ua.hpp fájlban).
Megjegyzések
- Ezt ' kiválóan ismeri, de én ' olyasmit keresek, amely meghívható egy másik programon belül, és remélhetőleg liberális licenccel rendelkezik.
- @ BrendanDolan-Gavitt: talán kijelentette, hogy a kérdésben akkor jó ötlet? >
Válasz
Erre a kérdésre naprakészebb válasz az lenne, ha javasolna Capstone könyvtár. ARM szétszerelésre használtam, és meglehetősen megbízható. IMHO, ez a rendelkezésre álló legjobb nyílt forráskódú könyvtár.
A könyvtár az LLVM TabelGen utasításainak leírásán alapul. Ezért az ISA támogatása teljes, mint az LLVM.