IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Incompression d'un instruction assembleur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    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.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é :/

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    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.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. debutant : instruction assembleur pour la carte graphique
    Par ZashOne dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 27/01/2008, 15h06
  2. Exercice sur le jeu d'instructions Assembleur
    Par azedsqfb dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/09/2007, 11h23
  3. [MIPS] Instructions Assembleur sous Linux
    Par spyder14 dans le forum Autres architectures
    Réponses: 5
    Dernier message: 17/02/2007, 10h50
  4. Conversion instructions assembleur X86 -> PPC
    Par bencall dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/09/2006, 22h02
  5. Instructions Assembleur SSE
    Par uriotcea dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/07/2006, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo