Debugging Tools for Windows

!pool

!pool扩展显示指定的内存池分配的信息,或者整个系统范围内内存池的分配信息。

语法

!pool [Address [Flags]] 

参数

Address
指定要显示的内存池入口。如果Address是-1,该命令显示进程中所有堆(all heaps in the process)的信息。如果Address为0或省略,命令显示进程堆(process heap)的信息。
Flags
指定显示的级别。可以是下面这些位值的任意组合,默认值为0:
Bit 0 (0x1)
显示内存池内容,而不仅仅是头部(pool header)。
Bit 1 (0x2)
不显示所有内存池的头信息,除了实际包含指定的Address的那个。
Bit 31 (0x80000000)
(Windows XP和之后) 不显示池类型(type)和标签(tag)。

DLL

Windows 2000 Kdextx86.dll
Windows XP和之后 Kdexts.dll

注释

在Windows XP和之后版本的Windows中,!pool扩展显示每个分配关联的内存池标签(pool tag)。还会显示该标签的所有者。显示是基于pooltag.txt文件的内容的。该文件位于Windwos调试工具包安装目录的triage子目录下。如果需要的话,可以通过编辑该文件来添加自己的项目相关的其他pool tag。

警告 如果在当前版本安装的目录上安装Windwos调试工具包的升级版本,则它会覆盖该目录中所有文件,包括pooltag.txt。如果改变或者替换了示例的pooltag.txt,则要将它先保存到其他目录中。重新安装调试器之后,可以再用保存的那个pooltag.txt来进行覆盖。

如果!pool扩展报告内存池破坏,应该使用!poolval来进行调查。

下面是一个例子。如果Address指定0xE1001050,则显示这个块中的所有内存池的头部,并且0xE1001050本身用星号(*)标记。

kd> !pool e1001050 
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
 e1001040 size:   10 previous size:   40  (Free)       Mm  
*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
 e1001070 size:   10 previous size:   10  (Allocated)  Symt
 e1001080 size:   40 previous size:   10  (Allocated)  ObDm
 e10010c0 size:   10 previous size:   40  (Allocated)  ObDi
.....

这个例子中,最右边的一列是pool tag。这一列左边显示这个pool是空闲的还是已分配的。

下面的命令显示内存池头部和内容(pool headers and pool contents):

kd> !pool e1001050 1
 e1001000 size:   40 previous size:    0  (Allocated)  MmDT
    e1001008  ffffffff 0057005c 004e0049 004f0044
    e1001018  ffffffff 0053005c 00730079 00650074

 e1001040 size:   10 previous size:   40  (Free)       Mm  
    e1001048  ffffffff e1007ba8 e1501a58 01028101
    e1001058  ffffffff 00000000 e1000240 01028101

*e1001050 size:   10 previous size:   10  (Allocated) *ObDi
    e1001058  ffffffff 00000000 e1000240 01028101
    e1001068  ffffffff 00000000 e10009c0 01028101

 e1001060 size:   10 previous size:   10  (Allocated)  ObDi
    e1001068  ffffffff 00000000 e10009c0 01028101
    e1001078  ffffffff 00000000 00000000 04028101

......

附加信息

关于内存池的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

Build machine: CAPEBUILD