我想编译一个程序,这样当它加载到内存中时,它的所有部分都高于4G空间(我在x86_64机器上)。我尝试指定.text,.data和.bss部分,但似乎还不够。有没有方便的方法来做我想做的事情?感谢。
注意:http://sourceware.org/ml/binutils/2012-08/msg00480.html解决了我的问题。
答案 0 :(得分:0)
This thread解释了如何在4G虚拟空间之上移动64位二进制文件。简而言之,您需要添加-fPIE -pie
选项以告诉编译器和链接器您希望可以在任意虚拟地址加载可执行文件。 -pie
会要求链接器将您的目标文件链接到可以在4G虚拟地址上加载的库。默认库通常以-mcmodel=small
模式编译,无法在2G虚拟空间之上加载,有关详细信息,请参阅3.17.15 Intel 386 and AMD x86-64 Options。