当编译一个源文件生成目标文件时,会在目标文件中生成符号表和重定位表。
符号表包含在文件中定义的全局符号以及在文件中引用的外部符号(外部函数或变量)。
重定位表告诉链接器在哪些位置要进行重定位操作。
编译生成的目标文件在文件的开始处会有一个elf头,描绘了整个文件的组织结构。它还包括很多节(section)。这些节有的是系统定义好的,有
些是用户在文件中通过.section命令自定义的,链接器会将各输入目标文件中的相同的节合并。
链接器对编译生成的目标文件进行链接时,首先进行符号解析,找出外部符号在哪定义。如果外部符号在一个静态库中定义,则直接将对应的定义代码复制到
最终生成的目标文件中。接着链接器进行符号重定位。编译器在生成目标文件时,通常使用从0开始的相对地址,而在链接过程中,链接器从一个指定的地址开始,
根据输入目标文件的顺序,以段(segment)为单位将它们拼装起来。其中每个段可以包括很多个节(section)。除了目标文件的拼装,重定位过程
中还完成了下面两个任务:一是生成最终的符号表,二是对代码段中的某些位置进行修改,要修改的位置由编译器生成的重定位表指出。
链接过程中还会生成两个表:got表和plt表。
got表中每一项都是本运行模块要引用的全局变量或函数的地址,可以用got表来间接引用全局变量。函数也可以把got表的首地址作为一个基准,用
相对该基准偏移量来引用静态函数。由于动态链接器(ld-linux.so)不会把运行模块加载到固定地址,在不同进程的地址空间中各运行模块的绝对地
址、相对地址都不同。这种不同反映到got表上,京是每个进程的每个运行模块都有独立的got表,所以进程间不能共享got表。
plt表中第一项都是一小段代码,对应于本运行模块要引用的一个全局函数。当链接器发现某个符号引用是共享目标文件中的一个函数时,就在pltk
创建一个入口。
链接生成的目标文件在文件开头也有一个elf头号,描绘了整个文件的组织结构,这个文件中会有多个段(segment),每个段都由相应的节
(section)拼装而成。
对由链接器链接生成的可执行目标文件进行加载运行时,内核首先读取elf头。根据头部数据指示分别读入各种数据结构,找出可加载的段闭并调用
mmap()函数将其加载到内存。内核找到标记为PT_INTERP的段,这个段对应着动态链接器的名称,然后加载动态链接器。linux中通常是
/lib/ld-linux.so.2.接着内核将控制权交给动态链接器。动态链接器检查程序对外部文件(共享库)的依赖性,并在需要时对其进行加载。之
后动态链接器开始对程序中的外部引用进行重定位,即告诉程序其引用的外部变量/函数的地址。R_386_GLOB_DAT类型的入口涉及到got表。
R_3862_JMP_SLOT类型的入口涉及到plt表。动态链接还有一个延迟(lazy)特性,即真正引用时才进行重定位(环境变量
LD_BIND_NOW为空值NULL时)。接下来动态链接器执行elf文件中标记为.init节的代码,进行程序运行的初始化。最后动态链接器把控制权
交给程序, 从elf头中定义的入口处开始执行程序。
http://blog.csdn.net/BoySKung/archive/2008/12/10/3488468.aspx
分享到:
相关推荐
支持全部ELF类型解析。支持32位/64位elf文件自适应解析、可解析elf文件头、程序头、节头、字符表、符号表、...可以解析linux及大部分嵌入式的编译输出文件,如gcc、keil mdk、iar、ccs等编译器的输出文件格式均为ELF。
包含ELF格式的中英文文档,以及一些学习过程中所用到的文件。仔细看的话应该能对ELF格式有个大致了解吧。网上这类资料不少,这算是我学习过程中所用资料的集合吧
《ELF文件格式分析.pdf》文档,非常不错的elf格式参考文档,参考elf解析过程,能很快掌握elf文件格式
ELF文件格式学习 From: http://danielwood.cublog.cn
用来解析elf格式文件,如DSP/ccs的编译输出.out文件 或ARM/MDK编译的axf文件,使用mfc设计,使用虚拟列表完美提升工具性能
elf101,资料收集自互联网,通过一张图展示ELF格式,是学习ELF格式的好工具
ELF文件格式分析文档,北京大学信息科学技术学院操作系统实验室教学材料,滕启明编写
ELF格式中文版,一个学习ELF很好的参考
elf文件格式分析总结 基本组成、数据结构等 ……
北大课题组的报告文档:ELF文件系统格式
介绍了LinuxELF格式可执行程序,描述了将代码嵌入目标文件的方法
ELF格式分析程序的源代码,帮助理解ELF格式
ELF 文件格式分析 中文版 ELF格式
Linux可执行文件格式,ELF文件格式
ELF 文件格式详解,为想学习动态加载技术的基础教材
Linux下.ELF文件的较好的入门资料,txt格式,简明易懂。 学会map等基本概念。
ELF文件格式详解,包括代码实现,非常详细!你值得拥有! ^_^
elf(可执行链接格式)中文手册 elf格式解析文档