2010-10-21 70 views
2

假設x86 64和linux平臺。64位平臺上的ELF對象文件大小限制是什麼?

如果您查看ELF標頭,偏移量都是64位。

因此,通過重定位R_X86_64_64可以輕鬆創建大於4G的目標文件。這意味着一個靜態的.o文件和可執行文件可以像64位一樣大。

但是,對於像gcc這樣的共享庫,我們只有R_X86_64_PLT32重定位。這意味着創建大於4GB的共享庫是不可能的,對吧?

因此,如果我想構建一個巨大的程序,其中一個.o文件足夠大(> 4GB),唯一的選擇是靜態鏈接?

歡迎任何評論。

謝謝, LIMI

回答

2

x86-64 ABI used by Linux定義了一個「大模型」特異性避免這種尺寸限制,其包括64位的重定位類型的GOT和PLT。 (請參閱第4.4.2節中的表格以及3.5.5中的指令序列,它們顯示了它們如何使用。)

+0

非常感謝。 我讀了ABI,注意到gcc開始從4.3開始支持它。 我正在嘗試。 – limi 2010-10-22 00:02:41

相關問題