重定位类型介绍
整理32位elf格式中常见的重定位类型的含义与用法。
参考资料
提出的所有内存地址都是在链接好的可执行文件中的已分配地址,如addr(.text)
R_386_32
公式:S+A
S:重定项中VALUE成员所指符号的内存地址
A:被重定位处原值,表示”引用符号的内存地址”与S的偏移
R_386_RELATIVE
公式:B+A
B:.so文件加载到内存中的基地址
A:被重定位处原值,表示引用符号在.so文件中的偏移
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成员所指符号的内存地址
R_386_GOTOFF
公式:S-GOT
S:重定项中VALUE成员所指符号的内存地址
GOT:运行时,.got段的结束地址
R_386_PLT32
公式:L+A-P
L:<重定项中VALUE成员所指符号@plt>的内存地址
A:被重定位处原值,表示”被重定位处”相对于”下一条指令”的偏移
P:被重定位处的内存地址