內存可用性判斷 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


免責聲明!

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



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