我的个人博客:www.saoguang.top
- ELF程序头
- PT_LOAD段
- PT_DYNAMIC(动态段)
- PT_NOTE段
- PT_INTERP段
- PT_PHDR段
- 特殊的可加载内核模块(LKM)
ELF程序头
- 作用:ELF程序头描述了磁盘上可执行文件的内存布局以及如何映射到内存中。
- 位置:ELF头重的e_phoff(程序头表偏移)得到程序头表。
- 查看:查看ELF文件信息
$ readelf elf_file
PT_LOAD段
- 一个可执行文件,至少有一个PT_LOAD段
- 一个需要动态链接的ELF可执行文件,通常包含以下两个可装载的段
- 存放程序代码的text段。
- 存放全局变量和动态链接信息的data段。
PT_DYNAMIC(动态段)
- 内容包括
- 运行时需要链接的共享库列表
- 全局偏移表(GOT)的地址
- 重定位条目的相关信息
- 等等
PT_NOTE段
- 内容可能包括:供应商或者系统相关附加信息
- 一致性的检查
- 兼容性的检查
- 一般来说,没用,因为,并不是必需的。
PT_INTERP段
- 存放,以null为终止符的字符串,指示动态链接器的位置,也即程序解释器的位置。
-
实例:
readelf参数说明:
Dump the contents of section-p --string-dump=<number|name>
PT_PHDR段
PT_PHDR段,存储了程序头表本身的位置和大小,Phdr表保存了,所有的段的描述信息,如下图。PHDR表

特殊的可加载内核模块(LKM)
类型为ET_REL的ELF文件中不存在程序头(也就是段),例如,.o类型的文件会被链接器链接到可执行文件中,但是并不会被载入内存。但是又有一个特例,可加载内核模块(LKM),LKM是ET_REL类型的文件,但是,它会被直接加载进内核中并自动进行重定位。