【函数栈帧的创建和销毁】(超详细图解)(中)

简介: 【函数栈帧的创建和销毁】(超详细图解)

在此之前,ebp和esp两个寄存器都在维护_tmainCRTStartup所分配的空间,接下来我们来分析反汇编代码:


1.

002718A0pushebp

push ----------------------压栈的意思,这一步我们将ebp压栈

b507ac2bbf2343dc9e3c571ce3e5085c.gif


2.

002718A1movebp,esp002718A3subesp,0E4h


mov:移动,将esp的值赋给edp

sub:减,将esp的值减去0E4h大小的空间

ce5978be0e794388946c41769f91b08d.png

通过监视我们可以发现,此时esp和ebp的值已经一模一样了,说明ebp已经移到 _tmainCRTSstartup函数的栈顶了,并且esp的值也发生了变化,如图所示:

8a24e306fb854eb7a625474bccdf3075.gif

由此我们可以发现,减去的0E4h的大小原来是为main函数开辟的空间大小,而edp和esp也由维护原来的_tmainCRTSstartup函数的栈帧转变为维护main函数的栈帧了


3.

002718A9pushebx002718AApushesi002718ABpushedi

这里又是压栈了,将ebx,esi,edi从main函数栈顶依次压入:

5eec018955b14c11ac27d3f7d2c98587.png


4.

d6c1e263cbf44c1f909ea647d49dd6ad.png

这里4条汇编指令的意思是将edi向下的39h这么大的空间里全部赋值为cccccccc,如图:

20eaecc217384bacbdfb6f480ccbff10.png


到这里main函数的栈帧就已经创建好了


5.

inta=10;
002718C5movdwordptr [ebp-8],0Ahintb=20;
002718CCmovdwordptr [ebp-14h],14hintc=0;
002718D3movdwordptr [ebp-20h],0c=Add(a, b);

这里是创建a,b,c三个变量,假设我们用一个格子代表4个字节,那么创建的a,b,c三个变量如下图所示:

20eaecc217384bacbdfb6f480ccbff10.pngimage.png

通过查看内存可发现,刚好和我们在main函数栈帧里创建的吻合


6.

002718DAmoveax,dwordptr [ebp-14h]  
002718DDpusheax002718DEmovecx,dwordptr [ebp-8]  
002718E1pushecx

将[ebp-14h]的值传给eax,再进行压栈,将[ebp-8]的值传给ecx,再进行压栈,如图:

20eaecc217384bacbdfb6f480ccbff10.png

大家有没有发现,这一步操作正是我们函数的传参!

目录
相关文章
|
5月前
|
存储 缓存 前端开发
《前端开发者必看:IndexedDB海量数据查询提速秘籍》
IndexedDB 是强大的客户端存储方案,支持大容量数据存储。面对海量数据,优化查询速度至关重要,影响应用性能与用户体验。通过合理使用索引、事务管理、数据分片、缓存策略及定期维护,可有效提升查询效率,保障系统稳定高效运行。
205 4
|
6天前
|
数据采集 人工智能 安全
|
15天前
|
云安全 监控 安全
|
2天前
|
存储 SQL 大数据
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
243 156
|
9天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
650 5
|
12天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
792 152