【发布时间】:2015-12-10 14:38:36
【问题描述】:
我正在尝试将共享对象的.rela.plt 重定位表移动到文件的末尾(因为我将来要添加新的重定位条目)。
首先,我阅读了.rela.plt 部分中的所有条目。原始部分位于偏移量0x528,而.rela.dyn 位于0x600。然后我把.rela.dyn的内容复制到文件末尾;到偏移量0xa528。我通过将0xa000 添加到sh_addr 和sh_offset 字段来更新.rela.dyn 的部分标题表条目。我用新地址更新了动态表中的DT_RELA 条目;最后我在程序头表的末尾添加了一个LOAD 段(权限为RWX)。
因此,重定位表中的R_X86_64_RELATIVE 条目被正确解析;但是动态链接器不会更新 GOT 中外部调用的地址,因此会导致分段错误。 这不会发生在 32 位共享对象中。
我错过了什么?
【问题讨论】:
标签: shared-libraries ld elf relocation