//
Create Time: 201606131327
Update Time: 201707101047
//
//elf文件头
typedef struct{
unsigned char e_ident[16]; 0x7f 'E' 'L' 'F'...
Elf32_Half e_type; //标识文件类型
Elf32_Half e_machine; //表明运行改程序需要的体系结构
Elf32_Word e_version; //标识文件的版本
Elf32_Addr e_entry; //程序的入口地址
Elf32_Off e_phoff; //Program Header table在文件中的偏移字节数
Elf32_Off e_shoff; //Section Header table在文件中的偏移字节数
Elf32_Word e_flags; //对IA32而言,此项为0
Elf32_Half e_ehsize; //Elf Header大小
Elf32_Half e_phentsize; //表示Program Header table每个条目的大小
Elf32_Half e_phnum; //表示Program Header table中有多少个条目
Elf32_Half e_shentsize; //表示Section Header table每个条目的大小
Elf32_Half e_shnum; //表示Section Header table中有多少个条目
Elf32_Half e_shstrndx; //包含节名称的字符串是第几个节
}Elf32_Ehdr;
//segment header
typedef struct {
Elf32_Word p_type; //当前Program header所描述的段的类型
Elf32_Off p_offset; //p_offset 段的第一个字节在文件中的偏移
Elf32_Addr p_vaddr; //p_vaddr 段的一个字节在内存中的虚拟地址
Elf32_Addr p_paddr; //p_paddr 在物理内存定位相关的系统中,此项是为物理地址保留。
Elf32_Word p_filesz; //段在文件中的长度
Elf32_Word p_memsz; //段在内存中的长度
Elf32_Word p_flags; //与段相关的标志
Elf32_Word p_align; //根据此项值来确定段在文件及内存中如何对齐
}Elf32_Phdr;
//section header
typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;