整理32位elf格式中常见的重定位类型的含义与用法。

参考资料

  1. 32位elf格式中的10种重定位类型

  2. 通过elf各种重定位类型,理解不同场合的链接过程

  3. 表格整理

提出的所有内存地址都是在链接好的可执行文件中的已分配地址,如addr(.text)

R_386_32

公式:S+A

S:重定项中VALUE成员所指符号的内存地址

A:被重定位处原值,表示”引用符号的内存地址”与S的偏移

R_386_RELATIVE

公式:B+A

B:.so文件加载到内存中的基地址

A:被重定位处原值,表示引用符号在.so文件中的偏移

img

R_386_PC32

公式:S+A-P

S:重定项中VALUE成员所指符号的内存地址

A:被重定位处原值,表示”被重定位处”与”下一条指令”的偏移

P:被重定位处的内存地址

R_386_GOTPC

公式:GOT+A-P

GOT:运行时,.got段的结束地址

A:被重定位处原值,表示”被重定位处”在机器码中的偏移

P:被重定位处的内存地址

R_386_GOT32

公式:G

G:引用符号的地址指针,相对于GOT的偏移

R_386_GOLB_DAT

公式:S

S:重定项中VALUE成员所指符号的内存地址

img

R_386_GOTOFF

公式:S-GOT

S:重定项中VALUE成员所指符号的内存地址

GOT:运行时,.got段的结束地址

R_386_PLT32

公式:L+A-P

L:<重定项中VALUE成员所指符号@plt>的内存地址

A:被重定位处原值,表示”被重定位处”相对于”下一条指令”的偏移

P:被重定位处的内存地址

留言

⬆︎TOP