Gibt es ARM-Disassembler, die eine strukturierte Ausgabe liefern?

Gibt es ARM-Disassembler (oder andere Nicht-x86-Disassembler), die eine Anweisung in einer maschinenfreundlichen Struktur in ihre Bestandteile zerlegen? Im Idealfall wäre es so etwas wie XED oder distorm3 , die sich in eine Struktur zerlegen und dann bereitstellen eine API zum Abfragen von Dingen wie „Ist das ein Aufruf?“ „Ist das ein bedingter Zweig?“ usw. oder Abrufen der Operanden einer Anweisung.

Ich habe armstorm gefunden, aber derzeit wird nur THUMB unterstützt.

Bearbeiten: Zur Verdeutlichung suche ich nach etwas, das aus einem anderen Programm heraus aufgerufen werden kann und hoffentlich eine liberale Lizenzierung (GPL-kompatibel) hat.

Kommentare

  • Für das, was es wert ist, denke ich, dass es etwas ist, das wahrscheinlich in naher Zukunft zu ERESI hinzugefügt wird. Sie haben es bereits für Intel und Sparc und fügen weitere ARM-Unterstützung hinzu.

Antwort

DARM (GitHub) von Jurriaan Bremer ist ein ARMv7-Disassembler in C und ist unter einer 3-Klausel-BSD-Lizenz verfügbar.

Hinweis: Der Thumb-Modus wird derzeit nicht unterstützt.

Ein einfaches Beispiel für die Verwendung von DARM könnte sein:

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

Kommentare

  • Das sieht so aus, wie ich es mir vorgestellt habe! Ich nehme an, ich könnte sogar beide DARM verwenden und Armsturm um volle Unterstützung zu erhalten …

Antwort

Ja, IDA Pro können Sie über die Klasse insn_t (in ua.hpp) auf Anweisungen zugreifen

Kommentare

  • Das ' ist ausgezeichnet zu wissen, aber ich ' Ich suche nach etwas, das aus einem anderen Programm heraus aufgerufen werden kann und hoffentlich eine liberale Lizenz hat.
  • @ BrendanDolan-Gavitt: Vielleicht ist es dann eine gute Idee, das in der Frage zu sagen?

Antwort

Eine aktuellere Antwort auf diese Frage wäre, Capstone Bibliothek. Ich habe es für die ARM-Demontage verwendet und es ist ziemlich zuverlässig. IMHO, es ist die beste verfügbare Open Source-Bibliothek.

Die Bibliothek basiert auf den TabelGen-Anweisungsbeschreibungen von LLVM. Daher ist die ISA-Unterstützung so vollständig wie die von LLVM.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.