在64位应用程序中加载32位DLL库

问题描述 投票:0回答:4

有没有办法加载32位DLL库(与

LoadLibrary
具有相同用法的东西)我想与
GetProcAddress
一起使用该函数。

我看了WOW,但它似乎没有提供该功能。该功能应该存在,因为像 DependencyWalker 这样的工具能够读取 32 位 DLL 的符号,即使它是 64 位的。

dll 32bit-64bit loadlibrary getprocaddress
4个回答
64
投票

当您将 DLL 作为数据文件加载时,只能将 32 位 DLL 加载到 64 位进程中。您无法执行该代码。 (http://support.microsoft.com/kb/282423)

Microsoft 建议您使用进程间 COM 来将 32 位代码与 64 位应用程序结合使用。 这里有一篇文章解释了该过程。


8
投票

如果您只想从中获取资源,您可以作为数据文件加载:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE);

然后照常拨打

FindResource


4
投票

读取 32 位可执行文件和在 32 位可执行文件中执行代码之间存在差异。我不相信 Windows 提供任何功能来做到这一点。

您可能能够做到这一点的唯一方法是创建一个加载 dll 的 32 位进程,然后进行进程间通信以在两个进程之间传递结果。


0
投票

理论上我已经实现了一种方法。

https://www.codeproject.com/Articles/5336312/Load-a-x86-DLL-into-a-x64-Executable-Mission-Possi

它基于在长模式兼容性段上跳转。有关 x64 理论和细分的更多信息,请参阅我的 Intel Assembly Manual

代码这里演示了所有这些理论。

实际上,它还不能与 win32 Dll 一起工作。我还在努力。

© www.soinside.com 2019 - 2024. All rights reserved.