确定是否在x64或x86计算机上生成了进程转储

时间:2011-11-10 18:34:34

标签: windbg crash-dumps sos

如果我有一个进程转储文件,无论如何知道转储是在x64机器还是x86机器上生成的?

4 个答案:

答案 0 :(得分:3)

您可以使用.effmach命令来了解创建转储的体系结构。请注意,存在WOW64场景,其中转储arch是x64,但您实际上应该使用x86方法对其进行调试(请参阅!wow64exts.sw命令)。

0:000> .effmach Effective machine: x64 (AMD64)

答案 1 :(得分:2)

您可以查看环境变量。除其他外,命令!peb的输出包含环境变量列表。如果您看到定义了变量PROCESSOR_ARCHITEW6432ProgramW6432,则操作系统为64位。否则,它是32位。

答案 2 :(得分:2)

您可以使用随Windows调试工具提供的dumpchk.exe实用程序。只需将转储文件作为参数传递。

在生成的报告中,您将拥有操作系统版本和CPU风格,例如:

  

Windows 7版本7601(Service Pack 1)UP免费 x64

     

产品:WinNt,套件:SingleUserTS

答案 3 :(得分:1)

不幸的是,上述答案在大多数情况下都不起作用。

如果目标进程构建为x86二进制文件,Dupmchk.exe将为x86和x64操作系统说“x86兼容”。并且!peb命令还为我们大部分时间都使用的小型转储器提供了无用的“PEB NULL ...”。

您最好检查“Kernel32.dll”的完整路径,因为x64操作系统将加载“C:\ Windows \ Syswow64 \ Kernel32.dll”,而x86操作系统将加载普通“C” :\ Windows \ System32 \ Kernel32.dll“for x86可执行文件。加载的模块及其路径在minidump中重新编写,并由dumpchk.exe,windbg和Visual Studio轻松检查。