Win32 32位进程加载64位kernel32.dll

时间:2017-12-15 09:51:45

标签: windows winapi dll 32bit-64bit

我遇到32位Win32控制台应用程序正在一台运行Windows Server 2012 R2 Standard的特定计算机上加载64位版本的kernel32.dll。

Dependency Walker与简单的 HelloWorld 应用程序一起使用,它看起来像这样:

Loading the 64-bit version of kernel32.dll

它在其他计算机上正确加载32位kernel32。

Loading the 32-bit version of kernel32.dll

PATH的值似乎不相同,所以至少包括不同机器上完全相同顺序的相关路径。

根据Microsoft的this page,DLL的搜索顺序为:

  1. 当前进程的可执行模块所在的目录。
  2. 当前目录。
  3. Windows系统目录。 GetSystemDirectory函数检索此目录的路径。
  4. Windows目录。 GetWindowsDirectory函数检索此目录的路径。
  5. PATH环境变量中列出的目录。
  6. 我猜这个特定的机器GetSystemDirectory会返回Windows/system32而不是Windows/SysWOW64的路径,或者从system32SysWOW64的路径返回32 -bit进程无法正常工作,但这些只是合格的猜测。

    知道是什么导致了这种行为吗?

1 个答案:

答案 0 :(得分:3)

Dependency Walker错误地报告了依赖关系。它的静态分析有时会在32位和64位模块之间混淆。通常,这是针对32位目标可执行文件运行64位版本的Dependency Walker,反之亦然。

请放心,您的32位程序正在加载32位版本的kernel32。