2023年1月

.load, .loadby (Load Extension DLL)

简介

.load和.loadby命令将新的扩展DLL加载到调试器中。

使用形式

.loadDLLName

!DLLName.load

.loadbyDLLName ModuleName

参数

  • DLLName

指定要加载的调试器扩展DLL。如果使用.load命令,DLLName应包含完整路径。如果使用.loadby命令,DLLName应仅包含文件名。

  • ModuleName

指定与DLL name指定的扩展DLL位于同一目录中的模块的模块名。

支持环境

模式

用户模式下,内核模式

目标

实时、 崩溃转储

平台

全部

备注

使用.load命令时,必须指定完整路径。
使用.loadby命令时,不指定路径。相反,调试器会找到ModuleName参数指定的模块,确定该模块的路径,然后在调试器加载扩展DLL时使用该路径。如果调试器找不到模块或找不到扩展DLL,则会收到指定问题的错误消息。指定的模块和扩展DLL之间不必有任何关系。因此,使用.loadby命令只是避免键入长路径的一种方法。

在.load或.loadby命令完成后,您可以访问存储在加载的扩展名中的命令。
要加载扩展DLL,可以执行以下操作之一:

  • 使用 .load.loadby命令。

  • 通过发出完整执行扩展 !DLLName.ExtensionCommand语法。 如果尚未加载调试器DLLName.dll,它此时加载的 DLL。

!cppexr

简介

!cppexr显示C++异常记录的内容。

使用形式

!cppexrAddress

参数

  • Address
    指定要显示的C++异常记录的地址。

支持环境

Windows 2000

Ext .dll

Windows XP 和更高版本

Ext .dll

备注

! Cppexr扩展显示与目标遇到的C++异常有关的信息, 其中包括异常代码、异常的地址和异常标志。 此异常必须是 Msvcrt.lib 中定义的C++标准异常之一。

通常可以使用! 分析-v命令获取Address参数。! Cppexr扩展适用于确定C++异常类型。

 

!dlls

简介

!dlls扩展显示所有加载模块或指定线程或进程正在使用的所有模块的表条目。

使用形式

!dlls[Options][LoaderEntryAddress]

!dlls -h

参数

  • Options 指定输出的级别。
    此参数可以是下列值中的任意组合:

    -f
    显示文件标头。

    -s
    显示部分标头。

    -a
    显示完成模块信息。 (此选项相当于-f-s。)

    -c **** ModuleAddress
    显示包含的模块ModuleAddress

    -i
    对显示的初始化顺序进行排序。

    -l
    对显示按加载顺序进行排序。 默认值为这种情况。

    -m
    对显示的内存顺序进行排序。

    -v
    显示版本信息。 此信息将由每个模块的资源部分。

    -h
    显示此扩展中的一些帮助文本调试器命令窗口。

  • LoaderEntryAddress
    指定模块的加载程序条目的地址。 如果包括此参数时,调试器将显示仅此特定模块。

支持环境

Windows 2000

Kdextx86.dll Ntsdexts.dll

Windows XP 及更高版本

Exts.dll

备注

模块列表包括每个模块的所有入口点。!dlls扩展仅在实时调试中工作(不在崩溃转储分析中)。在内核模式下,此扩展显示当前进程上下文的模块。你不能使用!dlls与系统进程或空闲进程一起。

!handle

简介

!handle扩展显示有关目标系统中一个或所有进程拥有的一个或多个句柄的信息。

使用形式

  • 用户模式
    !handle[Handle [UMFlags [TypeName]]]
    !handle -?
  • 内核模式
    !handle[Handle [KMFlags [Process [TypeName]]]]

参数

  • Handle
    指定要显示的句柄的索引。如果Handle为-1或省略此参数,调试器将显示与当前进程关联的所有句柄的数据。如果句柄为0,调试器将显示所有句柄的数据。
  • UMFlags
    (仅限用户模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x1。)|
    位 0 (0x1)
    显示句柄类型信息。

    位 1 (0x2)
    显示基本句柄信息。

    位 2 (0x4)
    显示句柄名称信息。

    位 3 (0x8)
    显示特定于对象的句柄信息 (如果可用)。

  • KMFlags
    (仅限内核模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x3。)
    位 0 (0x1)
    显示基本句柄信息。

    位 1 (0x2)
    显示有关对象的信息。

    位 2 (0x4)
    显示可用的句柄项。 如果未设置此位并且省略了句柄或将其设置为零, 则显示的句柄列表不包含可用的句柄。 如果handle指定单个自由句柄, 则即使未设置此位, 也会显示该句柄。

    位 4 (0x10)
    显示来自内核句柄表而不是当前进程的句柄。

    位 5 (0x20)
    将句柄解释为线程 ID 或进程 ID, 并显示有关相应内核对象的信息。

  • Process
    (仅限内核模式)指定进程。您可以使用进程ID或进程对象的十六进制地址。此参数必须引用目标系统上当前正在运行的进程。如果此参数为-1或忽略此参数,则使用当前进程。如果此参数为0,则显示所有进程的句柄信息。
  • TypeName
    指定要检查的句柄的类型。 只显示匹配此类型的句柄。 TypeName区分大小写。 有效类型包括事件、节、文件、端口、目录、SymbolicLink、变化、Windowstation 时出错、信号量、密钥、令牌、进程、线程、桌面、IoCompletion、计时器、作业和 WaitablePort。
  • -?
    (仅用户模式)在调试器命令窗口中显示此扩展的一些帮助文本。

支持环境

Windows 2000

Kdextx86 Ntsdexts Uext. .dll

Windows XP 和更高版本

Kdexts Ntsdexts Uext. .dll

备注

你可以在用户模式和内核模式实时调试过程中使用!handle扩展。 你还可以在内核模式转储文件中使用此扩展。 但是, 你不能对用户模式转储文件使用此扩展, 除非你专门使用处理信息创建它们。 (可以使用dump/mh (创建转储文件) 命令创建此类转储文件。)在实时用户模式调试过程中, 可以使用closehandle (关闭句柄) 命令关闭一个或多个句柄。

0:000> !handle
Handle 4
  Type          Section
Handle 8
  Type          Event
Handle c
  Type          Event
Handle 10
  Type          Event
Handle 14
  Type          Directory
Handle 5c
  Type          File
6 Handles
Type            Count
Event           3
Section         1
File            1
Directory       1

以下命令显示有关句柄0x8 的详细信息

0:000> !handle 8 f
Handle 8
  Type          Event
  Attributes    0
  GrantedAccess 0x100003:
         Synch
         QueryState,ModifyState
  HandleCount   2
  PointerCount  3
  Name          <none>
  Object Specific Information
    Event Type Auto Reset
    Event is Waiting

以下示例是 ! handle的内核模式示例。 以下命令将列出所有句柄, 包括自由句柄。

kd> !handle 0 4
processor number 0
PROCESS 80559800  SessionId: 0  Cid: 0000    Peb: 00000000  ParentCid: 0000
    DirBase: 00039000  ObjectTable: e1000d60  TableSize: 380.
    Image: Idle

New version of handle table at e1002000 with 380 Entries in use

0000: free handle, Entry address e1002000, Next Entry fffffffe
0004: Object: 80ed5238  GrantedAccess: 001f0fff
0008: Object: 80ed46b8  GrantedAccess: 00000000
000c: Object: e1281d00  GrantedAccess: 000f003f
0010: Object: e1013658  GrantedAccess: 00000000
......
0168: Object: ffb6c748  GrantedAccess: 00000003 (Protected)
016c: Object: ff811f90  GrantedAccess: 0012008b
0170: free handle, Entry address e10022e0, Next Entry 00000458
0174: Object: 80dfd5c8  GrantedAccess: 001f01ff
......

以下命令显示有关内核句柄表中的句柄0x14 的详细信息。

kd> !handle 14 13
processor number 0
PROCESS 80559800  SessionId: 0  Cid: 0000    Peb: 00000000  ParentCid: 0000
    DirBase: 00039000  ObjectTable: e1000d60  TableSize: 380.
    Image: Idle

Kernel New version of handle table at e1002000 with 380 Entries in use
0014: Object: e12751d0  GrantedAccess: 0002001f
Object: e12751d0  Type: (80ec8db8) Key
    ObjectHeader: e12751b8
        HandleCount: 1  PointerCount: 1
        Directory Object: 00000000  Name: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\CONTROL\SESSION MANAGER\EXECUTIVE

以下命令显示有关所有进程中的 Section 对象的所有句柄的信息。

!handle 0 3 0 Section
...
PROCESS fffffa8004f48940
    SessionId: none  Cid: 0138    Peb: 7f6639bf000  ParentCid: 0004
    DirBase: 10cb74000  ObjectTable: fffff8a00066f700  HandleCount:  39.
    Image: smss.exe

Handle table at fffff8a00066f700 with 39 entries in use

0040: Object: fffff8a000633f00  GrantedAccess: 00000006 (Inherit) Entry: fffff8a000670100
Object: fffff8a000633f00  Type: (fffffa80035fef20) Section
    ObjectHeader: fffff8a000633ed0 (new version)
        HandleCount: 1  PointerCount: 262144

!htrace

简介

!htrace扩展显示一个或多个句柄的堆栈跟踪信息。

使用形式

  • 用户模式
    !htrace[Handle [Max_Traces]]
    !htrace -enable[Max_Traces]
    !htrace -snapshot
    !htrace -diff
    !htrace -disable
    !htrace -?
  • 内核模式
    !htrace[Handle [Process [Max_Traces]]]
  • !htrace -?

参数

  • Handle
    指定将显示其堆栈跟踪的句柄。如果Handle为0或省略,则将显示进程中所有句柄的堆栈跟踪。
  • Process
    (仅限内核模式)指定将显示其句柄的进程。如果进程为0或省略,则使用当前进程。在用户模式下,始终使用当前进程。
  • Max_Traces
    指定要显示的堆栈跟踪的最大数目。在用户模式下,如果省略此参数,则将显示目标进程的所有堆栈跟踪。
  • -enable
    (仅限用户模式)启用句柄跟踪,并通过-diff选项将句柄信息的第一个快照用作初始状态。
  • -snapshot
    (仅限用户模式)获取当前句柄信息的快照,以用作-diff选项的初始状态。
  • -diff
    (仅限用户模式)将当前句柄信息与上次获取的句柄信息快照进行比较。显示所有仍打开的句柄。
  • -disable
    (仅限用户模式;仅限Windows Server 2003及更高版本)禁用句柄跟踪。在WindowsXP中,只有终止目标进程才能禁用句柄跟踪。
  • -?
    在调试器命令窗口中显示此扩展的一些简短帮助文本。

支持环境

Windows 2000

不可用

Windows XP 和更高版本

Kdexts Ntsdexts

备注

启用句柄跟踪后,才能使用!htrace。启用句柄跟踪的一种方法是输入!htrace-enable命令。启用句柄跟踪时,每次进程打开句柄、关闭句柄或引用无效句柄时,都会保存堆栈跟踪信息。就是这个堆栈跟踪信息!htrace显示。还可以通过激活目标进程的应用程序验证器并选择Handles选项来启用句柄跟踪。

! htrace报告的某些跟踪可能来自不同的进程上下文。 在这种情况下, 返回地址在当前进程上下文中可能无法正确解析, 或可能解析为错误的符号。

下面的示例显示有关进程0x81400300 中的所有句柄的信息:

kd> !htrace 0 81400300
Process 0x81400300
ObjectTable 0xE10CCF60
## 

Handle 0x7CC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D

Handle 0x7CC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE23B2: KERNEL32!CreateSemaphoreA+0x66
0x010011C5: badhandle!main+0x45
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D

Handle 0x7DC - BAD REFERENCE:
0x8018F709: ntoskrnl!ExMapHandleToPointerEx+0xEA
0x801E10F2: ntoskrnl!ObReferenceObjectByHandle+0x12C
0x801902BE: ntoskrnl!NtSetEvent+0x6C
0x80154965: ntoskrnl!_KiSystemService+0xC4
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D

Handle 0x7DC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D

Handle 0x7DC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE265C: KERNEL32!CreateEventA+0x66
0x010011A0: badhandle!main+0x20
0x010012C1: badhandle!mainCRTStartup+0xE3
0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
## 

Parsed 0x6 stack traces.
Dumped 0x5 stack traces.