栈-函数调用

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

 

 

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

 

posted @ 2019-10-24 23:09  dx670  阅读(266)  评论(0编辑  收藏  举报