最近在學習並行程式設計時注意到了uaf(use-after-free)問題,引發uaf問題的原因一般是因為在釋放了某個指標指向的記憶體後,並沒有將該指標置空,從而可以通過該指標非法地修改記憶體。
以前因為一直都沒有寫過大型專案,也不曾特別關心安全問題,雖然知道在指標申請後手動置為null但一度以為在free()
之後該指標會被自動置為null或者廢置。(事實上在debug版本裡大部分編譯器確實會自動將指標置為0xdddddddd,但是在realse版本中則不會)
想要避免這個問題解決方式十分直觀,就是養成良好的使用指標的習慣,即:
1. 初始化時置 null
2. 釋放時置 null
對於釋放時的置null,有乙個常用技巧:即定義乙個巨集來釋放記憶體及將指標置null:
#define xfree(x) free(x); x = null;
// 在 c++ 中應使用 nullptr 指代空指標
// 一些平台上的 c/c++ 已經預先新增了 xfree 拓展,如 gnu 的
libiberty
xfree(p);
// 用函式實現,例如 github 上的 aosc-dev/anthon-starter #9:
static inline void *xfree(void *ptr)
q=xfree(q);
野指標問題
最近在看之前的 對之前的bug有些新的認識,這裡總結下,學疏才淺,跟大家分享下吧。首先是用到了乙個傳送函式 static int send fun uint16 t length,uint8 t data 需要根據不同的條件判斷傳送的資料 data 以下實現是錯誤的 int judge send f...
野指標問題
關於這一點本來是不想寫的,一直覺的是些旁枝末葉的東西,很容易就能掌握,或者說不會犯錯的地方,但這兩天敲 的時候就遇到了這樣的問題,或者說不容易犯錯的地方才最容易犯錯吧!下面切入正題 何為野指標,對乙個指向空位址的指標我們將其稱為野指標,即所指向的位址不能進行操作的指標 這兩天寫c 的時候就遇到了這個...
演算法筆記 野指標問題
野指標 乙個指標在free之後沒有被賦值成null。造成野指標的原因 在函式free p 中只是將p指標的值傳遞給了函式,僅僅是釋放了形參的值,實參的值並沒有改變,並且malloc函式在作業系統分配的時候是順序分配 比如釋放了的p原本使用的位址為2000,那麼下一次malloc分配的位址就是這個20...