Delphi: 将 ImageBase 设置为大于 32 位(用于 64 位 Windows 应用程序)

4

我一直在使用Delphi中的{$IMAGEBASE}指令,但我发现只能设置小于32位的值。

我正在编译x64程序,需要设置比32位更大的图像基址,但是Delphi会忽略64位ImageBase中高32位DWORD的值。

有人能够设置比$FFFFFFFF更大的ImageBase吗?

我需要这样做是因为我需要在“高”ImageBase下测试我的应用程序(由于某些钩子测试等)。

谢谢!


1
如果您正在运行Windows 7(或更早版本),您可以启用nolowmem引导选项,并使您的应用程序自动加载到4 GB边界以上的地址。 - IInspectable
1个回答

8
Delphi链接器不支持大的映像基址,尽管有新的PE可选头允许指定大的映像基址值。
因此,在Embarcadero引入任何这样的功能之前,您需要使用第三方工具在构建后重新定位可执行文件。例如,使用MS工具链中的EDITBIN/REBASE选项。
我拿了一个简单的64位VCL程序,用XE7构建,并像这样重新定位它:
editbin /rebase:base=0xffffff0000 Project1.exe

我使用Process Hacker确认了图像基址确实与指定的一致。

enter image description here


3
您可以使用 link.exe /edit /rebase:base=* Project1.exe 命令,或者使用 editbin.exe <cmdline> 命令,因为它实际上就是调用了 link.exe /edit <cmdline> 命令。当然,对于需要启用重定位的项目来说,必须进行重新定位,否则(重定位)将会失败。 - RbMm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接