ELF 文件中的section 和 segment

来源:互联网 发布:什么是云计算的基础 编辑:程序博客网 时间:2024/05/29 04:39

ELF 是可执行目标文件的一种格式,上计算机系统的时候曾经简略的接触到,这个可执行文件中包含了 代码段,数据段等信息,供程序运行的时候进行调用,但是实在太久没有看到这个东西了,今天又看到了ELF文件的时候,对elf 节和 elf 段的概念很陌生



ELF segment 和 section 用上图来解释很恰当,其实就是对于elf文件中一部分相同内容的不同描述映射而已,就是上图红框中标出的内容,就好比一个学院的学生,有人喜欢用一班的学生,二班的学生去描述,也有人用女同学,男同学去描述


两者的作用是什么,这和程序的编译链接和加载有关系了,一个正常的程序进行的编译链接过程如下图



1.一个c源程序f1.c经过c预处理器(cpp)进行预处理后,变成f1.i(上图省略此步)

2.c编译器(ccl)将f1.i文件翻译成一个ASCII汇编语言文件f1.s

3.汇编器(as)将f1.s翻译成一个可重定位目标文件f1.o

4.链接器(ld)将所有文件链接,最终生成一个可执行文件p


从上图可以看出,一个源程序最终是要转成汇编程序最后才能生成一个可执行目标文件,写过汇编的都知道,汇编每一段开头都有不同的声明,表示接下来这一段的内容是什么,如下图,这就是section,也就是说section本身的作用就是来自于汇编中声明


那么segment的作用是什么呢? 多个可重定向文件最终要整合成一个可执行的文件的时候,链接器吧目标文件中相同的 section 整合成一个segment,在程序运行的时候,方便加载器的加载


参考博客: 

segment and section for c++ elf: http://blog.csdn.net/jiafu1115/article/details/12992497


原创粉丝点击