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

发布时间:2026/9/8 15:28:48

程序的内存布局和函数的调用过程 这是学习国资社畜的视频之后的整理这是程序的源代码接下来编译保护全关。编译之后第一步运行程序看一眼当运行程序的时候程序需要先把程序放进内存程序在内存中的布局是什么样的呢在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/9/8 15:28:48

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

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

2026/9/8 15:28:48

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

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

2026/9/8 15:28:48

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

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

2026/9/8 16:44:10

彻底解放双手✅PaperXie科研绘图!搞定本科论文所有学术图表

很多同学用PaperXie只知道写作、降重、改格式,却忽略了理工科、社科毕设最刚需的科研绘图功能! 本科论文扣分从来不止文字逻辑!图表混乱、画风花哨、逻辑错位、图片模糊、不会配图,是大批同学被导师反复打回的核心原因。网上找的…

2026/9/8 16:44:10

从抄板到盲埋孔:新手PCB设计进阶之路

1. 学习嵌入式硬件,我为什么建议从抄板下手 大一暑假刚开始碰嵌入式硬件那会儿,我连电阻电容都认不全,拿到一块开发板,第一反应是到处搜教程。后来真正让我开窍的,反而是别人不太看得上的笨办法——抄板。你别一听这两…

2026/9/8 16:39:10

AI Agent技能插件:将自然语言秒变高可读Mermaid流程图

2. 项目的核心机制拆解:到底解决的是什么问题在动手写代码之前,我先后试过三条路线:第一条是在Coze/扣子这类商业化平台里用现成的Agent编排,受限于平台自身的托管环境,换一个Agent框架就全部作废;第二条是…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 0:01:49

踩多轮坑才跑通|OpenClaw 3.1.0 双平台本地 AI 自动化搭建实操实录

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

2026/9/8 0:01:50

拒绝复杂命令行,Hermes Agent 一键包快速解锁智能办公能力

🔍前言 不少想要体验 Hermes Agent 办公能力的使用者,往往会被复杂的环境配置拦住使用脚步。手动下载匹配依赖、反复调整系统目录、处理命令行持续报错、修复权限异常、补全丢失核心文件等一系列操作,对普通使用者而言门槛较高,很…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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