程序的内存布局和函数的调用过程

发布时间:2026/10/31 15:36:07

程序的内存布局和函数的调用过程 这是学习国资社畜的视频之后的整理这是程序的源代码接下来编译保护全关。编译之后第一步运行程序看一眼当运行程序的时候程序需要先把程序放进内存程序在内存中的布局是什么样的呢在gdb中输入vmmap查看从低地址到高地址排列上面从0x40000到0x405000是我们写的程序本身0x405000这个蓝色的是堆从0x7fff7c00000到0x7ffff7ffd000是外部的文件0x7ffffffde000是栈。目前从上到下分成程序本身堆外部文件栈四个部分。然后拖进ida里看看这个dofunc函数这里介绍几个指令的意思,等下会用到需要再回来看重要的寄存器rip当前执行的指令rbp栈底rsp栈顶push rbprsp-8把rbp放入rsp指的地方pop rbp把rsp指的地方赋值给rbprsp8mov rbprsp赋值rbprspjumpjump就是mov ripcall dofuncpush ripjump dofunc这里的rip是call dofunc的下一条指令leavemov rsprbppop rbpretn:pop rip接下来通过动态调试看函数调用的过程接下来即将执行call dofunc会push 0x4011e8现在rbp和rsp都是0x7fffffffdea0下一步rsp会减8最后两位变成98并且指的地方变成push 0x4011e8接下来si步入验证一下。rsp确实减了8指的地方变成了0x4011e8并且可以看到rip变成了0x401199成功跳转到了dofunc函数不管这个endbr64接下来要运行push rbp也就是rsp要再减8然后指的地方变成rbp。确实如此rsp最后两位变成了90和刚刚比又减了8然后rsp指的地方变成了a0也就是rbp接下来mov rbprsp进行赋值。现在rbp和rsp就都是90了接下来sub rsp0x10这个的意思就是把rsprsp-0x10进行一个赋值rsp变成了80和刚刚比减了4此时rbp指的地方是曾经rbp的地址rbp0x8的地方是之前main函数call dofunc的下一条指令这个dofunc函数的操作都在现在的rsp和rbp之间不会影响rbp下面的东西接下来我们看函数要结束时leave和ret的操作下一步是leave也就是mov rsprbp然后pop rbp。所以先是rsp等于rbp都是90之后让rbp等于rsp指的地方也就是a0然后rsp8从90变成了98现在rsp变成98了rbp是a0了和我们预想一样接下来执行ret此时rsp指的地方是0x4011e8那么接下来rip变成0x4011e8rsp加8可以看到rip和rsp都和我们预想的一样调用结束这就是函数调用的全过程了
延伸阅读

更多相关文章

2026/10/30 21:51:35

ponytail:用“技能包”重塑终端工作流

最近在折腾命令行效率工具的时候,我注意到了 ponytail 这个项目。说它是个项目,更准确一点讲,它是一套以“技能包”为粒度的终端工作流管理方案。你只需要在本地执行一行 npx skill add dietrichgebert/ponytail ,就能把分散在…

2026/10/29 10:00:59

opencode上手全指南:安装配置、模型接入、IDE插件与实战技巧

这两年终端里的AI编程助手越来越卷,从Claude Code到Codex再到各种名字都记不全的开源项目,基本是每季度换一波主力。我大概在半年前开始重度使用opencode,最开始只是抱着“再试一个新工具”的心态,结果它到现在还留在我日常工作流…

2026/10/29 22:09:13

基于FPGA的MoE模型推理实现:从架构拆解到工程实践

1. MoE模型到底是什么——用“多个小专家”拼出大模型 MoE全称是Mixture of Experts,混合专家模型。这两年它在大模型圈子里火得厉害,很多人第一次听到这个名字,是在GPT-4、Mixtral这些模型的架构说明里——只要一提到“稀疏激活”“专家路由…

2026/10/31 15:34:26

DV-HOP节点定位精度优化:多通信半径与跳距加权

简介:面向无线传感器网络定位研究者的DV-Hop改进算法仿真材料,围绕多通信半径与跳距加权策略降低误差传播、提升节点定位精度,适合WSN课程设计、算法复现与参数对比等场景的高年级学生和开发人员参考。压缩包共5个文件,约66KB&…

2026/10/31 15:34:26

Calibre 3Dstack connect命令详解与IC验证实践

1. Calibre 3Dstack命令解析:connect功能深度剖析在IC验证领域,Calibre作为业界标准的物理验证工具,其3Dstack模块专门用于处理先进封装设计的复杂验证需求。今天我们要重点解析的是3Dstack模块中的connect命令——这个看似简单的指令在实际工…

2026/10/31 15:34:26

ponytail 轻量级任务编排与插件化扩展实战指南

1. 从“ponytail”这个标题说起:它到底是什么第一次看到“ponytail”这个词,很多人脑子里蹦出来的画面是扎在脑后的马尾辫。但在技术圈和工具链语境里,它早就不是发型那么简单了。我最早接触到这个词,是在一个前端工程化的讨论群里…

2026/10/31 15:34:26

ponytail 工具实战:轻量级信息聚合与快捷操作工作流搭建指南

1. 从“ponytail”这个标题说起:它到底是什么第一次看到“ponytail”这个词,很多人脑子里蹦出来的画面是扎起来的马尾辫。但在技术圈和效率工具圈里,ponytail 早就不是发型的意思了。它是一类轻量级信息聚合与快捷操作工具的代称,…

2026/10/31 15:34:26

Calibre 3Dstack工具链与connect命令在3D IC验证中的应用

1. Calibre 3Dstack工具链概述Calibre 3Dstack是Mentor Graphics(现为Siemens EDA)推出的针对3D IC设计的物理验证解决方案。作为Calibre工具家族的重要成员,它专门处理芯片堆叠设计中的复杂互连验证问题。在先进封装技术如HBM、Chiplet等架构…

2026/10/31 15:29:26

语音社交产品冷启动策略与内容增长引擎设计

1. 语音社交产品的冷启动困境与破局点2023年全球语音社交市场规模已达47.8亿美元,但新产品的90日留存率普遍低于15%。这个数据背后反映的是语音社交产品面临的典型增长困境:用户获取成本高、内容沉淀难、社交关系链脆弱。我在操盘多款语音社交产品时发现…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑