【发布时间】:2015-02-11 12:03:45
【问题描述】:
GOT 工作的全部原因是代码和数据部分之间的偏移量是恒定的;因此,代码与数据部分中某些给定数据之间的偏移量是恒定的。
This SO question 解决了这个问题,并确认对于库中定义的数据,GOT 是冗余的。
剩下的唯一可能是在库中使用但在其他地方定义的数据。
因此,这是 GOT 在共享库中的唯一点,能够通过将所有重定位本地化到其他共享库中定义的符号来保持该库的代码段位置独立,在得了?
【问题讨论】:
-
您正在忽略符号插入:macieira.org/blog/2012/01/…。这使得在共享库中访问您自己的全局变量和函数效率低下,除非您将它们的 ELF 可见性设置为
hidden。