Zijn er ARM-demontagesystemen die een gestructureerde output bieden?

Zijn er ARM (of andere niet-x86) disassemblers die een instructie ontleden in zijn samenstellende delen in een machinevriendelijke structuur? Idealiter zou het zoiets zijn als XED of distorm3 , die in een structuur worden gedemonteerd en vervolgens een API voor het opvragen van zaken als “Is dit een oproep?” Is dit een voorwaardelijke tak? etc., of het ophalen van de operanden van een instructie.

Ik vond armstorm , maar het ondersteunt momenteel alleen THUMB.

Bewerken: ter verduidelijking, ik “ben op zoek naar iets dat kan worden aangeroepen vanuit een ander programma en hopelijk liberale licenties heeft (GPL-compatibel).

Opmerkingen

  • Voor wat het waard is, denk ik dat het iets is dat waarschijnlijk op korte termijn aan ERESI zal worden toegevoegd, ze hebben het al voor Intel en Sparc en voegen meer ARM-ondersteuning toe.

Answer

DARM (GitHub) door Jurriaan Bremer is een ARMv7-disassembler geschreven in C en is beschikbaar onder een 3-Clause BSD-licentie.

Opmerking: het ondersteunt momenteel geen Thumb-modus.

Een eenvoudig voorbeeld van het gebruik van DARM zou als volgt kunnen zijn:

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

Reacties

  • Dit lijkt op waar ik voor ging! Ik veronderstel dat ik zelfs beide DARM en armstorm om volledige ondersteuning te krijgen …

Antwoord

Ja, IDA Pro “s SDK geeft u toegang tot instructies” componentonderdelen via de insn_t class (in ua.hpp).

Opmerkingen

  • Dat ' is uitstekend om te weten, maar ik ' ben op zoek naar iets dat vanuit een ander programma kan worden opgeroepen en hopelijk liberale licenties heeft.
  • @ BrendanDolan-Gavitt: misschien is het dan een goed idee om dat in de vraag te stellen? >

Antwoord

Een actueler antwoord op deze vraag zou zijn om Capstone bibliotheek. Ik heb het gebruikt voor ARM-demontage en het is redelijk betrouwbaar. IMHO, het is de beste beschikbare open source-bibliotheek.

De bibliotheek is gebaseerd op de TabelGen-instructiebeschrijvingen van LLVM. Daarom is de ISA-ondersteuning net zo compleet als LLVM.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *