Debugging 如何在64位WinDbg中转储32位结构?

Debugging 如何在64位WinDbg中转储32位结构?,debugging,struct,windbg,Debugging,Struct,Windbg,我正在使用64位WinDbg转储结构信息,并尝试转储32位结构信息 我启动WinDbg,选择文件>内核调试并启动本地会话。然后我转储一个结构: lkd> dt nt!_LIST_ENTRY +0x000 Flink : Ptr64 _LIST_ENTRY +0x008 Blink : Ptr64 _LIST_ENTRY 正如预期的那样,这显示了64位结构信息 我知道,只要为这些Windows版本加载正确的符号,我就可以调试远程系

我正在使用64位WinDbg转储结构信息,并尝试转储32位结构信息

我启动WinDbg,选择文件>内核调试并启动本地会话。然后我转储一个结构:

lkd> dt nt!_LIST_ENTRY
    +0x000 Flink            : Ptr64 _LIST_ENTRY
    +0x008 Blink            : Ptr64 _LIST_ENTRY
正如预期的那样,这显示了64位结构信息

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

它试图将
.effmach
设置为
x86
,正如所暗示的,但我仍然得到64位结构:

lkd> .effmach x86
Effective machine: x86 compatible (x86)
lkd:x86> .symfix
lkd:x86> .reload
Connected to Windows 7 7601 x64 target at (date), ptr64 TRUE
Loading Kernel Symbols
...............................................................
.................................................................
Loading User Symbols
..........................................
Loading unloaded module list
......
lkd> dt nt!_LIST_ENTRY
    +0x000 Flink            : Ptr64 _LIST_ENTRY
    +0x008 Blink            : Ptr64 _LIST_ENTRY`
如您所见,这不是32位的
\u LIST\u条目
结构,而是我们上面已经看到的64位结构

我的问题:在没有远程32位系统和32位崩溃转储的情况下,是否可以在64位WinDbg中转储32位结构信息?

您检查过这个吗

这可能会有帮助

编辑:添加更多细节

我同意snoone的说法,如果你正在调试一个64位内核。整个地址空间为64位。因此,所有内核模式结构将仅为64位

现在,我发布上述链接的原因是:如果您想调试64位机器上运行的32位应用程序[即WoW应用程序],那么除了您尝试的
.effmatch x86
之外,您还可以尝试另一个扩展。 那就是:
!wow64exts.sw


所以我想介绍wow64exts扩展,我发现它对在64位操作系统上处理32位内容时消除混乱非常有用

不,没有办法做你想做的事。Windows上x64上的内核模式代码始终为64位,并使用64位结构,因此不存在32位类型信息

为什么在内核调试期间需要这种结构?我认为您不会看到64位内核使用32位结构。用例是什么?目前,在我看来,这是一个XY问题。你到底想实现什么?是的,这很可能是一个XY问题。我的使用案例:我正在尝试查看不同Windows版本(从Windows XP到当前版本)的结构之间的差异。也许WinDbg不是合适的工具。你能详细说明一下吗,只发布链接答案并不是一个好的答案