【发布时间】:2011-11-10 18:34:33
【问题描述】:
如果我有一个进程转储文件,是否知道转储是在 x64 机器还是 x86 机器上生成的?
【问题讨论】:
标签: windbg crash-dumps sos
如果我有一个进程转储文件,是否知道转储是在 x64 机器还是 x86 机器上生成的?
【问题讨论】:
标签: windbg crash-dumps sos
您可以查看环境变量。命令!peb 的输出包括环境变量列表。如果您看到变量 PROCESSOR_ARCHITEW6432 或 ProgramW6432 已定义,则操作系统为 64 位。否则,它是 32 位的。
【讨论】:
.dump /mp' or .dump /ma` 或.dump /mf 命令或使用ADPlus (support.microsoft.com/kb/q286350) 时,会添加PEB。
不幸的是,以上答案在大多数情况下都不起作用。
如果目标进程构建为 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 轻松检查。
【讨论】:
.dump /marR。
您可以使用 .effmach 命令了解创建转储的架构。请注意,在 WOW64 场景中,转储拱门是 x64,但您实际上应该使用 x86 方法对其进行调试(请参阅 !wow64exts.sw 命令)。
0:000> .effmach
Effective machine: x64 (AMD64)
【讨论】:
.effmach 不能用于找出转储的位数。它只能用于找出用于调试的当前位数。在 64 位转储上尝试 !sw,然后尝试 .effmach,它将不再显示正确的结果。
您可以使用 Windows 调试工具附带的 dumpchk.exe 实用程序。只需将转储文件作为参数传递。
在生成的报告中,您将拥有操作系统版本和 CPU 风格,例如:
Windows 7 版本 7601(Service Pack 1)免费升级版x64
产品:WinNt,套件:SingleUserTS
【讨论】: