内存可用性判断 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
最新文章
- shell脚本批量收集linux服务器的硬件信息快速实现
- C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】
- tab_切换
- Javascript DOM基础(二) childNodes、children
- Winfrom中ListBox绑定List数据源更新问题
- Activiti系列:如何让Activiti-Explorer使用sql server数据库
- thinkphp 调用系统的方法
- android shape详解
- Lombok(1.14.8) - @Getter, @Setter, @ToString, @EqualsAndHashCode &; @Data
- ACM中常用的C/C++函数
- Easyui + jQuery表单提交 给 Controller patr1
- 防止 XSS 攻击 解决方案
- 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案
- 用XAML做网页!!—终结篇
- Objective-C相关Category的收集
- [读书笔记] 一、Spring boot项目搭建与配置文件
- ajax请求获取实时数据
- iOS UITableView左滑操作功能的实现(iOS8-11)
- Win7 下安装ubuntu14.04双系统
- Python—元类