|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 11 ![]() |
Bonjour à tous !
Je suis actuellement en train d'apprendre l'assembleur, et quoi de mieux pour cela que de desassembler un petit executable? ^^ Pour l'instant tout ce passe tres bien, mais je me heurte a un petit soucis. Le code m'a entrainé jusqu'a l'instruction suivante : Avant le mov, eax contient le nom d'un fichier (disons un char* en c). Je ne sais pas comment interpreter ici [eax+ecx], d'autant plus que ecx n'a pas ete initialisé avant .. Concernant le jump, je suis etonné de ne pas voir de cmp, donc j'en deduis qu'il prends en compte mes dernieres valeurs de flags .. Merci pour votre attention, j'espere que vous pourrez me debloquer. Guillaume. |
|
|
00
|
|
|
#2 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Bonjour
Les crochets « [ ] » indiquent une indirection, c'est-à-dire que la valeur de AX ne va pas être déposé dans EAX+ECX (ce qui, ici, ne voudrait rien dire) mais dans l'adresse qu'ils pointent. Pour JBE, en effet, l'instruction tient compte des flags précédents parce qu'il me semble bien que, contrairement à d'autres architectures, « MOV » ne les modifie pas. Mais en tout état de cause, il est fort probable que ton code n'en soit pas, et que tu aies en fait désassemblé un morceau du segment de données, ou une zone non initialisée. |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 11 ![]() |
Merci beaucoup.
Generallement, lorsque l'on veut recuperer des arguments, on a des instructions comme Mais que signifie le code suivant ? Dois je comprendre qu'on va chercher un element de la pile utilisée pour la focntion courrante ? Ce qui serait donc equivalent à un Si tel est le cas j'ai du me tromper lors de mes investigations car ebp -10h pointerait sur un morceau de pile non initialisé :/ |
|
|
00
|
|
|
#4 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Pas nécessairement. En assembleur, on peut suivre n'importe quel modèle mais celui qui prévaut généralement, avec les langages de haut niveau, consiste à sauvegarder ESP dans EBP pour pouvoir restaurer facilement son état initial si besoin (goto, exception, déboguage, instruction return, etc.) et, de là, pouvoir quitter la fonction avec RET. Ramener le pointeur de pile à son état initial a également, de fait, pour effet de vider la pile et ses variables locales.
Donc, si on sauvegarde EBP en entrant et que seulement ensuite, on réserve l'espace nécessaire pour les variables locales, alors celles qui appartiennent à la fonction sont « en dessous » de EBP et celles qui appartiennent à toutes les fonctions supérieures appelantes sont au dessus. |
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 11 ![]() |
Merci beaucoup pour cette reponse.
En fait le ebp-10h pointait vers une zone de la pile ou je n'avais rien ecris. Mais c'est normal au final vu que c'est pour un appel de fonction, avec passage d'un argument par reference (en equivalent C). Bref problemes resolu, merci beaucoup
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com