【问题标题】:Load a 16-bit DLL into a 32-bit Process on Windows 7 64-bit在 64 位 Windows 7 上将 16 位 DLL 加载到 32 位进程中
【发布时间】:2013-02-06 03:20:49
【问题描述】:

我编写了一个 32 位应用程序,它启动一个 16 位可执行文件,它加载一些 16 位 DLL 来执行应用程序的某些功能。它在 Windows 7 32 位上运行良好,但不能在 Windows 7 64 位上运行,因为该版本的操作系统不包含 NTVDM。

代码的 16 位部分非常广泛,移植到 32 位会非常昂贵。此外,它使用了一些来自不再经营的公司的第 3 方 16 位 API;因此,必须完全重新创建该代码,从而增加成本。

有没有办法直接从 32 位应用程序加载现有的 16 位 DLL,完全删除 16 位可执行文件?

我已经研究过 thunking,但它似乎在 Windows 7 中也不支持。

【问题讨论】:

  • 即使你可以加载它,你打算如何执行它? 16 位代码需要不同的处理器架构,并且不存在任何支持 DLL,即使存在,它们也会尝试与不存在的内核通信。
  • 如果程序很广泛,那么在重新编译为 32 位或 64 位代码时它会利用它,尤其是在寄存器数量翻倍的 64 位模式下。您应该寻找或编写一个替代 API,它可能比旧 API 更强大。只有在确实不可能的情况下才使用模拟器

标签: windows-7 windows-7-x64 32-bit 16-bit


【解决方案1】:

您必须使用模拟器或虚拟机。

或者,如果这不是一个选项,那么您可以自己编写一个原始模拟器,逐条指令读取机器代码并相应地修改假寄存器和内存,当程序向外调用时那么您将不得不生成响应。

【讨论】:

    【解决方案2】:

    没有。这在 Windows 中是不可能的。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2013-06-11
      • 2011-03-27
      • 2018-05-29
      • 2014-08-10
      • 2011-08-12
      • 2012-08-06
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多