ILD

ELF:标准与文件格式
作者:Herbert Yuan 邮箱:yuanjp89@163.com
发布时间:2017-6-15 站点:Inside Linux Development

1 规范 Specifications

ELF (Executable and Linking Format) 最早由Unix系统实验室(USL)作为ABI (Application Binaray Interface) 的一部分发布。TIS (Tool Interface Standard) 协会选择ELF作为32位Intel架构下各种操作系统的可移植目标文件格式。TIS 在1993年发布了1.1版本的ELF标准,1995年发布了1.2版本的ELF标准。1997年,System V ABI 4.1 也包含了ELF相关的规范,后续的4.1+,包含了一些更新。Linux Stardard Base Core specification 4.1 包含一些和Linux相关的规范。

ARM在其ABI规范中,定义了处理器相关的ELF内容。

2 文件格式 File format 

主要有3种类型的目标文件格式:

    1. 可重定向目标文件

    2. 可执行目标文件

    3. 共享目标文件

上述3种类型分别对应:.o文件、可执行文件和共享库。静态库只是.o文件的集合,不是一种目标文件格式。链接视角的目标文件格式如下:

ELF header

Program header table

(optional)

Section   1

Section   n

Section header table

执行视角的目标文件格式如下:

ELF header

Program header table

Segment 1

Segment n

Section header table

(optional)

上述,只有ELF header固定在文件的开头位置,其它的Porgram header table等可以出现在任意位置。但是使用readelf工具读取ELF文件可以发现,上述两种布局方式就是GNU工具使用的布局方式。

ELF header包含ELF文件的基本信息。

Section header table包含sections信息,每个section在表中占据一个条目。Sections包含了指令、数据、符号表、重定向等信息。链接阶段的文件(.o)必须要有Section header table,可执行文件不必要有Section header table。

Program header table告诉系统如何创建进程镜像。可执行文件必须有Program header table。

Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.