如果我有一个进程转储文件,是否知道转储是在 x64 机器还是 x86 机器上生成的?
4 回答
您可以查看环境变量。command 的输出!peb
,除其他外,包含环境变量列表。如果您看到变量PROCESSOR_ARCHITEW6432
或ProgramW6432
已定义,则操作系统为 64 位。否则,它是 32 位的。
不幸的是,以上答案在大多数情况下都不起作用。
如果目标进程构建为 x86 二进制文件,则 Dupmchk.exe 将对 x86 和 x64 操作系统显示“x86 兼容”。而且 !peb 命令还为我们大部分时间使用的小型转储提供了无用的“PEB NULL ...”。
您最好检查“Kernel32.dll”的完整路径,因为 x64 操作系统将加载“C:\Windows\Syswow64\Kernel32.dll”,而 x86 操作系统将加载普通的“C:\Windows\System32\Kernel32.dll”对于 x86 可执行文件。加载的模块及其路径在 minidump 中重新记录,并且可以通过 dumpchk.exe、windbg 和 Visual Studio 轻松检查。
您可以使用 .effmach 命令了解创建转储的架构。请注意,在 WOW64 场景中,转储架构是 x64,但您实际上应该使用 x86 方法对其进行调试(请参阅 !wow64exts.sw 命令)。
0:000> .effmach
Effective machine: x64 (AMD64)
您可以使用 Windows 调试工具附带的 dumpchk.exe 实用程序。只需将转储文件作为参数传递。
在生成的报告中,您将拥有操作系统版本和 CPU 风格,例如:
Windows 7 版本 7601 (Service Pack 1) 升级免费x64
产品:WinNt,套件:SingleUserTS