Windows桌面应用程序(1-3-3-2nd) WOW64实现细节

WOW64仿真器以用户模式运行。它提供32位版本的Ntdll.dll与处理器内核之间的接口,并拦截内核调用。 WOW64模拟器包含以下DLL:

  • Wow64.dll提供核心仿真基础结构和Ntoskrnl.exe入口点函数的thunk。
  • Wow64Win.dll为Win32k.sys入口点函数提供了thunk。
  • (仅限x64)Wow64Cpu.dll支持在x64上运行x86程序。
  • (仅限Intel Itanium)IA32Exec.bin包含x86软件模拟器。
  • (仅限Intel Itanium)Wowia32x.dll提供IA32Exec.bin和WOW64之间的接口。
  • (仅限ARM64)xtajit.dll包含x86软件模拟器。
  • (仅限ARM64)wowarmw.dll支持在ARM64上运行ARM32程序。

这些DLL以及64位版本的Ntdll.dll是唯一可以加载到32位进程中的64位二进制文​​件。在ARM上的Windows 10上,CHPE(编译混合可移植可执行文件)二进制文件也可以加载到x86 32位进程中。

在启动时,Wow64.dll加载x86版本的Ntdll.dll(或CHPE版本,如果启用)并运行其初始化代码,该代码加载所有必需的32位DLL。几乎所有32位DLL都是32位Windows二进制文件的未修改副本,但由于性能原因,有些是作为CHPE加载的。编写这些DLL中的一些在WOW64上的行为与在32位Windows上的行为不同,通常是因为它们与64位系统组件共享内存。系统保留超过32位限制的所有用户模式地址空间。有关更多信息,请参阅WOW64下的性能和内存消耗

不使用x86系统服务调用序列,而是重建进行系统调用的32位二进制文​​件以使用自定义调用序列。这个调用序列对于WOW64来说是很便宜的,因为它完全处于用户模式。检测到自定义调用序列时,WOW64 CPU将转换回本机64位模式并调用Wow64.dll。 Thunking在用户模式下完成,以减少对64位内核的影响,并降低可能导致内核模式崩溃,数据损坏或安全漏洞的thunk中的错误风险。 thunk从32位堆栈中提取参数,将它们扩展为64位,然后进行本机系统调用。

环境变量

当64位进程创建32位进程时,或者32位进程创建64位进程时,WOW64会为创建的进程设置环境变量,如下表所示。

进程 环境变量
64位进程 PROCESSOR_ARCHITECTURE=AMD64或PROCESSOR_ARCHITECTURE=IA64或PROCESSOR_ARCHITECTURE=ARM64
ProgramFiles=%ProgramFiles%
ProgramW6432=%ProgramFiles%
CommonProgramFiles=%CommonProgramFiles%
CommonProgramW6432=%CommonProgramFiles%
Windows Server 2008, Windows Vista, Windows Server 2003 和 Windows XP:
从Windows 7和Windows Server 2008 R2开始添加ProgramW6432和CommonProgramW6432环境变量。
32-bit process PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=%PROCESSOR_ARCHITECTURE%
ProgramFiles=%ProgramFiles(x86)%
ProgramW6432=%ProgramFiles%
CommonProgramFiles=%CommonProgramFiles(x86)%
CommonProgramW6432=%CommonProgramFiles%

Global Hooks

如果满足以下条件,SetWindowsHookEx函数可用于将DLL注入另一个进程:

  • 32位DLL只能注入32位进程,而64位DLL只能注入64位进程。 无法将32位DLL注入64位进程,反之亦然。
  • 32位和64位DLL必须具有不同的名称。
  • DLL和进程的体系结构必须匹配。 例如,您不能将32位x86 DLL注入32位ARM进程。

有关更多信息,请参阅SetWindowsHookEx

请注意,可以在安装挂钩的线程上调用WH_MOUSEWH_KEYBOARDWH_JOURNAL*WH_SHELL和低级挂钩,而不是处理挂钩的线程。 对于这些挂钩,如果32位挂钩位于挂钩链中的64位挂钩之前,则可能会调用32位和64位挂钩。 有关更多信息,请参阅使用挂钩


原文链接:WOW64 Implementation Details

猜你喜欢

转载自blog.csdn.net/qq_37422196/article/details/82828746
今日推荐