我试图弄清楚这两个部分之间的区别,这似乎是此question的重复,但是那里给出的答案并没有太多解释,所以我想更详细地简洁的解释。
拆分是出于安全原因。默认情况下(过去仅在-Wl,-z,relro
下使用),一旦动态加载程序在启动时(即在进入.got
函数之前)解析了所有数据重定位以防止main
,some types of exploits部分将重新映射为只读。由于.got.plt
,无法重新映射lazy symbol binding(除非使用了LD_BIND_NOW
或-Wl,-z,now
,在这种情况下,惰性绑定将关闭,并且.got.plt
也将被重新映射)。