判断野指针,无效指针

 

该方法仅适用于windows

 

检查是否可读:IsBadReadPtr

 

检查是否可写:IsBadWritePtr

 

检测是否代码段:IsBadCodePtr

 

 函数原型:
  BOOL IsBadReadPtr(CONST VOID *lp,UINT_PTR ucb);
 参数:
  lp 表示要检查的内存指针
  ucb 要检查的内存块的大小
 返回:
  如果调用进程有权限访问该内存,返回0
   否则,返回非0
 
 说明:
 该函数检查调用进程是否有读取指定内存的内容的权限,微软提供的32位操作系统下的API

 

BOOL IsBadWritePtr( LPVOID lp, UINT ucb );
验证调用进程具有写访问权限的指定范围的内存。
    lp 第一个字节的内存块的指针。
    ucb 指定的大小,单位为字节的内存块。如果此参数为零,则返回值为零。
返回值
  零 调用进程在指定的内存范围具有写访问权限的所有字节。
  非零 调用进程在指定的内存范围内没有写访问权限的所有字节。

 

// 判断内存是否可读

 

 1 int is_invalid_ptr(void* memory_pointer)
 2 {
 3     if (NULL == memory_pointer) { 
 4         return 1; 
 5     }
 6 
 7     __try {
 8         return *((int*)memory_pointer) ? 0 : 0;
 9     }
10     __except (1) {
11         return 1; /** exception_code(); STATUS_ACCESS_VIOLATION*/
12     }
13 }

 参考: http://blog.chinaunix.net/uid-20680966-id-1896395.html

posted @ 2016-09-25 13:24  菩提树~今生  阅读(3412)  评论(0编辑  收藏  举报