Ich suche eine Linux-Bibliothek/-Tool, das Maschinencode-Anweisungen analysieren kann, vorzugsweise für die Power-Architektur (ppc64 oder ppc64 Little Endian). Ich möchte im Grunde in der Lage sein, eine Maschinenanweisung in eine lesbare Assembler-Anweisungszeichenfolge umzuwandeln, die ich mit einem Skript verarbeiten kann.
Diese Funktionalität ist offensichtlich bereits Bestandteil von GCC und GDB. Beispielsweise kann GDB die aktuelle Bauanleitung mit ausdrucken x /i $pc
. Gibt es eine zugrunde liegende Bibliothek, die ich wiederverwenden könnte? GCC kann eine Assembler-Anweisung nehmen und beim Kompilieren den entsprechenden Maschinencode generieren.
https://github.com/aquynh/capstone
Capstone ist ein Disassemblierungs-Framework mit dem Ziel, die ultimative Disasm-Engine für die binäre Analyse und Umkehrung in der Sicherheitsgemeinschaft zu werden.
Capstone wurde von Nguyen Anh Quynh entwickelt und von einer kleinen Community entwickelt und gepflegt. Capstone bietet einige unvergleichliche Funktionen:
- Unterstützt mehrere Hardwarearchitekturen: ARM, ARM64 (ARMv8), Mips, PPC, Sparc, SystemZ, XCore und X86 (einschließlich X86_64).
- ...
http://mkfs.github.io/content/opdis/
Opdis ist ein Wrapper für die Disassembler-Bibliothek libopcodes, die als Teil von GNU vertrieben wird
binutils
. Es erweitert die libopcodes-Bibliothek, indem es lineare und Kontrollfluss-Disassemblierungsalgorithmen, Befehls- und Operandenobjekte, die für die Analyse geeignet sind, und ein Befehlszeilendienstprogramm zum Durchführen der Disassemblierung an beliebigen Stellen in einer Datei anbietet.Diese Funktionen fehlen in
libopcodes
undobjdump
. Das Design von libopcodes macht es umständlich, sie für die binäre Analyse zu verwenden; Es geht davon aus, dass zerlegte Anweisungen gedruckt, nicht gespeichert oder analysiert werden, und ruft daher einen Rückruf mit einerfprintf(3)
Signatur auf. Die Mängel vonobjdump
sind sogar noch größer: Es unterstützt weder die Control-Flow-Disassemblierung, noch erlaubt es dem Benutzer, anzugeben, welche Bytes in der Datei disassembliert werden sollen.Das Opdis-Projekt besteht aus der
libopdis
Bibliothek und demopdis
Befehlszeilendienstprogramm.Unterstützte Architekturen
Opdis unterstützt die Disassemblierung aller Architekturen, die GNU
binutils
unterstützt . Auf den meisten dieser Architekturen ist jedoch nur der ASCII-String für die disassemblierte Anweisung verfügbar.
Weitere Bibliotheken finden Sie hier
phuclv
Radu