zoukankan      html  css  js  c++  java
  • 内存可用性判断 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

  • 相关阅读:
    Linux下安装MySQL数据库(压缩包方式安装)
    使用Gitblit 在windows 上部署你的Git Server
    windows下使用docker的常用命令
    CentOS7安装Docker与使用篇
    linux安装redis
    Linux系统目录
    shiro之授权
    shiro之身份认证
    redis
    迅为4412uboot烧坏了报错问题
  • 原文地址:https://www.cnblogs.com/findumars/p/6891652.html
Copyright © 2011-2022 走看看