2017-06-01 45 views
0

我遇到了以下情况:我处于活动用户模式调试会话,我想显示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> 

我们现在可以看到,我们有2个系统,目前我的实时调试系统:

||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. 

回答

2

的问题是不是在||命令,它在.opendump命令。

帮助说:

使用.opendump命令后,必须使用克(去)命令来完成加载转储文件。

请注意,这也会运行您的实时进程。因此,首先冻结线程(~*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 
[...] 
+1

哇,这太可怕了。 – conio