gpt4 book ai didi

linux - 为什么共享库要用GOT(Global Offset Table)来实现?

转载 作者:太空狗 更新时间:2023-10-29 12:23:41 24 4
gpt4 key购买 nike

我查阅了大量关于 GOT、动态链接和共享库的文章。但是我还是不明白为什么共享库不能通过动态链接器直接修改“.text”段中“mov”指令的地址来“修复”符号重定位来实现?

最佳答案

这样效率会低很多。这是我想到的,可能还有更多:

  • 这打破了加载相同共享库的不同进程之间的代码共享
  • 通常会有很多调用需要更新(而不是只更新 GOT 中的单个地址)
  • 加载器需要将代码页重新映射为可写,然后再次将它们映射为只读;那是 2*num_pages 系统调用太慢了
  • 静态链接器需要在调用指令中保留最大字节数以适应最大可能的地址(x86_64 上为 8 个),这会增加代码大小

您还失去了惰性符号解析。

关于linux - 为什么共享库要用GOT(Global Offset Table)来实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com