news 2026/2/12 14:48:45

[从零构建操作系统]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/2/6 11:53:35

【问题排查】No spring.config.import property has been defined

一、场景复现 最近在搭建 Spring Cloud 微服务架构时,计划通过 Nacos 统一管理配置文件,于是在 application.yml 中添加了如下配置: spring:cloud:nacos:config:server-addr: 127.0.0.1:8848file-extension: ymlconfig:import: nacos:${spr…

作者头像 李华
网站建设 2026/2/9 18:57:50

Dify连接外部数据库存储PyTorch模型输出结果

Dify连接外部数据库存储PyTorch模型输出结果 在如今的AI工程实践中,一个常见的尴尬局面是:模型跑得飞快,结果却“用完即焚”。训练好的PyTorch模型部署上线后,每次推理产生的宝贵数据——比如用户行为预测、图像识别置信度、异常检…

作者头像 李华
网站建设 2026/2/11 14:51:00

三分钟上手DNN多输出预测(附保姆级代码)

DNN多输出回归 基于深度神经网络(DNN)的多输出回归预测(多输入多输出) 程序已经调试好,数据格式为excel(如下图),仅需根据你的输出个数修改outdim值即可 1、运行环境要求MATLAB版本为2019b及其以上 2、评价指标包括:R2、MAE、MBE、RMSE等,图很…

作者头像 李华
网站建设 2026/2/7 21:31:48

什么是苹果MFi认证,有什么优势?

MFi 认证(Made for iPhone/iPad/iPod)是苹果面向第三方配件的官方许可计划,核心是通过苹果授权芯片、严格测试与协议适配,确保配件在兼容性、安全性和性能上符合苹果标准,可合法使用 MFi 标识并接入苹果生态核心功能&a…

作者头像 李华
网站建设 2026/2/9 20:20:16

Conda与Pip双管齐下:优化PyTorch-CUDA依赖安装流程

Conda与Pip双管齐下:优化PyTorch-CUDA依赖安装流程 在深度学习项目的实际开发中,最让人头疼的往往不是模型设计或训练调参,而是环境配置——尤其是当你满怀期待地运行代码时,却弹出一行红色错误:“CUDA is not availab…

作者头像 李华