WinDbg 内核调试常用命令
阅读原文时间:2021年04月20日阅读:1

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 切换进程
**