ELF Format 笔记(十四)—— 段内容

时间:2024-01-17 20:27:32

ilocker:关注 Android 安全(新手) QQ: 2597294287

一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的,linker 在加载程序时没有用到节信息。所以对于一个 so 文件,修改 ELF Header 中和节有关的成员 (e_shoff、e_shentsize、e_shnum) 不会影响程序运行。

文本段 (也叫代码段) 包含只读指令和数据,通常包含如下这些节:

ELF Format 笔记(十四)—— 段内容

通常 android so 的第一个 LOAD 段就是文本段:

ELF Format 笔记(十四)—— 段内容

数据段包含可写的数据和指令,通常包括如下这些节:

ELF Format 笔记(十四)—— 段内容

通常 android so 的第二个 LOAD 段就是数据段:

ELF Format 笔记(十四)—— 段内容

.got 和 .plt 节保存的信息用于支援“位置无关代码”,在动态链接的过程中会修改 .got 节。

.bss 节的类型是 SHT_NOBITS,表示在文件中不占空间。但 .bss 在段的内存映像中是占用空间的,通常位于段的末尾,用于存放未初始化的全局变量,所以数据段的 p_memsz 会比 p_filesz 大一些。