ELF 文件格式

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。

原文地址:https://www.cnblogs.com/gaocan/p/5382785.html