Addresse de l'addresse

Signaler
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007
-
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007
-
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...

Merci d'avance

 ElpenS

4 réponses

Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

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 ?

=

Une autruche ne se cuit pas aux petits lardons
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

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?

Merci encore

 ElpenS
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

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.

=

Une autruche ne se cuit pas aux petits lardons
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Yes, merci,

Je vais tester ca un de ces jours!

Mais ce qui est un peu la merde, c'est que je travaille dans plusieurs exe, alors on verra si le resultat obtenu est satisfaisant ou pas...

Merci pour ton aide, je te tiens au courant dès que je m'attarde la-dessus!

 ElpenS