news 2026/4/27 16:32:02

[从零构建操作系统]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/24 23:45:41

火山引擎AI大模型开放平台接入Qwen3-VL-8B实操

火山引擎AI大模型开放平台接入Qwen3-VL-8B实操 在电商客服中,用户上传一张商品图问“这是什么手机?能用5G吗?”——过去这样的问题只能靠人工判断,响应慢、成本高;如今,借助多模态大模型,系统不…

作者头像 李华
网站建设 2026/4/23 20:59:22

腾讯云国际站代理商的MapReduce有哪些劣势?

腾讯云国际站代理商提供的 MapReduce 即弹性 MapReduce(EMR),其劣势既包含 MapReduce 编程模型本身的技术局限性,也有跨境场景下的专属问题,同时代理商服务模式也存在一定附加短板,具体如下:技术…

作者头像 李华
网站建设 2026/4/22 9:43:12

借助LobeChat打造个性化AI客服系统,降低人力成本提升转化率

借助LobeChat打造个性化AI客服系统,降低人力成本提升转化率 在企业服务日益追求效率与体验的今天,一个常见的困境摆在面前:客户咨询量持续增长,但人工客服的成本越来越高,响应速度却越来越难保证。尤其是在电商、SaaS、…

作者头像 李华
网站建设 2026/4/27 6:39:46

平台之上,生态共赢:五大低代码厂商如何构建开发者与应用新生态

缘起:一场数字化迫在眉睫的转型作为一家成长型企业的数字化负责人,我曾经面临着许多企业都曾经历的困境:业务部门需求层出不穷,传统开发流程却总是跟不上节奏。直到我深入体验了低代码世界,才发现原来数字化可以如此高…

作者头像 李华