WinDbg 内核调试常用命令

原创 2013年12月05日 09:46:07

1. vertarget 命令可以显示目标系统的基本信息,如系统版本,计算机名,内核基质等


kd> vertarget
Windows 7 Kernel Version 7601 (Service Pack 1) MP (1 procs) Free x86 compatible
Built by: 7601.18113.x86fre.win7sp1_gdr.130318-1533
Machine Name:
Kernel base = 0x83e52000 PsLoadedModuleList = 0x83f9b4d0
Debug session time: Wed Dec  4 19:37:43.569 2013 (UTC + 8:00)
System Uptime: 0 days 1:06:58.651


从输出来看
目标机:  win7 sp1 
内核基质:0x83e52000
名字没有获取到


2. dg 命令主要显示【参数】的详细信息

kd> dg @fs
                                  P Si Gr Pr Lo
Sel    Base     Limit     Type    l ze an es ng Flags
---- -------- -------- ---------- - -- -- -- -- --------
0030 83f7cc00 00003748 DataRW    0 Bg By P  Nl 00000492




kd> dg @ds
                                  P Si Gr Pr Lo
Sel    Base     Limit     Type    l ze an es ng Flags
---- -------- -------- ---------- - -- -- -- -- --------
0023 00000000 ffffffff Data RW    3 Bg Pg P  Nl 00000cf2

范围大小


3.!cpuinfo 命令显示CPU信息


kd> !cpuinfo
CP  F/M/S Manufacturer  MHz PRCB Signature    MSR 8B Signature Features
 0  6,42,7 GenuineIntel 2793 0000001400000000  0000001400000000 a0cf3fff
                      Cached Update Signature 0000001400000000
                     Initial Update Signature 0000001400000000


4.!pcr命令显示处理器控制域信息(Processor Control Region),也就是KPCR结构信息,每个CPU对应一个KPCR结构,可以在命令中指定要显示的CPU序号,不能指定显示当前CPU的PCR信息。

kd> !pcr 0
KPCR for Processor 0 at 83f7cc00:
    Major 1 Minor 1
NtTib.ExceptionList: 83f790ac
   NtTib.StackBase: 00000000
  NtTib.StackLimit: 00000000
NtTib.SubSystemTib: 801e4000
     NtTib.Version: 001b4568
 NtTib.UserPointer: 00000001
     NtTib.SelfTib: 00000000


           SelfPcr: 83f7cc00
              Prcb: 83f7cd20
              Irql: 0000001f
               IRR: 00000000
               IDR: ffffffff
     InterruptMode: 00000000
               IDT: 80b95400
               GDT: 80b95000

               TSS: 801e4000


     CurrentThread: 83f86380
        NextThread: 00000000
        IdleThread: 83f86380
         DpcQueue: 

输出包括内核SEH链表头,TSS,IDT等重要信息。有了PCR地址,还可以通过dt命令直接显示KPCR机构,


kd> dt nt!_kpcr 83f7cc00
   +0x000 NtTib            : _NT_TIB
   +0x000 Used_ExceptionList : 0x83f790ac _EXCEPTION_REGISTRATION_RECORD
   +0x004 Used_StackBase   : (null) 
   +0x008 Spare2           : (null) 
   +0x00c TssCopy          : 0x801e4000 Void
   +0x010 ContextSwitches  : 0x1b4568
   +0x014 SetMemberCopy    : 1
   +0x018 Used_Self        : (null) 
   +0x01c SelfPcr          : 0x83f7cc00 _KPCR
   +0x020 Prcb             : 0x83f7cd20 _KPRCB
   +0x024 Irql             : 0x1f ''
   +0x028 IRR              : 0
   +0x02c IrrActive        : 0
   +0x030 IDR              : 0xffffffff
   +0x034 KdVersionBlock   : 0x83f7bc00 Void
   +0x038 IDT              : 0x80b95400 _KIDTENTRY
   +0x03c GDT              : 0x80b95000 _KGDTENTRY
   +0x040 TSS              : 0x801e4000 _KTSS
   +0x044 MajorVersion     : 1
   +0x046 MinorVersion     : 1
   +0x048 SetMember        : 1
   +0x04c StallScaleFactor : 0xae9
   +0x050 SpareUnused      : 0 ''
   +0x051 Number           : 0 ''
   +0x052 Spare0           : 0 ''
   +0x053 SecondLevelCacheAssociativity : 0 ''
   +0x054 VdmAlert         : 0
   +0x058 KernelReserved   : [14] 0
   +0x090 SecondLevelCacheSize : 0
   +0x094 HalReserved      : [16] 0x1000000
   +0x0d4 InterruptMode    : 0
   +0x0d8 Spare1           : 0 ''
   +0x0dc KernelReserved2  : [17] 0
   +0x120 PrcbData         : _KPRCB

5.!prcb命令显示KPRCB结构,里面包含了当前线程,IDLE线程等重要信息。同样可以用dt命令显示KPRCB详细信息


kd> !prcb
PRCB for Processor 0 at 83f7cd20:
Current IRQL -- 28
Threads--  Current 83f86380 Next 00000000 Idle 83f86380
Processor Index 0 Number (0, 0) GroupSetMember 1
Interrupt Count -- 0006cb65
Times -- Dpc    00000318 Interrupt 00000ac3 
         Kernel 0003fae6 User      000003cc 


6.!idt 命令显示终端服务表,可以指定中断显示,也可以显示全部
 !idt


Dumping IDT:


37: 83e35104 hal!PicSpuriousService37
51: 873882d8 serial!SerialCIsrSw (KINTERRUPT 87388280)
52: 87326058 pci!ExpressRootPortMessageRoutine (KINTERRUPT 87326000)
53: 8733ccd8 pci!ExpressRootPortMessageRoutine (KINTERRUPT 8733cc80)


7.!running 命令显示所有CPU上正在运行的线程信息,便于了解系统当前信息,蓝屏时可以看系统正在执行的什么线程
kd> !running


System Processors: (00000001) 
  Idle Processors: (00000001) 


All processors idle.


8. !process 显示进程信息,是个常用命令。可以显示EPROCESS,进程ID,句柄,页目录,线程列表


!process 0 0 显示进程列表,只显示每个进程的基本信息。
kd> !process 0 0 
**** NT ACTIVE PROCESS DUMP ****
PROCESS 865dc750  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 00185000  ObjectTable: 8a201ab0  HandleCount: 538.
    Image: System


!process XXXXXXX  显示指定进程的所有信息。!process XXXXXXX  0 则显示指定进程的基本信息


kd> !process 88699030 0
PROCESS 88699030  SessionId: 0  Cid: 0a40    Peb: 7ffd6000  ParentCid: 01f4
    DirBase: 3ed014c0  ObjectTable: 8ff68230  HandleCount: 360.
    Image: svchost.exe


9. .process 切换进程









                    

相关文章推荐

Windbg 内核调试 常用命令

Windbg 内核 驱动 调试 命令

WinDbg 内核调试指南

  • 2011年12月27日 15:10
  • 1.4MB
  • 下载

使用WinDbg内核调试

  • 2012年06月01日 18:08
  • 1.29MB
  • 下载

Windbg内核调试之一: Vista Boot Config设置

Windbg进行内核调试,需要一些基本的技巧和设置,在这个系列文章中,我将使用Windbg过程中所遇到的一些问题和经验记录下来,算是对Kernel调试的一个总结,同时也是学习Windows系统内核的另...

使用WinDbg内核调试

WINDOWS调试工具很强大,但是学习使用它们并不容易。特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器)。 本教程的目标是给予一个已经有其他调试工具使...

win7 64bit下windbg本地内核调试方法

  • 2017年08月19日 17:20
  • 159KB
  • 下载

使用WinDbg内核调试

  • 2010年10月20日 21:59
  • 1.22MB
  • 下载

使用WinDBG进行双机内核调试

由于我没有物理的两台机器,因此我这里使用虚拟机来进行讲解(虚拟机真是个好东西)。我将先讲述如何设置,然后以一个实例来讲述如何进行内核驱动的调试。 Target环境: Virtual PC 2004...
  • eqera
  • eqera
  • 2012年11月29日 12:27
  • 1889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinDbg 内核调试常用命令
举报原因:
原因补充:

(最多只允许输入30个字)