2009-11-12 59 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

相關問題