切换系统不起作用

时间:2017-06-01 22:53:41

标签: system windbg

我遇到以下情况:我正处于实时用户模式调试会话中,我想显示win32k!_W32Process结构。不幸的是,win32k是一个内核模式SYS文件,因此这些符号在用户模式会话中不可用。

我知道我总是可以将DLL,EXE或SYS作为转储文件加载,然后检查符号。通常我会通过File / Open Crash Dump来做到这一点。

这一次,我想向调试研讨会的参与者展示可以同时调试多个系统,所以我通过WinDbg的命令提示符打开了Win32K.sys:

0:003> |
.  0    id: 10fc    attach  name: [...]\NetHeaps.exe

0:003> .opendump C:\Windows\winsxs\[...]\win32k.sys
Loading Dump File [C:\Windows\winsxs\[...]\win32k.sys]
Opened 'C:\Windows\winsxs\[...]\win32k.sys'

||0:0:003>

我们现在可以看到,我们有两个系统,我目前正在使用实时调试系统:

||0:0:003> ||
.  0 Live user mode: <Local>
   1 Image file: C:\Windows\winsxs\[...]\win32k.sys

我以为我现在可以切换到另一个系统,但这不起作用:

||0:0:003> ||1s
              ^ Illegal debuggee error in '||1s'

我不会太担心,但在这种情况下找不到win32k的符号:

||0:0:003> .reload
Reloading current modules
...........................
||0:0:003> dt win32k!_W32Process
Symbol win32k!_W32Process not found.

1 个答案:

答案 0 :(得分:2)

问题不在||命令中,而是在.opendump命令中。

帮助说:

  

使用.opendump命令后,必须使用g(Go)命令完成转储文件的加载。

请注意,这也会运行您的实时流程。因此,首先冻结线程(~*f)并稍后解冻(~*u)。

之后,您可以切换系统并显示类型:

||1:1:004> ||
   0 Live user mode: <Local>
.  1 Image file: C:\Windows\winsxs\[...]\win32k.sys

||1:1:004> dt _W32Process
win32k!_W32PROCESS
   +0x000 Process          : Ptr64 _EPROCESS
   +0x008 RefCount         : Uint4B
   +0x00c W32PF_Flags      : Uint4B
[...]