※ You can refer the memory stack structure here(LINK)
1. Initial state
┌─────────────────────┐ → ESP / Low address
│
│Local variables of new function
│
├───────────────────── → EBP
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters of new function
├─────────────────────
│
│Local variables
│
├─────────────────────
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters
└─────────────────────┘→ High address
2. MOV ESP,EBP
┌─────────────────────┐
│
│Local variables of new function
│
├───────────────────── → ESP / EBP
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters of new function
├─────────────────────
│
│Local variables
│
├─────────────────────
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters
└─────────────────────┘
3. POP EBP
┌─────────────────────┐
│
│Local variables of new function
│
├─────────────────────
│SFP
├───────────────────── → ESP
│RET
├─────────────────────
│Parameters of new function
├─────────────────────
│
│Local variables
│
├───────────────────── → EBP
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters
└─────────────────────┘
LEAVE operation is same as (MOV ESP,EBP) + (POP EBP).
4. RET
┌─────────────────────┐
│
│Local variables of new function
│
├─────────────────────
│SFP
├─────────────────────
│RET
├───────────────────── → ESP
│Parameters of new function
├─────────────────────
│
│Local variables
│
├───────────────────── → EBP
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters
└─────────────────────┘
※ RET includes POP EIP. It stores RET value to EIP.
5. ADD ESP,0x~
┌─────────────────────┐
│
│Local variables of new function
│
├─────────────────────
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters of new function
├───────────────────── → ESP
│
│Local variables
│
├───────────────────── → EBP
│SFP
├─────────────────────
│RET
├─────────────────────
│Parameters
└─────────────────────┘
And Here is the post that is changes of stack when calling a function(Link).
November 29, 2017
Changes of stack when exiting a function
2017-11-29T12:31:00+09:00