代码
点击查看代码以上代码考虑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# 商业程序的反反调试
 - 十 前后端分离项目:实现"改"功能(前后端)
 - 原神无忧节最后一个兰纳罗位置在哪
 - 红魔6参数配置_红魔6参数配置详情
 - 三 Java多线程-ThreadPool线程池
 - 一 Abp.Zero 手机号免密登录验证与号码绑定功能的实现:验证码模块
 - c++ 模板 指针类型偏特化
 - 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率
 - 二、.Net Core搭建Ocelot
 
