mgd*_*mgd 4 windows dll winapi 32bit-64bit
我遇到 32 位 Win32 控制台应用程序正在一台运行 Windows Server 2012 R2 标准的特定机器上加载 64 位版本的 kernel32.dll。
在一个简单的HelloWorld应用程序中使用Dependency Walker,它看起来像这样:
它在其他机器上正确加载 32 位 kernel32。
的值PATH似乎不相同,因此至少在不同的机器上以完全相同的顺序包含相关路径。
根据微软的这个页面,DLL 的搜索顺序是:
GetSystemDirectory函数检索此目录的路径。GetWindowsDirectory函数检索此目录的路径。PATH环境变量中列出的目录。我猜测在这台特定的机器上GetSystemDirectory返回路径到Windows/system32而不是32 位进程的Windows/SysWOW64从system32到的映射SysWOW64不能正常工作,但这些只是合格的猜测。
知道是什么导致了这种行为?
Dependency Walker 错误地报告了依赖关系。它的静态分析有时会混淆 32 位和 64 位模块。通常这是当您针对 32 位目标可执行文件运行 64 位版本的 Dependency Walker 时,反之亦然。
请放心,您的 32 位程序正在加载 32 位版本的 kernel32。