Windows Win32 32位进程加载64位内核32.dll
我发现32位Win32控制台应用程序正在一台运行Windows Server 2012 R2标准的特定计算机上加载64位版本的kernel32.dll 与一个简单的HelloWorld应用程序一起使用,如下所示: 它在其他机器上正确加载32位内核32Windows Win32 32位进程加载64位内核32.dll,windows,winapi,dll,32bit-64bit,Windows,Winapi,Dll,32bit 64bit,我发现32位Win32控制台应用程序正在一台运行Windows Server 2012 R2标准的特定计算机上加载64位版本的kernel32.dll 与一个简单的HelloWorld应用程序一起使用,如下所示: 它在其他机器上正确加载32位内核32 PATH的值似乎不相同,因此至少在不同的机器上以完全相同的顺序包含相关路径 根据Microsoft提供的信息,DLL的搜索顺序为: 当前进程的可执行模块所在的目录 当前目录 Windows系统目录。GetSystemDirectory函数检索此
PATH
的值似乎不相同,因此至少在不同的机器上以完全相同的顺序包含相关路径
根据Microsoft提供的信息,DLL的搜索顺序为:
GetSystemDirectory
函数检索此目录的路径GetWindowsDirectory
函数检索此目录的路径PATH
环境变量中列出的目录GetSystemDirectory
返回到Windows/system32
的路径,而不是Windows/SysWOW64
,或者32位进程从system32
到SysWOW64
的映射工作不正常,但这些只是合格的猜测
知道是什么导致了这种行为吗?依赖项Walker错误地报告了依赖项。它的静态分析有时会混淆32位和64位模块。通常,当您针对32位目标可执行文件运行64位版本的Dependency Walker时,会出现这种情况,反之亦然
请放心,您的32位程序正在加载32位版本的kernel32。这是Dependency Walker唯一的错误,仅此而已。32位应用程序从不通过静态导入加载64位版本的kernel32.dll。路径/GetSystemDirectory-在这里根本不相关,因为始终存在
\KnownDlls32\kernel32.dll
节。它将被用于依赖项Walker上次可靠工作的时间是在Windows Vista上。准备好在任何以Windows 7开始的操作系统上看到Dependency Walker提供的混淆/误导性信息。诊断DLL问题的一个更好的方法是。尴尬。你说得对。:-)我会尽快接受答案。