À l'aide de cet exemple venant de wikipedia, dans lequel DrawSquare() appelle DrawLine(),
quelqu'un pourrait-il m'expliquer ce que l'ebp et esp sont dans ce contexte?
De ce que je vois, je dirais que le pointeur de pile points toujours en haut de la pile, et le pointeur de la base au début de la fonction actuelle? Ou quoi?
Merci
edit: je veux dire dans le contexte de programmes de windows
edit2: Et comment est-eip travail, trop?
edit3: j'ai le code suivant à partir 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 d'entre eux semblent être dwords, prenant ainsi de 4 octets chacun. Donc, je peux voir il y a un écart de hInstance var_4 de 4 octets. Quels sont-ils? Je suppose que c'est l'adresse de retour, comme on peut le voir dans la page wikipedia de l'image?
Michael réponse:
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
savedFramePointer= dword ptr 0
adresse de retour= dword ptr 4
hInstance= dword ptr 8h
PrevInstance= dword ptr 0C
hlpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
C'est parce que le flux de l'appel de la fonction est:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
Ma question (enfin, j'espère!) maintenant, quelle est exactement ce qui se passe à partir de l'instant où je mets les arguments de la fonction, je tiens à appeler jusqu'à la fin du prologue? Je veux savoir comment l'ebp, esp évoluer au cours de ces moments(j'ai déjà compris comment le prologue de travaux, je veux juste savoir ce qui se passe après j'ai poussé les arguments sur la pile et avant le prologue).