linux二进制分析笔记-ELF程序头

版权声明:本文为博主原创文章,未经博主允许不得转载。个人博客:www.saoguang.top https://blog.csdn.net/u011580175/article/details/81506481

我的个人博客:www.saoguang.top

ELF程序头

  1. 作用:ELF程序头描述了磁盘上可执行文件的内存布局以及如何映射到内存中
  2. 位置:ELF头重的e_phoff(程序头表偏移)得到程序头表。
  3. 查看:查看ELF文件信息 $ readelf elf_file

PT_LOAD段

  1. 一个可执行文件,至少有一个PT_LOAD段
  2. 一个需要动态链接的ELF可执行文件,通常包含以下两个可装载的段
    1. 存放程序代码的text段。
    2. 存放全局变量和动态链接信息的data段。

PT_DYNAMIC(动态段)

  1. 内容包括
    • 运行时需要链接的共享库列表
    • 全局偏移表(GOT)的地址
    • 重定位条目的相关信息
    • 等等

PT_NOTE段

  1. 内容可能包括:供应商或者系统相关附加信息
    • 一致性的检查
    • 兼容性的检查
  2. 一般来说,没用,因为,并不是必需的

PT_INTERP段

  1. 存放,以null为终止符的字符串,指示动态链接器的位置,也即程序解释器的位置。
  2. 实例:
    readelf参数说明:
    -p --string-dump=<number|name> Dump the contents of section

PT_PHDR段

PT_PHDR段,存储了程序头表本身的位置和大小,Phdr表保存了,所有的段的描述信息,如下图。PHDR表
这里写图片描述

特殊的可加载内核模块(LKM)

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

猜你喜欢

转载自blog.csdn.net/u011580175/article/details/81506481