news 2026/4/18 9:45:37

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[从零构建操作系统]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 多余的部分就是内存中需要清零的空间大小,也就是为那些未初始化的变量分配的空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:10:36

2025年有实力的AI搜索优化公司排名揭秘,谁能脱颖而出?

破题:AI搜索优化行业的2025展望在当下数字化浪潮中,AI搜索优化已成为众多企业提升线上竞争力的关键手段。随着技术的飞速发展,2025年的AI搜索优化市场将会呈现出怎样的格局备受关注。众多公司纷纷布局,究竟哪些有实力的公司能在激…

作者头像 李华
网站建设 2026/4/18 9:39:03

代数学在电气工程中的深度驱动与创新应用

摘要 本文突破传统分科论述范式,以电气工程三大前沿实践挑战为切入点,系统阐述代数学作为核心方法论驱动解决方案构建的过程。 聚焦“高性能机电能量转换系统设计‑控制一体化”“高比例新能源电力系统动态安全分析”“多物理场耦合电磁器件集成设计”三…

作者头像 李华
网站建设 2026/4/18 3:42:09

从Anaconda迁移到Miniconda:数据科学家的经验分享

从 Anaconda 迁移到 Miniconda:为什么越来越多数据科学家选择“轻装上阵” 在一次模型复现失败后,团队花了整整两天排查环境问题——同事的本地机器运行正常,CI 流水线却频频报错。最终发现问题根源:Anaconda 预装的 scikit-lear…

作者头像 李华