You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows上准确判断进程架构?含32位ARM Win10场景

在32位ARM Windows 10中区分x86与ARM进程的方案

针对32位ARM Windows 10上无法通过IsWow64Process系列API、GetProcessInformation区分x86与ARM进程的问题,可通过读取进程PE头的Machine字段实现准确判断,该方法兼容Windows 10早期版本,具体实现步骤如下:

方法1:读取磁盘上的进程主模块文件

  • 获取进程主模块路径:通过OpenProcess拿到目标进程句柄后,调用GetModuleFileNameEx获取主模块的完整路径。
  • 创建文件映射:用CreateFile打开该路径对应的文件,再通过CreateFileMapping创建文件映射对象,最后调用MapViewOfFile获取映射视图的内存指针。
  • 解析PE头:
    1. 从映射指针中读取IMAGE_DOS_HEADER结构,通过其e_lfanew成员定位到IMAGE_NT_HEADERS结构的起始位置。
    2. 读取IMAGE_NT_HEADERS.FileHeader.Machine字段的值:
      • 若为IMAGE_FILE_MACHINE_I386(0x014C),则是x86架构进程
      • 若为IMAGE_FILE_MACHINE_ARM(0x01C0),则是32位ARM架构进程
  • 清理资源:依次调用UnmapViewOfFile、CloseHandle关闭映射视图、文件映射对象和文件句柄。

方法2:直接读取进程内存中的PE头

  • 获取模块基地址:调用GetModuleInformation(需包含psapi.h),传入进程句柄和NULL获取主模块的基地址(注意进程句柄需拥有PROCESS_QUERY_INFORMATION和PROCESS_VM_READ权限)。
  • 读取PE头数据:使用ReadProcessMemory从模块基地址开始,先读取IMAGE_DOS_HEADER,再根据e_lfanew读取IMAGE_NT_HEADERS,最终解析Machine字段判断架构。

这两种方法均不依赖Windows 10后期引入的API,能覆盖早期32位ARM系统的场景,且不受WOW层逻辑限制,可准确区分x86仿真进程与原生ARM进程。

内容的提问来源于stack exchange,提问作者j_kubik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:05:17