[發(fā)明專利]一種檢測(cè)C代碼空指針引用的方法及系統(tǒng)有效
| 申請(qǐng)?zhí)枺?/td> | 201410160140.5 | 申請(qǐng)日: | 2014-04-21 |
| 公開(公告)號(hào): | CN103955426B | 公開(公告)日: | 2017-08-29 |
| 發(fā)明(設(shè)計(jì))人: | 孫毓忠;陳英超;朱洋民 | 申請(qǐng)(專利權(quán))人: | 中國(guó)科學(xué)院計(jì)算技術(shù)研究所 |
| 主分類號(hào): | G06F11/36 | 分類號(hào): | G06F11/36 |
| 代理公司: | 北京律誠(chéng)同業(yè)知識(shí)產(chǎn)權(quán)代理有限公司11006 | 代理人: | 祁建國(guó),梁揮 |
| 地址: | 100190 北*** | 國(guó)省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 檢測(cè) 代碼 指針 引用 方法 系統(tǒng) | ||
技術(shù)領(lǐng)域
本發(fā)明屬于計(jì)算機(jī)信息安全領(lǐng)域中的程序代碼檢測(cè)領(lǐng)域,尤其涉及一種檢測(cè)C代碼中空指針引用的方法。
背景技術(shù)
C語言是大量計(jì)算機(jī)程序所采用的編程語言,在操作系統(tǒng)內(nèi)核、嵌入式系統(tǒng)、基礎(chǔ)程序、大型應(yīng)用軟件等領(lǐng)域都有大量采用C語言編寫的軟件,作為一門傳統(tǒng)的底層系統(tǒng)編程語言,C語言的歷史已超過40年,是當(dāng)前計(jì)算機(jī)系統(tǒng)中最重要的基礎(chǔ)語言之一,但由于C語言本身的特性,一方面允許程序員操作各類底層內(nèi)存對(duì)象(如指針等),另一方面也由此導(dǎo)致了大量與此相關(guān)的代碼缺陷,空指針引用就是其中比較嚴(yán)重的一類代碼缺陷,空指針引用是指程序中存在對(duì)值為NULL(空)的指針進(jìn)行引用的代碼,由于這類代碼往往只會(huì)在部分情況下被執(zhí)行,而且并非每次都會(huì)發(fā)生,因此具有很強(qiáng)的隱蔽性,而程序中一旦對(duì)空指針進(jìn)行引用,由于該操作違反了操作系統(tǒng)的內(nèi)存訪問控制,將立即導(dǎo)致程序發(fā)生內(nèi)存錯(cuò)誤并被操作系統(tǒng)強(qiáng)行終止,進(jìn)而導(dǎo)致用戶數(shù)據(jù)丟失,關(guān)鍵部件失效等致命后果。
當(dāng)前解決空指針引用的方法主要有靜態(tài)方法和動(dòng)態(tài)方法兩類。靜態(tài)方法主要是模型檢測(cè)技術(shù),即通過對(duì)待檢測(cè)代碼進(jìn)行建模規(guī)約后,針對(duì)相應(yīng)的安全屬性進(jìn)行驗(yàn)證的技術(shù),例如一種使用簡(jiǎn)單而不復(fù)雜的方法來偵測(cè)內(nèi)存訪問錯(cuò)誤,對(duì)于工業(yè)代碼和學(xué)生代碼都有一定的效果,但由于需要對(duì)大量的狀態(tài)進(jìn)行建模,存在狀態(tài)爆炸問題,其檢測(cè)效率較低、耗時(shí)多的問題;定理證明技術(shù),即通過對(duì)程序代碼的邏輯語義進(jìn)行形式化推理來驗(yàn)證相關(guān)屬性的技術(shù),例如一種基于證明技術(shù)對(duì)C程序進(jìn)行驗(yàn)證以排除空指針引用等缺陷的方法,但該定理證明技術(shù)需要用戶對(duì)目標(biāo)代碼具有相當(dāng)程度的理解以便應(yīng)用相關(guān)的定理策略,具有難以應(yīng)用、復(fù)雜性較高等缺點(diǎn),同時(shí)對(duì)于一些復(fù)雜的控制邏輯也無法做到完全自動(dòng)化證明;代碼分析技術(shù),即首先獲得源代碼的抽象語法樹,然后進(jìn)行一定的控制流、數(shù)據(jù)流分析,結(jié)合預(yù)先制定的缺陷規(guī)則庫(kù)進(jìn)行匹配的方法,動(dòng)態(tài)方法主要特點(diǎn)是通過代碼插樁、運(yùn)行時(shí)攔截、沙箱虛擬執(zhí)行等方法,在程序執(zhí)行的過程中動(dòng)態(tài)檢測(cè)可能存在的空指針引用缺陷,例如一種使用代碼漏洞模式匹配的方法來偵測(cè)java中代碼缺陷,雖然在一定程度上彌補(bǔ)了模型檢測(cè)的低效率和定理證明的難應(yīng)用問題,但仍然存在使用復(fù)雜耗時(shí)的缺點(diǎn)。
發(fā)明專利“一種充分檢測(cè)空指針引用缺陷的方法”公開了一種充分檢測(cè)空指針引用缺陷的方法,包括:基于抽象語法樹識(shí)別出被測(cè)應(yīng)用的全部可尋址表達(dá)式;根據(jù)控制流圖對(duì)被測(cè)應(yīng)用進(jìn)行保守的區(qū)間運(yùn)算與指針分析并根據(jù)區(qū)間運(yùn)算與指針分析的結(jié)果,生成函數(shù)摘要;根據(jù)所述函數(shù)摘要以及抽象語法樹識(shí)別出全部的指針引用以及被引用的指針,并對(duì)每個(gè)被引用的指針創(chuàng)建空指針引用缺陷狀態(tài)機(jī)實(shí)例;基于控制流圖運(yùn)行空指針引用缺陷狀態(tài)機(jī)實(shí)例,在控制流圖的每個(gè)節(jié)點(diǎn)上,根據(jù)區(qū)間運(yùn)算、指針分析的結(jié)果對(duì)每個(gè)缺陷狀態(tài)機(jī)實(shí)例進(jìn)行狀態(tài)遷移,進(jìn)行空指針引用檢測(cè)。采用該發(fā)明,能有效解決空指針引用缺陷的漏報(bào)問題,實(shí)現(xiàn)空指針引用缺陷檢測(cè)零漏報(bào)及低誤報(bào)。但是該發(fā)明通過基于區(qū)間運(yùn)算和狀態(tài)機(jī)建模分析的方法對(duì)源代碼進(jìn)行檢測(cè),這與本發(fā)明提出的插入動(dòng)態(tài)監(jiān)測(cè)代碼的方法完全不同,同時(shí)本發(fā)明也不需要對(duì)源代碼進(jìn)行區(qū)間分析,也不需要對(duì)目標(biāo)程序進(jìn)行缺陷狀態(tài)機(jī)建模等步驟。
發(fā)明專利“一種檢查源代碼中空指針的方法和計(jì)算機(jī)系統(tǒng)”公開了一種檢查源代碼中空指針的方法,包括:計(jì)算機(jī)系統(tǒng)構(gòu)造可引用變量類型字典,計(jì)算機(jī)系統(tǒng)接收掃描空指針的指令,格式化待檢查的源代碼;掃描待檢查源代碼的全局代碼區(qū)域,獲得與所述字典中變量聲明類型對(duì)應(yīng)的未初始化全局變量列表;掃描所述待檢查源代碼的方法區(qū)域,獲得與所述字典中變量聲明類型對(duì)應(yīng)的未初始化局部變量列表;根據(jù)未初始化全局變量列表,獲取方法下未初始化全局變量列表;掃描所述待檢查源代碼的方法區(qū)域,查找被調(diào)用的變量名,如果所述被調(diào)用的變量名在未初始化局部變量列表或方法下未初始化全局變量列表中,該查找到的被調(diào)用的變量名即為源代碼中的空指針。但是該發(fā)明采用直接掃描源代碼,通過一定的模式來分析源代碼中可能存在的空指針問題,這與本方法的插入動(dòng)態(tài)檢測(cè)代碼,同時(shí)編譯后進(jìn)行執(zhí)行時(shí)判斷執(zhí)行返回的結(jié)果來確定空指針錯(cuò)誤的方法完全不同,該發(fā)明只需要掃描源代碼而不需要編譯,本發(fā)明的檢測(cè)階段是在運(yùn)行時(shí)自動(dòng)完成,所采用技術(shù)方法存在明顯差異。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)不足,本發(fā)明提出一種新的檢測(cè)C代碼中空指針引用缺陷的方法。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種檢測(cè)C代碼空指針引用的方法,該方法包括:
步驟1,簡(jiǎn)化該C代碼,得到目標(biāo)代碼,根據(jù)該目標(biāo)代碼通過語義分析獲取該目標(biāo)代碼的語法樹結(jié)構(gòu);
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于中國(guó)科學(xué)院計(jì)算技術(shù)研究所,未經(jīng)中國(guó)科學(xué)院計(jì)算技術(shù)研究所許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410160140.5/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F11-00 錯(cuò)誤檢測(cè);錯(cuò)誤校正;監(jiān)控
G06F11-07 .響應(yīng)錯(cuò)誤的產(chǎn)生,例如,容錯(cuò)
G06F11-22 .在準(zhǔn)備運(yùn)算或者在空閑時(shí)間期間內(nèi),通過測(cè)試作故障硬件的檢測(cè)或定位
G06F11-28 .借助于檢驗(yàn)標(biāo)準(zhǔn)程序或通過處理作錯(cuò)誤檢測(cè)、錯(cuò)誤校正或監(jiān)控
G06F11-30 .監(jiān)控
G06F11-36 .通過軟件的測(cè)試或調(diào)試防止錯(cuò)誤
- 檢測(cè)裝置、檢測(cè)方法和檢測(cè)組件
- 檢測(cè)方法、檢測(cè)裝置和檢測(cè)系統(tǒng)
- 檢測(cè)裝置、檢測(cè)方法以及記錄介質(zhì)
- 檢測(cè)設(shè)備、檢測(cè)系統(tǒng)和檢測(cè)方法
- 檢測(cè)芯片、檢測(cè)設(shè)備、檢測(cè)系統(tǒng)和檢測(cè)方法
- 檢測(cè)裝置、檢測(cè)設(shè)備及檢測(cè)方法
- 檢測(cè)芯片、檢測(cè)設(shè)備、檢測(cè)系統(tǒng)
- 檢測(cè)組件、檢測(cè)裝置以及檢測(cè)系統(tǒng)
- 檢測(cè)裝置、檢測(cè)方法及檢測(cè)程序
- 檢測(cè)電路、檢測(cè)裝置及檢測(cè)系統(tǒng)
- 遙控器代碼格式結(jié)構(gòu)及其收發(fā)信方法及裝置
- 在虛擬機(jī)中驗(yàn)證代碼模塊的方法及裝置
- 一種用于代碼的管理方法及裝置
- 虛擬代碼提供系統(tǒng)、生成裝置、驗(yàn)證裝置、提供方法
- 一種自動(dòng)化代碼質(zhì)量檢查方法及系統(tǒng)
- 代碼掃描方法、裝置、計(jì)算設(shè)備及計(jì)算機(jī)存儲(chǔ)介質(zhì)
- 用于更新代碼的方法和裝置
- 前端代碼打包方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)
- 一種代碼審查服務(wù)同步方法、裝置及計(jì)算機(jī)設(shè)備
- 一種高效智能源代碼安全管理平臺(tái)
- 信息記錄/再現(xiàn)設(shè)備和信息記錄介質(zhì)
- 一種靈活使用弱引用緩存對(duì)象的方法
- 高效地標(biāo)記帶有大引用集的對(duì)象
- 引用檢查系統(tǒng)和引用檢查方法
- 一種支持大數(shù)據(jù)基礎(chǔ)檔案卸載的方法與裝置
- 專利被引用數(shù)量統(tǒng)計(jì)系統(tǒng)及其統(tǒng)計(jì)方法
- 信息系統(tǒng)中的主數(shù)據(jù)刪除方法、裝置和計(jì)算機(jī)設(shè)備
- 記錄引用信息、查詢引用路徑的方法、裝置
- 一種內(nèi)存管理方法及裝置
- 對(duì)象引用方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)





