:problème Ayant la compréhension standard Entrée séquence
_function:
push ebp ;store the old base pointer
mov ebp, esp ;make the base pointer point to the current
;stack location – at the top of the stack is the
;old ebp, followed by the return address and then
;the parameters.
sub esp, x ;x is the size, in bytes, of all
;"automatic variables" in the function
au sommet de la pile est l'ancien ebp, suivi de l'adresse de retour puis les paramètres.
Le vieux ebp est là parce que push ebp
,
mais pourquoi sont l'adresse de retour et les paramètres là aussi?
MISE À JOUR
Séquence standard de sortie
mov esp, ebp ;reset the stack to "clean" away the local variables
pop ebp ;restore the original base pointer
ret ;return from the function
Qu'est-ret
en réalité? Je pense que l'esp devrait déjà avoir atteint l'adresse de retour à la ligne pop ebp
Quelle est la différence entre * les variables automatiques * et * les paramètres *? – Mask
@Mask: les variables automatiques sont les variables locales de la fonction. par exemple. 'int f (int y) {int z = y + 7; return z * z; } 'Ici' y' est un paramètre, et 'z' est une variable automatique (locale). – kennytm
merci! J'ai mis à jour un peu sur la séquence de sortie, pourquoi 'ret' est-il nécessaire là? – Mask