Debugging 我可以使用WinDbg为其他平台转储结构吗?

Debugging 我可以使用WinDbg为其他平台转储结构吗?,debugging,struct,windbg,Debugging,Struct,Windbg,我正在使用WinDbg转储结构信息,例如: lkd>dtnt_列表项 +0x000 Flink:Ptr32\u列表\u条目 +0x004闪烁:Ptr32\u列表\u条目 上面的示例显示了32位版本的\u LIST\u条目结构。64位版本更大,在0x008处闪烁 我知道,只要为这些Windows版本加载正确的符号,我就可以调试远程系统或分析崩溃转储 我的问题:是否可以在不进行远程调试或分析崩溃转储的情况下转储不同Windows版本的结构?可以,只要符号正确,就可以转储不同Windows版本的结构

我正在使用WinDbg转储结构信息,例如:

lkd>dtnt_列表项
+0x000 Flink:Ptr32\u列表\u条目
+0x004闪烁:Ptr32\u列表\u条目

上面的示例显示了32位版本的
\u LIST\u条目
结构。64位版本更大,在
0x008
处闪烁

我知道,只要为这些Windows版本加载正确的符号,我就可以调试远程系统或分析崩溃转储


我的问题:是否可以在不进行远程调试或分析崩溃转储的情况下转储不同Windows版本的结构?

可以,只要符号正确,就可以转储不同Windows版本的结构

转储将包含必须与PDB匹配的符号所需的windows版本和签名

编辑


关于在32位操作系统上调试64位转储/进程的具体问题,看起来您需要在64位操作系统上使用64位WinDbg。

如果您有64位模块(例如ntoskrnl.exe),则可以通过“打开崩溃转储…”命令和转储信息加载它


另一种方法:如果您有64位模块的pdb文件,您可以使用pdbdump实用程序

您能解释一下我是如何做到的吗?我启动“内核调试”,选择
Local
,使用
.sympath
命令指向64位符号,但转储的结构仍然是32位的。您可以使用32位WinDbg或设置
.effmach x86
将其设置为32位,最好使用适当的版本。通过调用
.symfix;,可以指向web符号;。重新加载
这将确保符号正确无误我在32位Windows上。当我执行
.effmachamd64
,然后执行
.symfix
.reload
时,仍然会得到32位结构。我是否应该切换到64位系统来进行调试?您应该使用64位版本来进行调试,但我不确定您是否需要在64位计算机上进行调试,请参阅相关内容:@EdChum:要运行64位可执行文件,它必须是64位操作系统。没有64位应用程序在32位操作系统上运行(至少在编写本文时适用于Windows)。“没有远程调试或分析崩溃转储”,那么您的意思是在实时调试期间?我不认为这是可能的,但在分析转储文件时是可能的。酷,我不知道。那么,任何文件都可以作为“崩溃转储”打开吗?我不确定。可以打开所有PE文件。它们也像操作系统一样映射到地址空间。但是dbghelp.dll中有一个bug:数据部分没有映射,因此您无法看到全局可验证性的初始值。