cs_elpens
Messages postés260Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention 3 novembre 2007
-
10 oct. 2007 à 09:35
cs_elpens
Messages postés260Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention 3 novembre 2007
-
10 oct. 2007 à 15:05
Bonjour à tous,
Tout d'abord je tiens à préciser que je ne travaille pas en .NET (même si cela n'a pas trop d'importance...)
Voici mon problème:
J'essaie de lister les instructions call présentent dans la mémoire lorsque j'execute un *.exe
Pour une grande majorité des calls (ex. call EAX, call ECX,...), ce n'est pas un problème. Cependant, lorsque les instructions sont du type :
- call [EAX]
- call [ECX]
- ...
j'ai de la peine à me représenter à quelle address pointe ces calls.
Je connais déjà les pattern de ces calls (FF10, FF11, FF12,...).
Le problème vient des [ ], qui indiquent que l'address (à laquelle pointe le call) pointe sur EAX. J'ai beaucoup de difficulté à exprimer celà, car ce n'est pas très clair pour moi.
N'hésiter pas à me demander plus de précisions, car je suis preneur de toute idées...
The_Guardian
Messages postés317Date d'inscriptionvendredi 25 mai 2007StatutMembreDernière intervention19 octobre 20071 10 oct. 2007 à 09:47
Bonjour,
Ok supposons que EAX=0x1234 quand tu fais call 0x1234, ça exécute la procédure se trouvant en 0x1234 de la mémoire, ok, donc quand tu fais call EAX, ça prend la valeur de EAX, c'est-à-dire 0x1234 et ça exécute la procédure se trouvant en 0x1234 de la mémoire (c'est pareil sauf qu'il faut que ton programme sache que EAX=0x1234)
Et maintenant, le problème que tu as c'est que quand tu fais call [EAX] avec les crochets, ça prend la valeur de EAX, c'est-à-dire 0x1234 et ça va voir ce qui se trouve en mémoire à 0x1234, disons que c'est 0x5678 et ça exécute la procédure se trouvant en 0x5678
Donc pour faire ça dans ton programme tu dois faire la chose suivante :
quand je lis call EAX
alors je récupère la valeur de EAX,
je récupère la valeur de [EAX]
et
je retourne cette valeur,
c'est l'adresse de la procédure qui va être exécutée
fin
tu vois mieux ?
cs_elpens
Messages postés260Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention 3 novembre 2007 10 oct. 2007 à 10:15
Merci déjà pour ta réponse!
Je comprends le principe en texte, mais pas celui du programme... car je recherche les call [EAX]
------------------------------------------------------------------
quand je lis call [EAX] //c'est cette instruction que je recherche
je vais rechercher la valeur de EAX //recherche un mov EAX
je vais ensuite rechercher à l'emplacement EAX, l'addresse d'EAX //encore un mov EAX?
The_Guardian
Messages postés317Date d'inscriptionvendredi 25 mai 2007StatutMembreDernière intervention19 octobre 20071 10 oct. 2007 à 13:56
Re,
Pour rechercher la valeur de EAX, effectivement, il faut chercher un MOV EAX, --- (tu es pas sûr de le trouver, la personne aurait pu faire INC EAX, etc) mais admettons !
Donc pour rechercher la valeur de [EAX] il faut rechercher un MOV [0x1234], --- sachant que la personne a pu passer par un autre registre (par exemple EDI) dont la valeur aurait été 0x1234
En gros tu as beaucoup de chances que ta méthode ne marche pas en lisant le fichier, mais faut voir si tu es dans un cas simple ou pas, et regarde dans ton fichier voir comment ça se trouve.