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