Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/11/2012, 19h10   #1
guillaumec38
Invité de passage
 
Inscription : janvier 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 11
Points : 3
Points : 3
Par défaut Incompression d'un instruction assembleur

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 :
Code :
1
2
3
 
mov [eax+ecx],ax
jbe loc_804ca37h
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.
guillaumec38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2012, 02h14   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 089
Points : 11 089
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.
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/11/2012, 21h36   #3
guillaumec38
Invité de passage
 
Inscription : janvier 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 11
Points : 3
Points : 3
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
Code :
move eax, [esp+quelque chose]
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é :/
guillaumec38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2012, 00h17   #4
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 089
Points : 11 089
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.
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2012, 11h06   #5
guillaumec38
Invité de passage
 
Inscription : janvier 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 11
Points : 3
Points : 3
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
guillaumec38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h49.


 
 
 
 
Partenaires

Hébergement Web