Finns det några ARM-demonterare som ger strukturerad produktion?

Finns det några ARM (eller andra icke-x86) demonterare som sönderdelar en instruktion i dess komponenter i en maskinvänlig struktur? Helst skulle det vara något som XED eller distorm3 , som tas isär i en struktur och sedan ger ett API för att fråga frågor som ”Är det här ett samtal?” ”Är detta en villkorlig gren?” etc., eller få operanderna till en instruktion.

Jag hittade armstorm , men den stöder för närvarande bara TUMME.

Redigera: För att klargöra letar jag efter något som kan kallas från ett annat program och förhoppningsvis har liberal licensiering (GPL-kompatibel).

Kommentarer

  • För vad det är värt tror jag att det är något som antagligen kommer att läggas till ERESI på kort sikt, de har redan det för Intel och Sparc och lägger till mer ARM-stöd.

Svar

DARM (GitHub) av Jurriaan Bremer är en ARMv7-demonterare skriven i C och är tillgänglig under en 3-klausul BSD-licens.

Obs! Det stöder för närvarande inte Thumb-läge.

Ett enkelt exempel på att använda DARM kan vara följande:

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

Kommentarer

  • Det ser ut som vad jag tänkte på! Jag antar att jag till och med kunde använda båda DARM och armstorm för att få fullt stöd …

Svar

Ja, IDA Pro SDK ger dig åtkomst till instruktioner ”komponentdelar via insn_t class (i ua.hpp).

Kommentarer

  • Att ' är utmärkt att veta, men jag ' Jag letar efter något som kan kallas från ett annat program och förhoppningsvis har liberal licensiering.
  • @ BrendanDolan-Gavitt: kanske att säga att det i frågan är en bra idé då?

Svar

Ett mer uppdaterad svar på denna fråga skulle vara att föreslå Capstone -bibliotek. Jag har använt det för ARM-demontering och det är ganska pålitligt. IMHO, det är det bästa öppna källkodsbiblioteket som finns tillgängligt.

Biblioteket är baserat på LLVM: s TabelGen-instruktionsbeskrivningar. Därför är dess ISA-stöd lika komplett som LLVM.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *