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

代码

点击查看代码#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后,怎么知道从哪一行指令继续执行的?//------------------------------------------------------------------------------------------------------------------
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------函数参数压栈
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------函数参数压栈
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------下一条汇编指令地址入栈
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------main函数栈底指针入栈
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------移动ebp,进入被调函数
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------为sum函数开辟函数栈帧
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------将返回值放入寄存器
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------回退esp栈指针
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------将ebp指回main函数栈底
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------取出下一条执行的汇编指令地址并执行
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
//------------------------------------------------------------------------------------------------------------------
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
此时 esp  , ebp 又指向了main函数的栈底指针和栈顶指针//------------------------------------------------------------------------------------------------------------------
&lt;一&gt;从指令角度了解函数堆栈调用过程

文章插图
【<一>从指令角度了解函数堆栈调用过程】

    推荐阅读