首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >移动ELF64重定位表

移动ELF64重定位表
EN

Stack Overflow用户
提问于 2015-12-10 14:38:36
回答 1查看 377关注 0票数 2

我试图将共享对象的.rela.plt重新定位表移到文件的末尾(因为将来我将添加新的重新定位条目)。

首先,我阅读了.rela.plt部分中的所有条目。原始部分位于偏移量0x528,而.rela.dyn位于0x600。然后,我在文件末尾复制.rela.dyn的内容;复制到偏移量0xa528。我通过向.rela.dyn字段和sh_offset字段添加0xa000来更新sh_addr的节头表条目。我用新地址更新动态表中的DT_RELA条目;最后,在程序头表的末尾添加一个LOAD段(具有权限RWX)。

因此,重新定位表中的R_X86_64_RELATIVE条目被正确解析;但是动态链接器不更新GOT中外部调用的地址,从而导致分段错误。在32位共享对象中没有发生这种情况。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 13:21:35

我通过在.rel.plt表后面添加.rel.dyn表来解决这个问题。也就是说,中间不应该有一个冗余字节;没有对齐填充,没有其他部分,没有任何东西。由于某些原因,动态加载程序希望重新定位段是连续的。在x64中,动态部分中的JMPREL条目似乎是多余的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34204642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档