如果我有一个进程转储文件,无论如何知道转储是在x64机器还是x86机器上生成的?
答案 0 :(得分:3)
您可以使用.effmach命令来了解创建转储的体系结构。请注意,存在WOW64场景,其中转储arch是x64,但您实际上应该使用x86方法对其进行调试(请参阅!wow64exts.sw命令)。
0:000> .effmach
Effective machine: x64 (AMD64)
答案 1 :(得分:2)
您可以查看环境变量。除其他外,命令!peb
的输出包含环境变量列表。如果您看到定义了变量PROCESSOR_ARCHITEW6432
或ProgramW6432
,则操作系统为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轻松检查。