Debugging 我可以使用WinDbg为其他平台转储结构吗?
我正在使用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版本的结构
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:数据部分没有映射,因此您无法看到全局可验证性的初始值。