为什么Linux在x64中使用两个GOT部分? .GOT与.got.plt

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Linux在x64中使用两个GOT部分? .GOT与.got.plt相关的知识,希望对你有一定的参考价值。

我试图弄清楚这两个部分之间的区别,这似乎是此question的重复,但是那里给出的答案并没有太多解释,所以我想更详细地简洁的解释。

答案

拆分是出于安全原因。默认情况下(过去仅在-Wl,-z,relro下使用),一旦动态加载程序在启动时(即在进入.got函数之前)解析了所有数据重定位以防止mainsome types of exploits部分将重新映射为只读。由于.got.plt,无法重新映射lazy symbol binding(除非使用了LD_BIND_NOW-Wl,-z,now,在这种情况下,惰性绑定将关闭,并且.got.plt也将被重新映射)。

以上是关于为什么Linux在x64中使用两个GOT部分? .GOT与.got.plt的主要内容,如果未能解决你的问题,请参考以下文章

.got 和 .got.plt 部分有啥区别?

聊聊Linux动态链接中的PLT和GOT(3)——公共GOT表项

聊聊Linux动态链接中的PLT和GOT(2)——延迟重定位

Android 逆向函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

聊聊Linux动态链接中的PLT和GOT—— 穿针引线

CentOS-6.5(X64)使用yum安装LAMP环境