ELF文件结构描述
文件头
查看文件头 $ readelf -h *.obj
Elf32_Ehdr
| 变量名 | 英文名 | 备注 |
|---|---|---|
| e_ident | Magic | ELF魔数 |
| Class | 文件机器字节长度 | |
| Data | 数据存储方式 | |
| Version | 版本 | |
| OS/ABI | 运行平台 | |
| ABI Version | ABI版本 | |
| e_type | Type | ELF文件类型(ELF重定位类型) |
| e_machine | Machine | ELF文件的CPU平台属性(硬件平台) |
| e_version | Version | ELF版本号(硬件平台版本) |
| e_entry | Entry point address | 入口地址 |
| e_phoff | Start of program headers | 程序头入口 |
| e_shoff | Start of section headers | 段表在文件中的偏移 |
| e_word | Flags | ELF标志位 |
| e_ehsize | Size of this header | ELF文件头本身的大小 |
| e_phentsize | Size of program headers | 程序头长度 |
| e_phnum | Number of program headers | 程序头数量 |
| e_shentsize | Size of section headers | 段表描述符的大小 |
| e_shnum | Number of section headers | 段表描述符数量 |
| e_shstrndx | Section header string table index | 段表字符串表所载的段在段表中的下标 |
段表
查看段表结构 $ readelf -S *.obj
段表的结构比较简单,它是一个以“Elf32_Shdr”结构体为元素的数组。数组元素的个数等于段的个数,每个结构体对应一个段。“Elf32_Shdr”又被称为段描述符。
Elf32_Shdr
| 变量名 | 英文名 | 备注 |
|---|---|---|
| sh_name | Section name | 段名 |
| sh_type | Section type | 段的类型 |
| sh_flags | Section flag | 段的标志位 |
| sh_addr | Section Address | 段虚拟地址 |
| sh_offset | Section Offset | 段偏移 |
| sh_size | Section Size | 段的长度 |
| sh_link和sh_info | Section Link and Section Information | 段链接信息 |
| sh_addralign | Section Address Alignment | 段地址对齐 |
| sh_entsize | Section Entry Size | 项的长度 |
| Name | sh_type | sh_flag | sh_link | sh_info |
|---|---|---|---|---|
| .dynamic | SHT_DYNAMIC | SHF_ALLOC + SHF_WRITE | 该段所使用的字符串表在段表中的下标 | 0 |
| .hash | SHT_HASH | SHF_ALLOC | 该段所使用的符号表在段表中的下标 | 0 |
| SHT_REL | 该段所使用的相应符号表在段表中的下标 | 该重定位表所作用的段在段表中的下标 | ||
| SHT_RELA | ||||
| .symtab | SHT_STMTAB | 同字符串表 | 操作系统相关的 | 操作系统相关的 |
| SHT_DYNSYM | ||||
| .bss | SHT_NOBITS | SHF_ALLOC + SHF_WRITE | SHN_UNDEF | 0 |
| .comment | SHT_PROGBITS | none | ||
| .data | SHF_ALLOC + SHF_WRITE | |||
| .data1 | SHF_ALLOC + SHF_WRITE | |||
| .debug | none | |||
| .line | none | |||
| .rodata | SHF_ALLOC | |||
| .rodata1 | SHF_ALLOC | |||
| .text | SHF_ALLOC + SHF_EXECINSTR | |||
| .note | SHT_NOTE | none | ||
| .shstrtab | SHT_STRTAB | none | ||
| .strtab | 如果该ELF文件中有可装载的段须要用到该字符串表,name该字符串表也将被装载到进程空间,则有SHF_ALLOC标志位 |

浙公网安备 33010602011771号