你的位置:首页 > 操作系统

[操作系统]ELF Format 笔记(三)—— Section Types


ELF 文件中会包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息。Elf32_Shdr 结构中有一个 sh_type 成员,用于指明 section 的类型。

SHT_NULL:无效的 section header,没有与之对应的 section,section header 中的其他成员也没有意义。

SHT_PROGBITS:很多 section 都属于该类型,比如:.text、.data、.got、.plt、.rodata、.interp 等等。

SHT_SYMTAB / SHT_DYNSYM:这两类 section 中存放符号表。SHT_DYNSYM 中含有动态链接的符号表。

SHT_STRTAB:存放字符串表,通常一个 ELF 文件中含有不止一个字符串表。比如:.shstrtab 是专门用于存放 section name 的字符串表。

SHT_RELA / SHT_REL:包含重定位表,通常该类型的 section 也不止一个,比如:.rel.plt、.rel.dyn。

SHT_HASH:存放与符号表对应的哈希表,用于根据指定的符号名快速定位到符号表中相应的符号。

SHT_DYNAMIC:包含动态连接信息,.dynamic 属于此类型。

SHT_NOTE:包含一些注释信息。

SHT_NOBITS:该 section 在文件中不占空间,典型的是 .bss。.bss 在内存中是存在的,存放那些未初始化的全局变量。

SHT_SHLIB、SHT_LOPROC / SHT_HIPROC、SHT_LOUSER / SHT_HIUSER:基本用不到,不用关心。