一个方法对应一个栈,下面见图
先传入了一个参数1,从右到左的传参数,在调用call的方法内存地址,然后,她会先把下一行执行的代码push进栈中,也就是下一行的地址:0020142c
最后的add esp,4,其实就是我们刚刚给栈中传入了一个参数,所以咱们得维护栈的平衡
咱们看看方法内部
先保存上一个方法的栈底指针,
push ebp
在把上一个方法的栈顶指针作为这个方法的栈底指针,mov ebp,esp
sub esp,0d8 在给本方法分配局部变量的大小
mov eax,dword ptr ss:[ebp+8] 把上一个,也就是传进入的参数赋值给eax
最后在 mov esp,ebp. 把这个方法的栈底指针分配给栈顶指针
pop ebp 在把保存的栈底指针分配给ebp
retn 这句话其实是:pop eip 把eip的地址改变