En utilisant cet exemple provenant de wikipedia, dans lequel DrawSquare () appelle DrawLine (),
(Notez que ce diagramme a des adresses hautes en bas et des adresses basses en haut.)
Quelqu'un pourrait-il m'expliquer quoi ebp
et esp
sont dans ce contexte?
D'après ce que je vois, je dirais que le pointeur de la pile pointe toujours vers le haut de la pile et le pointeur de base vers le début de la fonction actuelle? Ou quoi?
edit: je veux dire cela dans le contexte des programmes Windows
edit2: Et comment ça eip
marche aussi?
edit3: J'ai le code suivant de MSVC ++:
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
Tous semblent être des dwords, prenant ainsi 4 octets chacun. Je peux donc voir qu'il y a un écart entre hInstance et var_4 de 4 octets. Que sont-ils? Je suppose que c'est l'adresse de retour, comme on peut le voir sur l'image de wikipedia?
(NDLR: supprimé une longue citation de la réponse de Michael, qui n'appartient pas à la question, mais une question de suivi a été modifiée dans):
En effet, le flux de l'appel de fonction est le suivant:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
Ma question (enfin, j'espère!) Est maintenant: qu'est-ce qui se passe exactement à partir du moment où j'éclate les arguments de la fonction que je veux appeler jusqu'à la fin du prologue? Je veux savoir comment l'ebp, esp évolue pendant ces moments (j'ai déjà compris comment fonctionne le prologue, je veux juste savoir ce qui se passe après avoir poussé les arguments sur la pile et avant le prologue).