栈-函数调用

偶尔善良 提交于 2019-12-02 06:59:10

汇编的程序如下,分析此程序以得出栈的精髓:

 

 

1、主函数被上层调用者调用后,执行PUSH EBP,ESP-4(因为EBP入栈),EBP值没有改变,值得注意的是刚开始分配站的时候,第一个入栈的是return,主函数的返回地址,然后是EBP

 

 2、然后是MOV EBP,ESP,将ESP的值赋给EBP,该语句未执行时,EBP仍为上层调用者的栈的栈底指针,执行该语句后,EBP变为新栈的栈底指针(先将其入栈,是为了返回上层时,栈的状态也会随之返回,函数调用结束,函数的栈即消失)

3、然后就是一些函数内部的数据入栈出栈等操作

4、函数即将结束时,执行MOV ESP,EBP操作,清空该栈,回到第二步的状态2

5、上步结束后,执行pop ebp操作,此时ebp指向上层调用者的栈底

 

6、最后一步为return,返回函数调用的地址,函数调用和函数返回的时候会调用栈顶指针ESP

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!