【问题标题】:Delphi: Set ImageBase bigger than 32-bit (for 64-bit Windows application)Delphi:将 ImageBase 设置为大于 32 位(适用于 64 位 Windows 应用程序)
【发布时间】:2017-06-16 09:08:03
【问题描述】:

我一直在玩 Delphi 中的 {$IMAGEBASE} 指令,但我可以看到我只能输入低于 $FFFFFFFF(32 位)的值。

我正在编译为 x64,我需要设置大于 32 位的图像库,但 Delphi 忽略了我的 64 位 ImageBase 中较高的 32 位 DWORD。

有没有人设法将高于 $FFFFFFFF 的值设置为 Delphi 的 ImageBase?

我需要它,因为我需要在“高”ImageBase 中测试我的应用程序(由于一些钩子测试等)

谢谢!

【问题讨论】:

  • 如果您运行的是 Windows 7(或更早版本),您可以启用 nolowmem 启动选项,并让您的应用程序自动加载到超过 4 GB 边界的地址中。

标签: delphi winapi 64-bit


【解决方案1】:

Delphi 链接器不支持大型映像库,尽管有新的 PE 可选标头允许指定大型映像库值。

所以我认为在 Embarcadero 引入任何此类功能之前,您需要在构建可执行文件后使用第三方工具对其进行变基。例如 EDITBIN 与 MS 工具链中的 /REBASE 选项。

我采用了一个简单的 64 位 VCL 程序,用 XE7 构建,并像这样重新设置它:

editbin /rebase:base=0xffffff0000 Project1.exe

我使用 Process Hacker 确认图像库确实与指定的一样。

【讨论】:

  • 或使用link.exe /edit /rebase:base=* Project1.exe,因为editbin.exe <cmdline> 只需调用link.exe /edit <cmdline>,当然对于这个图像需要启用重定位,没有这个(relocs)rebase failed
猜你喜欢
  • 1970-01-01
  • 2013-09-11
  • 2016-02-22
  • 2014-12-15
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
相关资源
最近更新 更多