程序异常崩溃,多数是有内存访问异常引起。为定位崩溃位置通常考虑加强内存访问控制,如此有必要进行内存可用性判断,从《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

最新文章

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

热门文章

  1. 【t082】牛跑步
  2. 常用Java开发工具类
  3. ZOJ Monthly, June 2014 解题报告
  4. centos安装启动ssh服务
  5. Notepad++中删除连续的任意n行
  6. 把搜狗输入法词库导入Google拼音输入法
  7. Struts2——(3)ValueStack(值栈)
  8. Vue 兄弟组件之间传递数值
  9. Windows下如何采用微软的Caffe配置Faster R-CNN
  10. c语言学习笔记(13)——链表