内存可用性判断 IsBadCodePtr IsBadReadPtr 等等

程序异常崩溃,多数是有内存访问异常引起。为定位崩溃位置通常考虑加强内存访问控制,如此有必要进行内存可用性判断,从《Windows核心编程》中看到内存指针的可用性判断方法,感觉还不错,此处记录下。

判断内存指针的可用性,是通过判断指针所指向的虚拟内存页面的状态和属性来实现的。Windows提供了相关的API。相同的功能也可以通过获取虚拟内存页面属性来判断。

1)IsBadCodePtr:

判断调用进程是否拥有对指定地址内存的读操作权限,函数原型如下:

BOOL WINAPI IsBadCodePtr(

__inFARPROC lpfn//指定的内存地址

);

返回值表示当前进程是否拥有对该地址内存的读取权限。

2)IsBadReadPtr:

判断调用进程是否拥有对指定地址段内存的读操作权限,函数原型如下:

BOOL WINAPI IsBadReadPtr(

__inconstVOID *lp,//指定起始内存地址

__inUINT_PTR ucb//从起始内存地址开始的内存块长度

);

返回值表示当前进程是否拥有对该段地址内存块的读取权限。

3)IsBadStringPtr:

判断调用进程是否拥有对指定字符串指针的读取权限,函数原型如下:

BOOL WINAPI IsBadStringPtr(

__inLPCTSTR lpsz,//指向字符串的指针

__inUINT_PTR ucchMax//读取字符串的最大长度

);

返回值表示当前进程是否拥有字符串指针指向的字符串的读取权限。

4)IsBadWritePtr:

判断调用进程是否拥有对指定地址段内存的写操作权限,函数原型如下:

BOOL WINAPI IsBadWritePtr(

__inLPVOID lp,//指向起始内存地址

__inUINT_PTR ucb//从起始内存地址开始的内存块长度

);

返回值表示当前进程是否拥有该段地址内存块的写入权限。

内存可用性判断

http://www.it610.com/article/2564887.htm

posted @ 2017-05-22 21:53  findumars  Views(6284)  Comments(0Edit  收藏  举报