代码
点击查看代码以上代码考虑2个问题:问题1:main函数调用sum,sum执行完成以后,怎么知道回到哪个函数中?问题2:sum函数执行完后,回到main后,怎么知道从哪一行指令继续执行的?//------------------------------------------------------------------------------------------------------------------#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;}

文章插图
//------------------------------------------------------------------------------------------------------------------函数参数压栈

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

文章插图
//------------------------------------------------------------------------------------------------------------------下一条汇编指令地址入栈

文章插图
//------------------------------------------------------------------------------------------------------------------main函数栈底指针入栈

文章插图
//------------------------------------------------------------------------------------------------------------------移动ebp,进入被调函数

文章插图
//------------------------------------------------------------------------------------------------------------------为sum函数开辟函数栈帧

文章插图
//------------------------------------------------------------------------------------------------------------------将返回值放入寄存器

文章插图
//------------------------------------------------------------------------------------------------------------------回退esp栈指针

文章插图
//------------------------------------------------------------------------------------------------------------------将ebp指回main函数栈底

文章插图
//------------------------------------------------------------------------------------------------------------------取出下一条执行的汇编指令地址并执行

文章插图
//------------------------------------------------------------------------------------------------------------------

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

文章插图
经验总结扩展阅读
- .NET Conf 2022 &ndash; 11 月 8 日至 10 日
- 聊一聊对一个 C# 商业程序的反反调试
- 2023癸卯年下半年订婚黄道吉日一览表
- 十 前后端分离项目:实现"改"功能(前后端)
- 2022年12月29日商铺开张好吗
- 2022年农历腊月初一是开业黄道吉日吗
- 2023兔年适合出行的好日子
- 2022年12月22日冬至可以入宅吗
- 2023年夏至就是入伏第一天吗
- 2023年夏至这一天应该吃什么