Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linker 全局偏移表的作用是什么?_Linker_Loader - Fatal编程技术网

Linker 全局偏移表的作用是什么?

Linker 全局偏移表的作用是什么?,linker,loader,Linker,Loader,GOT工作的全部原因是代码段和数据段之间的偏移量是恒定的;因此,代码和数据段中某些给定数据之间的偏移量是恒定的 解决此问题,并确认对于库中定义的数据,GOT是冗余的 剩下的唯一可能性是库中使用的数据,但在别处定义 因此,GOT在共享库中的唯一点是能够通过将所有重定位定位到GOT中其他共享库中定义的符号来保持库的代码段位置独立吗 因此,GOT在共享库中的唯一点是能够通过将所有重定位定位到GOT中其他共享库中定义的符号来保持库的代码段位置独立吗 GOT是允许代码重新定位的机制,这一点是正确的 但是,

GOT工作的全部原因是代码段和数据段之间的偏移量是恒定的;因此,代码和数据段中某些给定数据之间的偏移量是恒定的

解决此问题,并确认对于库中定义的数据,GOT是冗余的

剩下的唯一可能性是库中使用的数据,但在别处定义

因此,GOT在共享库中的唯一点是能够通过将所有重定位定位到GOT中其他共享库中定义的符号来保持库的代码段位置独立吗

因此,GOT在共享库中的唯一点是能够通过将所有重定位定位到GOT中其他共享库中定义的符号来保持库的代码段位置独立吗

GOT是允许代码重新定位的机制,这一点是正确的

但是,它同时适用于传统的共享对象和程序。由于位置独立代码(PIE)(也称地址空间布局随机化),它适用于程序


一般来说,PIE是PIC的一个子集。也就是说,您可以使用
-fPIC
编译所有代码(程序和共享库)。然而,相反的情况是正确。不能使用
-fPIE
编译所有代码(程序和共享库)。共享库需要
-fPIC

您忽略了符号插入:。这使得在共享库中访问您自己的全局变量和函数的效率低下,除非您将它们的ELF可见性设置为
hidden