ELF概述
- ELF(Executable and Linking Format),可执行可连接格式,具有这种格式的文件称为 ELF 文件。
目标文件有三种类型:
- 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。
- 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了exec() 如何创建一个程序的进程映像。
- 共享目标文件(Shared Object File) 包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理, 生成另外一个目标文件。其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。
- 目标文件全部是程序的二进制表示,目的是直接在某种处理器上直接执行。
目标文件格式:
- (ELF Header)用来描述整个文件的组织。节区部分包含链接视图的大量信息:指令、数据、符号表、重定位信息等等。
- (Program Header Table)如果存在的话是告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。
- (Section Header Table)包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。
ELF Header部分
- ELF Header 数据结构
- 在这里只解释e_ident[]的功能:
如上两图所示,e_ident[]的前4个字节描述文件类型为ELF文件格式,第一个字节固定为 0x7f,后续的三个字节分别为'E','L','F'。