首页IT科技函数调用堆栈变化(从指令角度了解函数堆栈调用过程)

函数调用堆栈变化(从指令角度了解函数堆栈调用过程)

时间2025-05-02 12:48:10分类IT科技浏览3676
导读:代码 点击查看代码 #include <iostream> using namespace std; int...

代码

点击查看代码 #include <iostream> using namespace std; int sum(int a,int b){ int temp=0; temp= a +b; return temp; } int main(){ int a =10; int b=20; int ret =sum(a,b); return 0; }

以上代码考虑2个问题:

问题1:main函数调用sum,sum执行完成以后,怎么知道回到哪个函数中?

问题2:sum函数执行完后,回到main后,怎么知道从哪一行指令继续执行的?

//------------------------------------------------------------------------------------------------------------------

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

函数参数

压栈

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

函数参数压栈

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

下一条汇编指令地址入栈

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

main函数栈底指针入栈

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

移动ebp

           ,进入被调函数

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

为sum函数开辟函数栈帧

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

将返回值放入寄存器

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

回退esp栈指针

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

将ebp指回main函数栈底

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

取出下一条执行的汇编指令地址并执行

从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

从指令角度了解函数堆栈调用过程

此时 esp                  ,ebp 又指向了main函数的栈底指针和栈顶指针 //------------------------------------------------------------------------------------------------------------------

从指令角度了解函数堆栈调用过程

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
w10响度均衡找不到怎么办(win10没有响度均衡怎么办? win10系统打开响度均衡的技巧) 如何制作个人博客网站(打造精致个人博客,用WordPress采集尽显魅力)