今天給大家介紹一下C語言源碼二次釋放的危害是什么。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
在武清等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站制作、網站建設 網站設計制作按需開發網站,公司網站建設,企業網站建設,成都品牌網站建設,網絡營銷推廣,外貿網站建設,武清網站建設費用合理。
二次釋放簡單理解就是對同一個指針指向的內存釋放了兩次,針對C語言源代碼,對同一個指針進行兩次 free() 操作,可能導致二次釋放,本文3.1章節的缺陷代碼就是對這類情況的描述。在C++語言中,淺拷貝操作不當是導致二次釋放常見原因之一。如:調用一次賦值運算符或拷貝構造函數將會導致兩個對象的數據成員指向相同的動態內存。此時引用計數機制變得非常重要,當引用計數不當時,一個對象超出作用域時,析構函數將會釋放這兩個對象共享的內存。另一個對象中對應的數據成員將會指向已經釋放的內存地址,而當這個對象也超出作用域時,它的析構函數試圖再次釋放這塊內存,導致二次釋放問題。詳細請參見CWE ID 415: Double Free。
二次釋放內存可能導致應用程序崩潰、拒絕服務攻擊等問題,是 C/C++ 中常見的漏洞之一。2018年1月至11月,CVE中共有38條漏洞信息與其相關。部分漏洞如下:
CVE 編號 | 概述 |
---|---|
CVE-2018-18751 | GNU gettext 0.19.8 版本中的 read-catalog.c 文件的 ‘defaultaddmessage’ 函數存在二次釋放漏洞。 |
CVE-2018-17097 | Olli Parviainen SoundTouch 2.0 版本中的 WavFile.cpp 文件的 WavFileBase 類存在安全漏洞,遠程攻擊者可利用該漏洞造成拒絕服務(二次釋放)。 |
CVE-2018-16425 | OpenSC 0.19.0-rc1 之前版本中的 libopensc/pkcs15-sc-hsm.c 文件的 ‘scpkcs15emuschsminit’ 函數存在二次釋放漏洞。攻擊者可借助特制的智能卡利用該漏洞造成拒絕服務(應用程序崩潰)。 |
CVE-2018-16402 | elfutils 0.173 版本中的 libelf/elf_end.c 文件存在安全問題,遠程攻擊者可利用該漏洞造成拒絕服務(二次釋放和應用程序崩潰)。 |
示例源于Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE415_Double_Free__malloc_free_char_17.c。
在上述示例代碼中,在第32行使用 malloc()
進行內存分配,并在第36行使用 free()
對分配的內存進行了釋放,在第38行 for
循環語句中,又對已經釋放的內存 data
進行了一次釋放,導致二次釋放問題。
使用360代碼衛士對上述示例代碼進行檢測,可以檢出“二次釋放”缺陷,顯示等級為中。如圖1所示:
圖1:二次釋放檢測示例
在上述修復代碼中,Samate 給出的修復方式為: 在第32行使用 malloc()
進行內存分配,并在第36行處使用 free()
進行釋放,釋放后不在對該內存進行釋放操作。
使用360代碼衛士對修復后的代碼進行檢測,可以看到已不存在“二次釋放”缺陷。如圖2:
圖2:修復后檢測結果
4 、如何避免二次釋放
要避免二次釋放,需要注意以下幾點:
(1)野指針是導致二次釋放和釋放后使用的重要原因之一,消除野指針的有效方式是在釋放指針之后立即把它設置為
NULL
或者設置為指向另一個合法的對象。(2)針對 C++ 淺拷貝導致的二次釋放問題,始終執行深拷貝是不錯的解決方案。
(3)使用源代碼靜態分析工具,可以自動化的發現程序中可能存在的二次釋放問題。
以上就是C語言源碼二次釋放的危害是什么的全部內容了,更多與C語言源碼二次釋放的危害是什么相關的內容可以搜索創新互聯之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下創新互聯!
網站欄目:C語言源碼二次釋放的危害是什么
分享路徑:http://vcdvsql.cn/article38/gjodpp.html
成都網站建設公司_創新互聯,為您提供網站維護、營銷型網站建設、網站建設、標簽優化、網站改版、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯