- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
21linux011支持的目标文件
2.1 Linux 0.11支持的目标文件
为了生成内核代码文件,Linux 0.11 使用了两种编译器。第一种是汇编编译器 as86 和相应的链接程
序ld86。它们专门用于编译和链接运行在实地址模式下的16位内核引导扇区程序 bootsect.s和设置程序
setup.s。第二种是 GNU 的汇编器 gas 和 C 语言编译器 gcc 以及相应的链接程序 gld。编译器用于为源程
序文件产生含有生成的二进制代码和数据的目标文件。链接程序用于对相关的所有目标文件进行组合处
理,形成一个可被内核加载执行的目标文件,即可执行文件。
下面我们首先简单说明编译器产生的目标文件结构,然后描述链接器如何把需要链接在一起的目标文
件模块组合在一起,以生成二进制可执行映像文件或一个大的模块文件。最后说明 Linux 0.11 内核二进
制代码文件 Image 的生成原理和过程。有关目标文件和链接程序的基本工作原理可参见 John R. Levine
著的《Linkers Loaders》一书,这里仅给出了能够理解编译链接所生成的Linux 0.11 内核代码文件的
信息以及 Linux 0.11 内核所支持的a.out目标文件格式。as86和ld86生成的是MINIX专门的目标文件格
式,因为其结构与 a.out目标文件格式类似,因此这里就不再说明。
为便于描述,这里把编译器生成的目标文件称为目标模块文件(简称模块文件),而把链接程序输出
产生的可执行目标文件称为可执行文件。并且把它们都统称为目标文件。
2.1.1 目标文件格式
C 语言编译器 gcc 和汇编器 gas 编译生成的 a.out 格式的目标模块文件或链接生成的可执行文件含有
7个部分:
a) 执行头部分 (exec header)。执行文件头部分。该部分中含有一些参数(exec结构),是有关目标
文件的整体结构信息。例如代码和数据部分的长度、未初始化数据区的长度、对应源程序文件名
以及目标文件创建时间等。内核使用这些参数把执行文件加载到内存中并执行,而链接程序(ld)
使用这些参数将一些模块文件组合成一个可执行文件。这是目标文件唯一必要的组成部分。
b) 代码段部分 (text segment)。由编译器或汇编器生成的二进制指令代码和数据信息,含有程序执
行时被加载到内存中的指令代码和相关数据。可以以只读形式被加载。
c) 数据段部分 (data segment)。由编译器或汇编器生成的二进制指令代码和数据信息,这部分含有
已经初始化过的数据,总是被加载到可读写的内存中。
d) 代码重定位部分 (text relocations)。这部分含有供链接程序使用的记录数据。在组合目标模块
文件时用于定位代码段中的指针或地址。当链接程序需要改变目标代码的地址时就需要修正和维
护这些地方。
e) 数据重定位部分 (data relocations)。类似于代码重定位部分的作用,但是用于数据段中指针的
重定位。
f) 符号表部分 (simbol table)。这部分同样含有供链接程序使用的记录数据。这些记录数据保存着
模块文件中定义的全局符号以及需要从其他模块文件中输入的符号,或者是由链接器定义的符
号,用于在模块文件之间对命名的变量和函数(符号)进行交叉引用。
g) 字符串表部分 (string table)。该部分含有与符号名相对应的字符串。用于调试程序调试目标代
码,与链接过程无关。这些信息可包含源程序代码和行号、局部符号以及数据结构描述信息等。
在 Linux 0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序所生成的可执行文件都使
用了UNIX传统的a.out格式。这是一种被称为汇编与链接输出(Assembly linker editor output)的
目标文件格式。对于具有内存分页机制的系统来说,这是一种简单有效的目标文件格式。a.out 格式文件
由一个文件头和随后的代码部分(Text section,也称为文本段)、已初始化数据部分(Data section,
也称为数据段)、重定位信息部分、符号表以及符号名字符串构成,见图 1 所示。其中代码部分和数据部
分通常也被分别称为文本段(代码段)和数据段。
1
您可能关注的文档
- 12设定目标 迈向成功.ppt
- 12施工项目部安全生产组织机构跟目标管理.doc
- 12数学教学目标模型.doc
- 14摩擦力-教学目标.doc
- 22 案例例子分析解析:教学目标设计.ppt
- 22、施工资料目标设计方案计划.doc
- 41-目标管理.ppt
- 51_认定好例审计目标.ppt
- 51审计目标.ppt
- 52“程序设计”课程目标的认知结构解析.doc
- 实验室危废随意倾倒查处规范.ppt
- 实验室危废废液处理设施规范.ppt
- 实验室危废处置应急管理规范.ppt
- 初中地理中考总复习精品教学课件课堂讲本 基础梳理篇 主题10 中国的地理差异 第20课时 中国的地理差异.ppt
- 初中地理中考总复习精品教学课件课堂讲本 基础梳理篇 主题10 中国的地理差异 第21课时 北方地区.ppt
- 危险废物处置人员防护培训办法.ppt
- 危险废物处置隐患排查技术指南.ppt
- 2026部编版小学数学二年级下册期末综合学业能力测试试卷(3套含答案解析).docx
- 危险废物处置违法案例分析汇编.ppt
- 2026部编版小学数学一年级下册期末综合学业能力测试试卷3套精选(含答案解析).docx
原创力文档


文档评论(0)