Pourquoi laisser faire “mov esp,ebp” en x86 assemblée?
Il est dit que les leave
instruction est la même chose que :
mov esp,ebp
pop ebp
Mais qu'est-ce que mov esp,ebp
ici? Il ne semble pas valable pour moi...
Vous devez vous connecter pour publier un commentaire.
mov esp,ebp
définit le pointeur de pile, à l'image de base de l'adresse, de manière efficace en libérant de l'ensemble de l'image. (N'oubliez pas que c'est Intel de la syntaxe, de la destination qui vient en premier.) Si vous ne l'avez pas, une fois que vous appelezret
, vous seriez encore à l'aide de la fonction appelée pile du cadre de votre fonction d'appel, avec crashtastic conséquences.mov esp,ebp
définir le pointeur vers le pointeur de pile de l'adresse?mov ebp,esp
permettrait de mettre à jour le pointeur de pile à point, à l'image de base.%
, nous parlons d'Intel de style, où la destination qui vient en premier. L'équivalent AT&T de style de démontage pour cette question, vous pensez probablement d', et où la destination est le dernier, seraitmovl %ebp, %esp
.Je pense que votre problème est le fait qu'il y a deux façons différentes d'écrire x86 assemblée. L'un est le AT&T la notation et l'autre est le processeur Intel notation. L'ordre des arguments d'une instruction sont inversés dans Intel notation plutôt que AT&T. Votre version de l'assemblée semble être en Intel notation, ce qui signifie que
mov esp, ebp
actaully déplace la valeur dansebp
àesp
. Dans le plus logique (à mon avis) de AT&T de la notation, il seraitmov %ebp, %esp
.movd
au lieu demov
, trop.move ebp into esp
. Le "Intel" notation", qui est antérieure à Intel par un loooooooooooong temps-par exemple le Interdata 16 bits de la série qui remonte aux années 60 utilise exactement ce format et ne fut pas le premier...) a une sémantique plus commemove such that esp = ebp
.movd
est en fait un MMX l'instruction. Si vous vouliez inclure une taille suffixe (qui dans ce cas est facultatif, vous l'esprit) que vous souhaitez utilisermovl
esp = ebp
Le compilateur d'utiliser cette instruction pour libérer de l'espace utilisé par la fonction dans la pile, la
leave
instruction a le même comportement quemov esp, ebp
avecpop ebp
.enter
etleave
ne peut pas deux être dans le but de libérer de l'espace utilisé sur la pile?