2011-01-22 4 views
2

Je sais o quelques libs désassembler, mais ce que je suis à la recherche est celui qui a un api comme:x86 ou x64 désassembleur lib

void * findAddrOfFirstInstructionStartingFrom(void * startAddress , InstructionType instruction); 

void* addr = findAddrOfFirstInstructionStartingFrom(startAddress , JMP); 

et d'autres APIs SMILER à celui-ci comme la recherche de quelque chose non spécifique démonter toutes les instructions indiquant d'une adresse et obtenir toutes sortes d'informations parce que cela ralentit si vous voulez seulement trouver quelque chose de spécifique pas tout.

Si vous connaissez des pls faites le moi savoir, s'il n'y a pas de pls dites-moi celui qui est open source et facile à modifier.

Répondre

2

Vous n'avez pas marqué ni indiqué l'architecture du processeur, il est donc peu probable que vous obteniez une vraie réponse.

Généralement les instructions de code natif ont une longueur très variable en fonction des opérandes qu'elles prennent, donc vous devez démonter la chose avant de chercher. Sinon, vous trouverez juste la première séquence d'octets qui correspond au modèle d'instruction que vous recherchez. Ce n'est probablement pas une instruction réelle mais une partie des opérandes de l'instruction précédente.

EDIT: Depuis que vous avez mis à jour le titre, je peux penser aux choix Borg et PEDasm sont open source. Si vous laissez tomber cette chose open-source alors certainement IDA pro.

+0

quand je dis void * findAddrOfFirstInstructionStartingFrom (void * startAddress, instruction InstructionType); void * addr = findAddrOfFirstInstructionStartingFrom (adresse de départ, JMP); Je ne veux pas rechercher la première séquence d'octets correspondant à l'instruction, je veux dire désassembler toutes les instructions à partir de cette adresse mais ne générant pas de structure d'information compliquée pour chaque instruction, continuez à trouver chaque instruction jusqu'à atteindre un, et que maby génère des informations comme l'addr jmp pour cette instruction. –

+0

Le désassemblage implique également d'autres difficultés. Considérez les deux liens que j'ai ajoutés. –

1

Je ne suis pas au courant d'une API qui peut le faire, mais il peut être accompli en utilisant des scripts de ligne de commande:

objdump -d --start-address address file | grep -m 1 instruction | cut -d : -f 1 

Ainsi, par exemple, pour trouver la première instruction JMP à partir de l'adresse 0x08048664 dans le fichier a.out, vous pouvez le faire:

$ objdump -d --start-address 0x08048664 a.out | grep -m 1 jmp | cut -d : -f 1 
8048675 
+0

il ya beaEngine http://www.beaengine.org/index.php?option=com_content&view=article&id=10&Itemid=11 mais il ne supporte que le désassemblage de toutes les instructions d'une adresse de départ avec fool info suport. –

1

Qu'est-ce que vous voulez sans doute est non seulement une bibliothèque, mais un cadre désassembleur. Jetez un oeil à IDA-Pro, qui fournit également une interface de script polyvalent (et une API de désassembleur)

+0

Je cherche quelque chose de gratuit ou open source et je ne trouve rien sur l'API de désassembleur IDA –

+0

@ neo_x3m: Je ne connais pas de contrepartie OSS à l'IDA - oui, avoir un OSS comme ça serait génial. Quoi qu'il en soit, voici à propos de scripts et d'étendre IDA: http://www.hex-rays.com/idapro/idaclike.htm et http://www.hex-rays.com/idapro/idaplugin.htm - maintenant le meilleur coup est probablement ce que @Job a dit. BTW: Une telle API ne fonctionnerait pas avec les pointeurs C pour adresser des parties dans le binaire désassemblé. Il utiliserait off_t et d'autres types non pointeurs, pour le simple fait que les pointeurs C sont des objets très abstraits et que leur valeur, si elle est convertie en un entier, peut être quelque chose tant que l'arithmétique du pointeur est conservée. – datenwolf

+0

Je suis d'accord, c'est un bon choix. –

Questions connexes