Existe-t-il des désassembleurs ARM (ou autres non-x86) qui décomposent une instruction en ses composants dans une structure conviviale? Idéalement, ce serait quelque chose comme XED ou distorm3 , qui se démontent en une structure et fournissent ensuite une API pour interroger des choses comme « Est-ce un appel? » « Est-ce une branche conditionnelle? » etc., ou obtenir les opérandes dune instruction.
Jai trouvé armstorm , mais il ne prend actuellement en charge que THUMB.
Edit: Pour clarifier, je « cherche quelque chose qui peut être appelé depuis un autre programme et jespère quil a une licence libérale (compatible GPL).
Commentaires
- Pour ce que cela vaut, je pense que cest quelque chose qui sera probablement ajouté à ERESI à court terme, ils lont déjà pour Intel et Sparc et ajoutent plus de support ARM.
Réponse
DARM (GitHub) par Jurriaan Bremer est un désassembleur ARMv7 écrit en C et est disponible sous une licence BSD à 3 clauses.
Remarque: Il ne prend actuellement pas en charge le mode Thumb.
Un exemple simple dutilisation de DARM pourrait être le suivant:
// 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 ); }
Commentaires
- Cela ressemble à ce que jallais faire! Je suppose que je pourrais même utiliser les deux DARM et armstorm pour obtenir une assistance complète …
Réponse
Oui, IDA Pro « s SDK vous permet daccéder aux » composants dinstructions via la classe insn_t (dans ua.hpp).
Commentaires
- Que ' est excellent à savoir, mais je ' Je recherche quelque chose qui peut être appelé à partir dun autre programme et jespère avoir une licence libérale.
- @ BrendanDolan-Gavitt: peut-être que dire cela dans la question est une bonne idée alors?
Réponse
Une réponse plus récente à cette question serait de suggérer Bibliothèque Capstone . Je lai utilisé pour le démontage du bras et il est assez fiable. À mon humble avis, cest la meilleure bibliothèque open source disponible.
La bibliothèque est basée sur les descriptions dinstructions TabelGen de LLVM. Par conséquent, son support ISA est aussi complet que LLVM.