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 :

Manipulation du registre IP - Entiers 32 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Manipulation du registre IP - Entiers 32 bits
    Bonjour
    j'aurais quelque questions à poser , j'aimeras bien que vous me répondiez le plutôt possible
    alors :
    PUSH IP , ou POP IP; est elle une commande correcte ? peut on utiliser la cmd PUSH ou POP avec le registre IP ?
    2- le Microprocesseur dont le bus de donées est 32 bits peut utiliser des entiers allant de combien à combien ?est ce de 8FFFFH jusqu'a 5FFFFh correcte ? comment on fais le compte ?
    voila merci d'avance

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par chiraz
    PUSH IP , ou POP IP; est elle une commande correcte ? peut on utiliser la cmd PUSH ou POP avec le registre IP ?
    Non, sous x86, aucune instruction ne peut manipuler IP.

    le Microprocesseur dont le bus de donées est 32 bits peut utiliser des entiers allant de combien à combien ?est ce de 8FFFFH jusqu'a 5FFFFh correcte ? comment on fais le compte ?
    Si le bus de données fait 32 bits, les plages vont :

    De 0 à 0xFFFFFFFF (0 à 4294967295) en non signé.

    Si on est en signé (on compte le MSB [Most Significant Bit] comme bit de signe) :

    De 0 à 0x7FFFFFFF (2^31 - 1) pour les entiers positifs, soit de 0 à 2147483647.

    De 0x80000000 à 0xFFFFFFFF pour les entiers négatifs. (-2147483648 à -1)

    Donc une fourchette allant de −2 147 483 648 à +2 147 483 647

  3. #3
    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
    En fait, c'est pas tout à fait vrai qu'on ne manipule pas IP. On le manipule par des instructions spécialisées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           call label  ; Push de IP
    label: 
           ret ; Pop de IP
    Les instructions de contrôle de flot d'exécution manipulent IP par un jeu très réduit d'instructions. IP est alors un registre très particulier, qui ne peut être utilisé avec aucune des instructions utilisant des registres généraux. Tout simplement parce que IP n'est pas l'un des 8 registre généraux.

  4. #4
    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
    Salut Chiraz.
    Intéressant de vouloir faire " Push IP " ... humm ... pourquoi voudrais-tu faire un Push IP toi ? raconte un peu, je suis intéressé ... Pour le mettre de côté ? IP est automatiquement mis de côté quand il le faut (call par ex) Mais aurais-tu un autre plan derrière la tête ? une petite bidouille ;-) ? Note qui si tu veux par exemple retrouver IP dans eax, y'a moyen. Tu fais un call, tu vas chercher eIP via le pointeur de pile , et tu reviens "ret", et tu auras eIP dans eax. Ou alors, une fois eIp dans eax, tu manipules eax comme tu veux ... tu replaces "manuellement" esp à sa valeur avant le call, tu fais push eax (suivant ta bidouille) ... et par un ret tu sautes ou tu as décidé. Attention, là t'es sans filet ... faut bien savoir ce que tu fais, le compilateur ne pourras pas t'aider.

  5. #5
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Avec MASM je crois qu'il faut utiliser "$" pour copier EIP, par exemple "mov eax, $".
    :wq

  6. #6
    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
    Ah oui exact, $ étant l'adresse de l'instruction courante qui sera une opérande immédiate après assemblage.

  7. #7
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par - Robby - Voir le message
    Salut Chiraz.
    Intéressant de vouloir faire " Push IP " ... humm ... pourquoi voudrais-tu faire un Push IP toi ? raconte un peu, je suis intéressé ...
    c'est une question posé dans un sujet d'examen et tous les etudiants cherche la reponse

  8. #8
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    Petite note hors sujet :
    mov eax,$ marche uniquement dans le cas d'un code statique...
    Imaginez le cas d'un code qui se replique automatiquement et qui voudrait savoir ou il est... dans ce cas il faut bien utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    call local
    local:
    pop EAX
    Enfin je vois pas trop le cas précis dans lequel cela pourrait servir....

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

Discussions similaires

  1. Entiers > 32 bit
    Par jeanvincent dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2006, 15h33
  2. Entier 64 bits GNU / WIN32 ?
    Par Papatchel dans le forum C++
    Réponses: 14
    Dernier message: 28/11/2005, 18h29
  3. [TP] Entier 32 bits non signé
    Par SkaMan dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 24/08/2005, 22h17
  4. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  5. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10

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