一、文件头: sizeof(Elf32_Ehdr)=52
- e_type: 类型---可重定位文件.o、可执行文件、共享目标文件.so
- e_ehsize: 文件头大小---52
- e_machine: CPU平台属性,如Intel_x86;
- e_entry: 入口虚拟地址,但是可重定位文件没有;
- e_shoff: 段表偏移量, 即在ELF文件的位置;下面两个11*40=440表达段表长度
- e_shnum: 段表描述符数量,即段表中段的个数:11
- e_shentsize: 段表描述符大小,sizeof(Elf32_Shdr)=40
- e_shstrndx: 段表字符串表所在的段在段表中的下标;
二、段表: sizeof(Elf32_Shdr)=40
- sh_name: 段名,如.test/.data/.bss/.rodata/.comment, .rel.text/.rel.data, .symtab, .strtab/.shstrtab,
- sh_type: 类型---程序段、重定位表、符号表、字符串表
- sh_flags: 标志位---可写、可执行、分配空间
- sh_addr: 加载后在地址空间中的虚拟地址
- sh_offset: 段偏移量,即该段该文件中的地址!!!!!!!!!!!!!!!!!
- sh_size: 段大小
- sh_link: 符号表的下标
- sh_info: 作用于哪个段?
三、重定位表:sizeof(Elf32_Rel)=8
- r_offset:重定位入口的偏移,对于可重定位文件就是相对于段起始地址的偏移
- r_info: 重定位入口的符号和类型
四、ELF文件符号表: sizeo(Elf32_Sym)=?
- st_name: 符号名,即该符号名在字符串表的下标;
- st_size: 符号大小,若是数据则是数据类型的大小
- st_value: 符号值即地址---符号在段中的偏移量!!!!!!!!!!!!!!!!!!!!
- st_ndx: 符号所在的段在段表中的下标,或者SHN_UNDEF!!!!!!!!!!!!!!!!!!!
- st_info: 符号类型和绑定信息?
五、字符串表:符号名+段名
Linux的ELF文件
原文:https://www.cnblogs.com/bo1990/p/11380692.html