判斷野指針,無效指針


 

該方法僅適用於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM