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).

questionAnswers(8)

yourAnswerToTheQuestion