ELF文件格式
•目标文件有三种类型:
– 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。
– 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了 exec() 如何创建一个程序的进程映像。
– 共享目标文件(Shared Object File) 包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另外一个目标文件。其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。
•目标文件全部是程序的二进制表示,目的是直接在某种处理器上直接执行。
ELF格式文件目前是UNIX系统非常常见二进制文件格式,ELF文件格式主要3大部分,ELF文件头,节区表,和节区。对于可执行文件对应的是段表,段。
下面这3部分简单分布情况,上面这条横条可以看成ELF文件从头到尾。对于ELF头,节区表,节区都对应分布在文件里面,通过偏移来表示其对应在文件的位置。
2、ELF头对应字段的意义简单用下图来说明,其他字段可以对应解析
3、节区相关信息
4、对于节区经常使用的两个信息字段sh_info ,sh_link对应字段意义
5、对于一个ELF目标文件,通常都会有以下几个节区,可以通readelf –S test.o
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 00000000 000034 000011 00 AX 0 0 4
[ 2] .data PROGBITS 00000000 000048 000000 00 WA 0 0 4
[ 3] .bss NOBITS 00000000 000048 000000 00 WA 0 0 4
[ 4] .comment PROGBITS 00000000 000048 00002a 00 0 0 1
[ 5] .note.GNU-stack PROGBITS 00000000 000072 000000 00 0 0 1
[ 6] .shstrtab STRTAB 00000000 000072 000045 00 0 0 1
[ 7] .symtab SYMTAB 00000000 000220 000080 10 8 7 4
[ 8] .strtab STRTAB 00000000 0002a0 00000a 00 0 0 1
符号表:对应于.symtab,它保存着目标文件中所有的符号信息
字符串表:.strtab,保存字符窜信息。信息组织规则
对应符号信息:
6、上面列出的信息中,没有包含重定位信息段,因为test.o是一个简单的目标文件,就定义了一个函数,所有没有涉及重定位,其实在
绝大部门目标文件中,都存在这个重定位信息段。若一个目标文件引用了其他目标文件的符号,就会生成重定位信息段,方便在连接的
时候进行。重定位项信息如下:
7、对于一个ELF文件,重定位过程可以简单表示成下面过程
以上都是些零散ELF文件东西,没有时间系统说明,只是随便介绍一下。