Debugging Tools for Windows

!vadump

!vadump扩展命令显示所有的虚拟内存区域以及它们对应的保护信息。

语法

!vadump [-v

参数

-v
显示中还包含每个原始分配区域(original allocation region)的信息。由于每个区域中的不同地址在分配之后可能改变成了自己的保护属性(例如使用VirtualProtect),所以大区域的原始保护属性可能和内部的子区域不一样。

DLL

Windows 2000 Uext.dll
Windows XP和之后 Uext.dll

注释

下面是示例:

0:000> !vadump
BaseAddress:       00000000
RegionSize:        00010000
State:             00010000  MEM_FREE
Protect:           00000001  PAGE_NOACCESS

BaseAddress:       00010000
RegionSize:        00001000
State:             00001000  MEM_COMMIT
Protect:           00000004  PAGE_READWRITE
Type:              00020000  MEM_PRIVATE
.........

输出中,State行显示从BaseAddress 开始的内存范围的状态。可能的状态值有MEM_COMMIT、MEM_FREE和MEM_RESERVE。

Protect行显示内存区域的保护状态。可能的值有PAGE_NOACCESS、PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_WRITECOPY和PAGE_GUARD。

Type行显示内存种类。可能的值有MEM_IMAGE、MEM_MAPPED和MEM_PRIVATE。

下面是使用-v参数的示例:

0:000> !vadump -v
BaseAddress:       00000000
AllocationBase:    00000000
RegionSize:        00010000
State:             00010000  MEM_FREE
Protect:           00000001  PAGE_NOACCESS

BaseAddress:       00010000
AllocationBase:    00010000
AllocationProtect: 00000004  PAGE_READWRITE
RegionSize:        00001000
State:             00001000  MEM_COMMIT
Protect:           00000004  PAGE_READWRITE
Type:              00020000  MEM_PRIVATE
.........

使用-v时,AllocationProtect行显示整个区域被创建时的默认保护属性。Protect行显示指定地址处实际的保护属性。

附加信息

要查看单个虚拟地址的内存保护信息,可以使用!vprot。关于内存保护的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals

Build machine: CAPEBUILD