码迷,mamicode.com
首页 > 其他好文 > 详细

第14章 探索虚拟内存(2)

时间:2015-10-03 18:09:53      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

14.4 确定地址空间的状态

14.4.1 查询内存状态API 

(1)VirtualQuery(Ex)函数

参数

描述

HANDLE hProcess

要查询的另一个进程的句柄。(注意,这个参数只有VirtualQueryEx才有,VirtualQuery只能查本进程的信息)

LPCVOID pvAddress

需要查询的虚拟内存地址

PMEMORY_BASIC_INFORMATION pmbi

返回的信息被放入该指针指向的MEMORY_BASIC_INFORMATION结构体。

DWORD dwLength

上述结构体的大小,表示返回时复制到上述结构体中的字节数。

(2)MEMORY_BASIC_INFORMATION结构体

字段

描述

BaseAddress

这个值是VirtualQuery(Ex)第一个参数向下取整到页面的边界值

AllocationBase

标识出区域的基地址,该区域包含参数pvAddress所指向的地址

AllocationProtect

标识出在最开始预订区域时为该区域指定的保护属性

RegionSize

标识出区域的大小,以字节为单位。区域的起始地址为BaseAddress,区域中所有页面拥有相同的保护属性、状态及类型

State

标识出区域中页面的状态(MEM_FREE、MEM_RESERVE或MEM_COMMIT)

如果为MEM_FREE,则AllocationBase、AllocationProtect、Protect及Type成员都没有意义。

如果为MEM_RESERVE,那么Protect成员没有意义。

Protect

针对所有相邻页面(前提是其保护属性、状态和类型与其中包含 pvAddress参数中所指定地址的页面相同),标识出它们的保护属性(PAGE_*)

Type

标识出区域中页面的类型(MEM_IMAGE、MEM_MAPPED或MEM_PRIVATE)

14.4.2 自定义的VMQuery(Ex)函数——得到更完整的内存信息

(1)BOOL VMQuery(HANDLE hProcess,LPCVOID pvAddress,PVMQUERY pVMQ);

(2)VMQUERY结构体

字段

描述

备注

PVOID pvRgnBaseAddress

表示虚拟地址空间区域的起始地址,该区域包含了参数pvAddress所指定的地址

DWORD dwRgnProtection

表示在最开始预订地址空间区域时为该区域指定的保护属性(PAGE_*)

SIZE_T RgnSize

表示所预订区域的大小,以字节为单位

DWORD dwRgnStorage

表示用于区域中各块的物理存储器的类型。它可以是以下任一值:MEM_FREE、MEM_IMAGE、MEM_MAPPED或MEM_PRIVATE

DWORD dwRgnBlocks

表示区域中块的数量

DWORD dwRgnGuardBlks

表示区域中具有PAGE_GUARD保护属性标志的块的数量。通常这个值为0或1。如果为1,说明该区域是为了线程栈而预订的。

BOOL bRgnIsAStack

表示该区域是否包含线程栈。该值是通过近似猜测得到的,因为没有任何方法能百分百地肯定一个区域是否包含线程栈

PVOID pvBlkBaseAddress

表示块的起始地址,该块包含了参数pvAddress所指示的地址

DWORD dwBlkProtection

表示块的保护属性

SIZE_T BlkSize

表示块的大小,以字节为单位

DWORD dwBlkStorage

表示块的存储器类型。它可以是以下任一值:MEM_FREE、MEM_IMAGE、MEM_RESERVE、MEM_MAPPED或MEM_PRIVATE

【VMMap程序】显示虚拟内存映射情况

 

第14章 探索虚拟内存(2)

标签:

原文地址:http://www.cnblogs.com/5iedu/p/4853561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!