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

时间:2014-04-02 14:01:05

标签: debugging struct windbg

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

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

lkd> dt nt!_LIST_ENTRY
    +0x000 Flink            : Ptr64 _LIST_ENTRY
    +0x008 Blink            : Ptr64 _LIST_ENTRY

正如所料,这显示了64位结构信息。

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

尝试将.effmach设置为x86,正如提示in this comment,但我仍然获得了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位_LIST_ENTRY结构,而是我们上面已经看到的64位结构。

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

2 个答案:

答案 0 :(得分:0)

您是否已查看此link

这可能有所帮助!

编辑:添加更多细节。

我同意snoone如果您正在调试64位内核。整个地址空间为64位。因此,所有内核模式结构只有64位。

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

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

答案 1 :(得分:0)

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