![](https://csdnimg.cn/release/download_crawler_static/11080750/bg3.jpg)
其中 E_ident 的 16 个字节标明是个 ELF 文件(7F+'E'+'L'+'F')。e_type 表示文件类型,2
表示可执行文件。e_machine 说明机器类别,3 表示 386 机器,8 表示 MIPS 机器。e_entry
给出进程开始的虚地址,即系统将控制转移的位置。e_phoff 指出 program header table 的文
件偏移,e_phentsize 表示一个 program header 表中的入口的长度(字节数表示),e_phnum
给出 program header 表中的入口数目。类似的,e_shoff,e_shentsize,e_shnum 分别表示 section
header 表的文件偏移,表中每个入口的的字节数和入口数目。e_flags 给出与处理器相关的标
志,e_ehsize 给出 ELF 文件头的长度(字节数表示)。e_shstrndx 表示 section 名表的位置,
指出在 section header 表中的索引。
5. Section Header
目标文件的 section header table 可以定位所有的 section,它是一个 Elf32_Shdr 结构的数
组,Section 头表的索引是这个数组的下标。有些索引号是保留的,目标文件不能使用这些
特殊的索引。
Section 包含目标文件除了 ELF 文件头、程序头表、section 头表的所有信息,而且目标
文件 section 满足几个条件:
1) 目标文件中的每个 section 都只有一个 section
头项描述,可以存在不指示任何 section
的 section 头项。
2) 每个 section 在文件中占据一块连续的空间。
3) Section 之间不可重叠。
4) 目标文件可以有非活动空间,各种 headers 和 sections 没有覆盖目标文件的每一个字
节,这些非活动空间是没有定义的。
Section header 结构定义如下:
190 #define EI_NIDENT 16
191
192 typedef struct elf32_hdr{
193 unsigned char e_ident[EI_NIDENT];
194 Elf32_Half e_type; /* file type */
195 Elf32_Half e_machine; /* architecture */
196 Elf32_Word e_version;
197 Elf32_Addr e_entry; /* entry point */
198 Elf32_Off e_phoff; /* PH table offset */
199 Elf32_Off e_shoff; /* SH table offset */
200 Elf32_Word e_flags;
201 Elf32_Half e_ehsize; /* ELF header size in bytes */
202 Elf32_Half e_phentsize; /* PH size */
203 Elf32_Half e_phnum; /* PH number */
204 Elf32_Half e_shentsize; /* SH size */
205 Elf32_Half e_shnum; /* SH number */
206 Elf32_Half e_shstrndx; /* SH name string table index */
207 } Elf32_Ehdr;