簡體   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