当前位置: 首页 > news >正文

[从零构建操作系统]09 程序段(SECTION)及elf文件介绍

1. 解析各字段

Tip1:.rodata中放置的是常量值,例如字符串的内容“abcdef”,而作为字符串的变量则放在data数据段,所以.data中的字符串变量的值实际保存了指向字符串首个字符的地址,因此就能索引到字符串的内容,这应该也是为什么c代码中,数组变量可以表示数组首地址的原因

Tip2:一些未初始化的变量则放在.bss段,它们默认的值是0。

其中,各程序段的起始地址,是可以通过链接器的链接脚本进行指定的。链接脚本就是.lds结尾的文件。

2. 编译链接,elf,bin文件之间的联系

链接的时候指定具体地址,到底是如何决定的代码最终就放在哪个位置呢,是什么内在逻辑?请见我之前的文章链接。[从零构建x86操作系统] 03 x86保护模式下编程(1)---系统启动简介_x86 bootrom entrypoint的地址-CSDN博客

elf文件是一个通用的可执行文件,但是里面有一些额外的格式化信息。bin文件则是将elf文件去除了额外信息,只保留了纯粹的.text,.data,.rodata,.bss这些字段的数据。

elf文件图解:

elf文件就是加了头部信息的bin文件,通过头部信息可以知道,每个代码段的信息(例如数据大小,在文件中的偏移地址等等)。elf文件满足固定的格式规则要求,可按照文档给定的结构体信息,将elf解析出纯粹的程序段。

Tip:有个特殊的bss段,它里面放的就是未初始化的变量,而这些未初始化的变量默认为0,所以其实在elf文件中,不会真的放了一堆0白白的占空间,但会有bss段的信息,通过读取elf结构体的p_memsz和p_filesz就能分别知道这个段在内存中总共需要多大、elf文件里提供了多少内容。p_memsz == p_filesz表示没有bss数据段需要清零;p_memsz > p_filesz 多余的部分就是内存中需要清零的空间大小,也就是为那些未初始化的变量分配的空间。

http://www.cnnetsun.cn/news/66804.html

相关文章:

  • 【问题排查】No spring.config.import property has been defined
  • Dify连接外部数据库存储PyTorch模型输出结果
  • 基于SVM代理模型的电机多目标优化:平均转矩、转矩脉动及推力径向优化的高精度实现
  • 三分钟上手DNN多输出预测(附保姆级代码)
  • 什么是苹果MFi认证,有什么优势?
  • Conda与Pip双管齐下:优化PyTorch-CUDA依赖安装流程
  • PyTorch 权重剪枝中的阈值计算:深入解读 numel() 和 torch.kthvalue()
  • CKA-Agent:揭示商业LLM安全防线的“特洛伊知识“漏洞
  • 构筑智能心理新基建:北京朗心致远AI心理场室与设备整体解决方案
  • 【众包 + AI智能体】AI境生态巡查平台边防借鉴价值专项调研——以广西边境线治理为例
  • AutoGPT支持GraphQL订阅模式了吗?实时更新测试
  • Miniconda集成virtualenv,双剑合璧管理复杂AI项目
  • 从 “PPT 加班狗” 到 “10 分钟出稿大师”:paperzz AI PPT 生成器,藏在学术工具里的效率黑科技
  • 「学术协作者图谱」:PaperZZ领衔的9款AI毕业论文辅助工具全景测评——以“认知脚手架”为轴心的功能解构与伦理适配指南
  • 从 “熬夜改 PPT” 到 “10 分钟出稿”:paperzz AI PPT 生成器如何重构职场 / 学业演示效率?
  • 从 “文献堆里找线索” 到 “1 小时出框架”:paperzz AI 文献综述,把学术苦力活变成 “逻辑拼图游戏”
  • transformer模型详解:以Qwen3-32B为例剖析架构设计
  • 清华源加速下载Qwen3-8B模型文件及依赖组件
  • 如何在单张GPU上部署Qwen3-VL-8B实现高效图像识别
  • AutomationOperation2.60自动操作工具:可视化 GUI支持鼠标 键盘 识别等自动化操软件作
  • 【机器学习】PAC学习理论及实现
  • 计算机硬件解剖:从拆解到性能优化
  • 基于STM32单片机盲人导航 导盲杖 智能拐杖系统 超声波测距 老人防丢 防摔到 跌倒检测报警 物联网控制系统 DIY 成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料
  • AutoGPT联网搜索功能如何启用?详细配置说明来了
  • 企业内部智能客服新选择:基于LobeChat的定制化解决方案
  • AutoGPT镜像用户增长数据曝光:三个月突破10万下载
  • Python 1级编程考试模拟题库(5套精选)
  • 从零开始部署LobeChat:打造个人专属的大模型对话门户
  • Jenkins环境配置篇-更换插件源
  • 行为驱动开发(BDD)在软件测试中的实践流程