Utilizzando questo esempio proveniente da Wikipedia, in cui DrawSquare () chiama DrawLine (),
(Nota che questo diagramma ha indirizzi alti in basso e indirizzi bassi in alto.)
Qualcuno potrebbe spiegarmi cosa ebp
e cosa esp
sono in questo contesto?
Da quello che vedo direi che il puntatore dello stack punta sempre all'inizio dello stack e il puntatore di base all'inizio della funzione corrente? O cosa?
modifica: intendo questo nel contesto dei programmi Windows
edit2: E anche come eip
funziona?
edit3: ho il seguente codice da 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
Tutti sembrano essere dwords, prendendo così 4 byte ciascuno. Quindi posso vedere che c'è un gap da hInstance a var_4 di 4 byte. Quali sono? Presumo che sia l'indirizzo di ritorno, come si può vedere nella foto di Wikipedia?
(nota del redattore: rimossa una lunga citazione dalla risposta di Michael, che non appartiene alla domanda, ma una domanda di follow-up è stata modificata in):
Questo perché il flusso della chiamata di funzione è:
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
La mia domanda (ultimo, spero!) Ora è: che cosa è esattamente cosa succede dall'istante in cui apro gli argomenti della funzione che voglio chiamare fino alla fine del prologo? Voglio sapere come si evolve l'ebp, esp in quei momenti (ho già capito come funziona il prologo, voglio solo sapere cosa sta succedendo dopo aver spinto gli argomenti in pila e prima del prologo).