繁体   English   中英

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

[英]Win32 32-bit process loads 64-bit kernel32.dll

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

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

加载64位版本的kernel32.dll

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

加载32位版本的kernel32.dll

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

根据Microsoft的这个页面 ,DLL的搜索顺序是:

  1. 当前进程的可执行模块所在的目录。
  2. 当前目录。
  3. Windows系统目录。 GetSystemDirectory函数检索此目录的路径。
  4. Windows目录。 GetWindowsDirectory函数检索此目录的路径。
  5. PATH环境变量中列出的目录。

我猜测在这个特定的机器上GetSystemDirectory返回Windows/system32而不是Windows/SysWOW64的路径,或者从32位进程的system32SysWOW64的映射不能正常工作,但这些只是合格的猜测。

知道造成这种行为的原因是什么吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM