Onko olemassa ARM (tai muita kuin x86) purkijoita, jotka hajottavat käskyn komponentteihinsa koneystävällisessä rakenteessa? Ihannetapauksessa se olisi jotain XED tai distorm3 , joka hajoaa rakenteeksi ja tarjoaa sitten sovellusliittymä kyselyihin, kuten ”Onko tämä puhelu?” ”Onko tämä ehdollinen haara?” tms., tai käskyn operandien saaminen.
Löysin käsivarren myrskyn , mutta tällä hetkellä se tukee vain THUMBia.
Muokkaa: Selvennykseksi etsin jotain, johon voidaan soittaa toisesta ohjelmasta ja jolla on toivottavasti liberaali lisensointi (GPL-yhteensopiva).
Kommentit
- Mielestäni se on jotain, joka todennäköisesti lisätään ERESI: hen lähitulevaisuudessa, sillä heillä on jo Intel ja Sparc ja ne lisäävät ARM-tukea.
vastaus
DARM (GitHub), kirjoittanut Jurriaan Bremer, on kirjoittanut ARMv7-purkajan. C: ssä ja on saatavana 3 lausekkeen BSD-lisenssillä.
Huomaa: Se ei tällä hetkellä tue Thumb-tilaa.
Yksinkertainen esimerkki DARM: n käytöstä voi olla seuraava:
// 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 ); }
Kommentit
- Näyttää siltä, mitä aioin! Oletan, että voisin jopa käyttää molempia DARM-toimintoja ja käsivarret saadaksesi täyden tuen …
Vastaa
Kyllä, IDA Pron SDK: n avulla voit käyttää ohjeiden komponentteja insn_t -luokan kautta (ua.hpp).
Kommentit
- Se, että ' on erinomainen tietää, mutta olen ' Etsin jotain, joka voidaan kutsua toisesta ohjelmasta ja jolla on toivottavasti liberaali lisensointi.
- @ BrendanDolan-Gavitt: Ehkä sanomalla, että kysymyksessä on sitten hyvä idea?
Vastaus
Ajantasaisempi vastaus tähän kysymykseen olisi ehdottaa Capstone kirjasto. Olen käyttänyt sitä ARM: n purkamiseen ja se on melko luotettava. IMHO, se on paras käytettävissä oleva avoimen lähdekoodin kirjasto.
Kirjasto perustuu LLVM: n TabelGen-ohjeiden kuvauksiin. Siksi sen ISA-tuki on yhtä kattava kuin LLVM.