Compiler construction 如何将整个映像移动到4G虚拟空间之上?

Compiler construction 如何将整个映像移动到4G虚拟空间之上?,compiler-construction,linker,Compiler Construction,Linker,我想编译一个程序,这样当它加载到内存中时,它的所有部分都在4G空间以上(我在x86_64机器上)。我试图指定.text、.data和.bss节,但似乎这还不够。有没有一个方便的方法来做我想做的事情?谢谢 注意:解决我的问题。说明如何在4G虚拟空间上移动64位二进制文件。简而言之,您需要添加-fPIE-pie选项,告诉编译器和链接器您想要的可执行文件可以在任意虚拟地址加载-pie将要求链接器将您的目标文件链接到可加载到4G虚拟加法器上的库。默认库通常在-mcmodel=small模式下编译,无法加

我想编译一个程序,这样当它加载到内存中时,它的所有部分都在4G空间以上(我在x86_64机器上)。我试图指定.text、.data和.bss节,但似乎这还不够。有没有一个方便的方法来做我想做的事情?谢谢


注意:解决我的问题。

说明如何在4G虚拟空间上移动64位二进制文件。简而言之,您需要添加
-fPIE-pie
选项,告诉编译器和链接器您想要的可执行文件可以在任意虚拟地址加载<代码>-pie将要求链接器将您的目标文件链接到可加载到4G虚拟加法器上的库。默认库通常在
-mcmodel=small
模式下编译,无法加载超过2G的虚拟空间,请参阅以获取更多详细信息。

您能否给出程序的用途?它是一种QEMU,加载来宾应用程序,然后运行它。我想为来宾应用程序留出空间(即4G以下的空间)。换句话说,我需要将QEMU映像移到4G以上。我认为您应该尽可能减少程序的内存使用。您还可以提供64位版本的程序,以便为来宾应用程序提供更多的虚拟内存。我想我找到了一个“gcc-Wl,-Ttext segment=0x200000”。祝您的程序好运!