[發明專利]一種重構CoSy中間表示的緩沖區溢出檢測方法有效
| 申請號: | 201210077106.2 | 申請日: | 2012-03-22 |
| 公開(公告)號: | CN102662834A | 公開(公告)日: | 2012-09-12 |
| 發明(設計)人: | 張梅娟;阮園;黃嵩人;于宗光 | 申請(專利權)人: | 中國電子科技集團公司第五十八研究所 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F9/45 |
| 代理公司: | 無錫市大為專利商標事務所 32104 | 代理人: | 殷紅梅 |
| 地址: | 214035 江*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 cosy 中間 表示 緩沖區 溢出 檢測 方法 | ||
1.一種重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,包括以下步驟:
a、CoSy編譯器分析掃描源程序,生成中間表示文檔CCMIR;
b、重構CCMIR文本,并為每個局部變量增加安全屬性,用于對緩沖區溢出進行判定;
c、對重構后的CCMIR進行緩沖區溢出的判定。
2.根據權利要求1所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,步驟a中編譯器對源程序進行詞法分析和語法分析,生成文本格式的中間表示文檔CCMIR。
3.根據權利要求1所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,所述步驟b包括:
b1.?定義DTD規則,將CCMIR文本轉化為XML文本存儲;
b2.?利用解析工具重新建立CCMIR文檔,并在重構的過程中對每個非靜態局部變量增加安全屬性,用來對緩沖區溢出進行判斷;
b3.?在重構的過程中去掉與分析程序流和數據流無關的信息。
4.根據權利要求3所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,所述步驟b1將CCMIR文本分為四類,用于定義DTD規則:
第一類、CCMIR的標識位:每遇到一個標識位bbx,建立一個結點元素node與之對應,將結點的標識屬性值記錄為x;
第二類、變量聲明:為每一個變量建立結點元素node的子元素variable,variable有四個屬性,分別是:變量名稱、變量類型、變量的大小、變量存儲類別。
5.所述變量的存儲類別分為靜態存儲區和動態存儲區;若該變量是結構體或聯合體變量,則為其每個成員變量建立屬性;
第三類、記錄中的表達式:為每個表達式建立結點元素node的子元素expression,expression有兩個屬性,分別是:表達式類型和具體的表達式內容,所示表達式類型用來區分一般表達式和函數調用;
第四類、記錄中的跳轉語句:跳轉語句包含goto語句和if語句;為跳轉語句建立邊元素edge,在邊元素中建立四個子元素,分別是:from元素記錄起始節點、to_l元素記錄左子樹節點、to_r元素記錄右子樹節點、if_condition元素記錄跳轉條件,如果不存在if語句,則if_condition值為1。
6.根據權利要求4所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,步驟b2利用XML文本解析器解析XML文本,重新建立CCMIR,步驟為:
b21.?依次讀入XML文本的元素;
b22.?判斷讀入的是結點元素還是邊元素;
b23.?若讀入的是結點元素,則根據其變量類型屬性建立相應的樹節點,讀子元素及其屬性,判斷是否需要給該變量增加安全屬性;
b24.?若讀入的是邊元素,就在from、to_l和to_r標識的節點之間建立復雜關系。
7.根據權利要求5所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,步驟b23所述的安全屬性的增加方法是:若子元素為variable,讀該子元素的變量存儲類別屬性,若所述變量存儲類別屬性為動態存儲區,則為該變量增加整數區間對,即安全屬性;若該變量是結構體或聯合體變量,則為該變量的每個成員添加安全屬性。
8.根據權利要求5所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,步驟b23所述的安全屬性包括:一個整數區間對,該區間對表示對應變量的初始分配區間alloc和實際長度區間len,初始分配區間alloc表示為:alloc(v)=[v_alloc_lower,?v_alloc_upper];實際長度區間len表示為:len(v)=[v_len_lower,?v_len_upper];?v_alloc_upper,v_len_upper和v_alloc_lower,?v_len_lower分別表示初始分配區間上限、實際長度區間上限,和初始分配區間下限、實際長度區間下限。
9.根據權利要求7所述的重構CoSy中間表示的緩沖區溢出檢測方法,其特征在于,步驟c將與緩沖區相關的待分析源程序語句與函數調用抽象為對局部變量屬性信息的操作,即對初始分配區間alloc和實際長度區間len進行更新;
判斷每個緩沖區的狀態:
c1)?若v_len_upper≤v_alloc_lower,則判斷該緩沖區不會溢出;
c2)?若v_alloc_upper<v_len_lower,則肯定會發生緩沖區溢出;
c3)?若以上兩者都不滿足,則可能會發生緩沖區溢出;
對c2和c3的情況做出報警提示。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國電子科技集團公司第五十八研究所,未經中國電子科技集團公司第五十八研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210077106.2/1.html,轉載請聲明來源鉆瓜專利網。





