2009-11-12 64 views

回答

1

x86 ABI类型支持共享库中的非PIC代码。正如之前指出的那样,这意味着通常共享的页面将不会被共享(因为ld.so需要在代码而非特殊位置(GOT)修补引用)。

但是建立这种方式的库可能会快一点,因为PIC代码通常比较慢。

amd64 ABI不支持。

2

PIC只是使加载器更简单,因为它只需修改代码中的几个全局地址。非PIC代码只包含更多这些地址,因此需要重定位的地址表更大。但是,在任何一种情况下,加载器都必须能够重新定位代码(例如,解析静态/全局变量和全部函数指针的地址)。

+0

必须?通常这根本不起作用 – 2009-11-12 10:02:06

+0

您总是会有一些符号可以通过它们的全局地址进行访问。这些地址必须始终重新定位。过去,这样的代码通常映射到一个固定的地址,但随着缓冲区溢出的出现,操作系统会将应用程序映射到不断变化的地址,从而使这些类型的攻击变得更加困难。 – 2009-11-12 11:20:45

相关问题