汇编_第二篇,堆栈平衡

一个方法对应一个栈,下面见图

 

 

 

 

先传入了一个参数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的地址改变

posted @ 2013-08-29 23:29  宝贝,我永远都在  阅读(457)  评论(0)    收藏  举报