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