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