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 :

Problème d'allocation de mémoire dans la pile


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème d'allocation de mémoire dans la pile
    Je travaille sur l'ajout d'une section dans un PE, et j'essaie de reserver un grand espace mémoire dans la pile comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PUSH EBP        ; Save ebp
    MOV EBP, ESP  ; Set stack frame pointer
    SUB ESP, EAX  ; Allocation de l'espace (EAX = 06000h)
    SUB ESP, 0A0h
    PUSH EBX
    PUSH EBP
    PUSH ESI
    PUSH EDI
    ....
    POP EDI
    POP ESI
    POP EBP
    POP EBX
     
    MOV ESP, EBP      ; Restore stack pointer
    POP EBP           ; Restore ebp
    En faisant ceci, j'ai des soucis à l'exécution de mon programme.
    Par contre, si je remplace ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUB ESP, EAX		    ; Avec EAX = 06000h
    par
    celà fonctionne bien.
    Doù cela peut bien venir?

    Je vous remercie d'avance pour vos commentaires car je suis vraiment dans l'impasse...

  2. #2
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sub esp, eax  (avec eax = 06000h)
    Et
    Dans les deux cas, eax reste inchangé.
    Dans les deux cas, les flags sont affectés de la même façon.
    Je ne vois qu'une différence.
    Avec "Sub", quand on utilise une opérande immédiate à la pace d'un registre, ou d'un emplacement mémoire ... il y a extension du "signe" dans l'opérande destination (ici esp).
    L'info vient du " IA-32 Intel Architecture Softare Developer's Manuel ... je suis pas un dieu

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok, merci pour l'info.
    Je vais jeter un coup d'oeil.
    Je vais encore augmenter la taille de ma pile, voir si çà change quelque chose...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    A force d'augmenter, ça finira sans doute par fonctionner, mais à mon avis le problème viens plutôt d'une valeur incorrecte dans eax...

    Avec "Sub", quand on utilise une opérande immédiate à la pace d'un registre, ou d'un emplacement mémoire ... il y a extension du "signe" dans l'opérande destination (ici esp).
    06000h est positif sur 16 bits aussi, il n'y a pas de signe à étendre.
    Je ne vois pas ce que ça change.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    L'extension est 8 bits vers 16/32 bits. 16 bits vers 32 bits ca n'existe pas pour sub. En pratique 06000h sera donc stocké en immediate32. Regarder du coté de l'affectation de valeur à eax lors de l'appel me semble effectivement une bonne solution.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok, merci.
    Je pencherai pour un soucis du genre car mon programme plante egalement sur des commandes de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MOV DL,BYTE PTR DS:[EDI]
    Je ne sais pas trop quelle est la parade pour corriger ce genre de probleme...

    Encore merci pour vous attarder sur mon cas!

  7. #7
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    En effet ... bien vu Blustuff.
    L'extension est byte vers word ou dword, mais pas de word vers dword.
    Ah les anciens ... incollables ...

Discussions similaires

  1. Problème d'allocation de mémoire: Fatal error: Allowed memory
    Par Arget dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/09/2011, 07h55
  2. [Débutant] Problème d'allocation de valeur dans un for
    Par Alecks dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/05/2010, 18h42
  3. problème d'allocation de mémoire pour la JVM
    Par Sfaxiano dans le forum Général Java
    Réponses: 13
    Dernier message: 06/05/2010, 20h16
  4. problème d'allocation de mémoire
    Par NomadSoul123 dans le forum C++
    Réponses: 2
    Dernier message: 18/10/2007, 11h08
  5. problème d'allocation de mémoire
    Par kreel dans le forum C
    Réponses: 10
    Dernier message: 28/04/2007, 14h40

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