您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了【缺陷周話】第31期:錯(cuò)誤的內(nèi)存釋放的相關(guān)知識點(diǎn),內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價(jià)值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學(xué)習(xí)“【缺陷周話】第31期:錯(cuò)誤的內(nèi)存釋放”的知識吧。
C語言中常見的內(nèi)存申請函數(shù)包括malloc()
、 realloc()
、 calloc()
,它們雖然功能不同,但都對應(yīng)同一個(gè)內(nèi)存釋放函數(shù) free()
,C++中對內(nèi)存的申請和釋放采用new/delete、new []/delete[] 方式。不管是 C 語言還是 C++ 語言,當(dāng)編寫源代碼時(shí)要根據(jù)內(nèi)存申請的方法不同來對應(yīng)地選擇內(nèi)存釋放方法,避免使用錯(cuò)誤的內(nèi)存釋放。例如:混合使用C/C++的內(nèi)存申請/釋放,或混合使用標(biāo)量和矢量的內(nèi)存申請/釋放。
使用錯(cuò)誤的內(nèi)存釋放方法,將會導(dǎo)致非預(yù)期的程序行為,甚至可能導(dǎo)致程序崩潰。在《effective C++(第二版)》條目5“對應(yīng)的 new 和 delete 要采用相同形式”中指出:“如果錯(cuò)誤地釋放對象中的元素,可能造成整個(gè)對象、甚至整個(gè)堆上的內(nèi)存結(jié)構(gòu)都發(fā)生損壞,從而發(fā)生內(nèi)存泄漏,甚至導(dǎo)致程序崩潰”。
CVE中也有一些與之相關(guān)的漏洞信息,從2018年1月至2019年4月,CVE中就有3條相關(guān)漏洞信息。漏洞信息如下:
CVE | 漏洞概況 |
---|---|
CVE-2018-14948 | dilawar sound2017-11-27 及之前版本中的 wav-file.cc文件存在錯(cuò)誤的內(nèi)存釋放方法漏洞 (new[]/delete)。 |
CVE-2018-14947 | PDF2JSON 0.69 版本中的 XmlFonts.cc 文件的‘XmlFontAccu::CSStyle’函數(shù)存在錯(cuò)誤的內(nèi)存釋放漏洞(new[]/delete)。 |
CVE-2018-14946 | PDF2JSON 0.69 版本中的 ImgOutputDev.cc 文件的 HtmlString 類存在錯(cuò)誤的內(nèi)存方法漏洞 (malloc/delete)。 |
示例源于 Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp。
在上述示例代碼中,第31行使用 new[]
創(chuàng)建對象數(shù)組,在第34行使用 delete
進(jìn)行釋放,由于在釋放對象數(shù)組時(shí),沒有使用 new[]
對應(yīng)的 delete[]
,因此存在“錯(cuò)誤的內(nèi)存釋放方法”問題。
使用代碼衛(wèi)士對上述示例代碼進(jìn)行檢測,可以檢出“錯(cuò)誤的內(nèi)存釋放方法”缺陷,顯示等級為中。如圖1所示:
圖1:錯(cuò)誤的內(nèi)存釋放方法的檢測示例
在上述修復(fù)代碼中,Samate 給出的修復(fù)方式為:在第31行通過 new[]
創(chuàng)建對象數(shù)組,并在第33行使用 delete[]
進(jìn)行釋放。從而避免了錯(cuò)誤的內(nèi)存釋放方法。
使用代碼衛(wèi)士對修復(fù)后的代碼進(jìn)行檢測,可以看到已不存在“錯(cuò)誤的內(nèi)存釋放方法”缺陷。如圖2:
圖2:修復(fù)后檢測結(jié)果
要避免錯(cuò)誤的內(nèi)存釋放方法,需要注意以下幾點(diǎn):
(1)在進(jìn)行內(nèi)存釋放時(shí),明確內(nèi)存申請使用的方法,避免由于程序結(jié)構(gòu)復(fù)雜、人員疏忽而導(dǎo)致使用了錯(cuò)誤的釋放方法。
(2)使用源代碼靜態(tài)分析工具,可以有效對該類問題進(jìn)行檢測。
關(guān)于“【缺陷周話】第31期:錯(cuò)誤的內(nèi)存釋放”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網(wǎng)站!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。