Qual é exatamente o ponteiro base e o ponteiro da pilha? Para o que eles apontam?
Usandoeste exemplo vindo da wikipedia, em que DrawSquare () chama DrawLine (),
(Observe que esse diagrama tem endereços altos na parte inferior e endereços baixos na parte superior.)
Alguém poderia me explicar o queebp
eesp
estão neste contexto?
Pelo que vejo, eu diria que o ponteiro da pilha aponta sempre para o topo da pilha e o ponteiro da base para o início da função atual? Ou o que?
Editar: quero dizer isso no contexto de programas do Windows
edit2: E comoeip
trabalho também?
edit3: Eu tenho o seguinte código do 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
Todos eles parecem ser dwords, tendo assim 4 bytes cada. Então eu posso ver que existe uma lacuna de hInstance para var_4 de 4 bytes. O que eles são? Eu suponho que é o endereço de retorno, como pode ser visto na foto da wikipedia?
(nota do editor: removemos uma longa citação da resposta de Michael, que não pertence à pergunta, mas uma questão de acompanhamento foi editada):
Isso ocorre porque o fluxo da chamada de função é:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
A minha pergunta (por último, eu espero!) Agora é, o que é exatamente o que acontece a partir do instante em que faço aparecer os argumentos da função que quero chamar até o final do prólogo? Eu quero saber como o ebp, esp evolui durante esses momentos (eu já entendi como o prólogo funciona, eu só quero saber o que está acontecendo depois que eu empurrei os argumentos na pilha e antes do prólogo).