ELF文件头
#define EI_NIDENT 16 typedef struct{ unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; }Elf32_Ehdr;
表 2 e_ident[] 标识索引
名称 取值 目的和值
EI_MAG0 0 文件标识,0x7F
EI_MAG1 1 文件标识,E
EI_MAG2 2 文件标识,L
EI_MAG3 3 文件标识,F
EI_CLASS 4 文件类,0表示非法类别,ELFCLASSNONE;1表示32位,名称ELFCLASS32;2表示64位,名称ELFCLASS64
EI_DATA 5 数据编码,0表示非法数据编码,ELFDATANONE;1表示小端,ELFDATA2LSB;2表示大端,ELFDATA2MSB
EI_VERSION 6 文件版本,1表示当前版本
EI_PAD 7 补齐字节开始处,标记 e_ident 中未使用字节的开始。初始化为 0
EI_NIDENT 16 e_ident[]大小
e_type 目标文件的格式,1表示可重定位文件、2表示可执行文件、3表示共享库文件
e_machine:0=No machine、1=AT&T WE 32100、2=sparc、3=Intel 80386
e_version:0=Invalid version、1=Current version
e_entry 程序入口的虚拟地址。如果目标文件没有程序入口,可以为 0。
e_phoff 程序头部表格(Program Header Table)的偏移量(按字节计算)。如果文件没有程序头部表格,可以为 0。
e_shoff 节区头部表格(Section Header Table)的偏移量(按字节计算)。如果文件没有节区头部表格,可以为 0。
e_flags 保存与文件相关的,特定于处理器的标志。标志名称采用 EF_machine_flag的格式。
e_ehsize ELF 头部的大小(以字节计算)。
e_phentsize 程序头部表格的表项大小(按字节计算)。
e_phnum 程序头部表格的表项数目。可以为 0。
e_shentsize 节区头部表格的表项大小(按字节计算)
e_shnum 节区头部表格的表项数目。可以为 0。
e_shstrndx 节区头部表格中与节区名称字符串表相关的表项的索引。如果文件没有节区名称字符串表,此参数可以为 SHN_UNDEF。