[發(fā)明專利]一種基于程序合成的C/C++程序缺陷自動修復(fù)方法有效
| 申請?zhí)枺?/td> | 201711394256.5 | 申請日: | 2017-12-21 |
| 公開(公告)號: | CN108170466B | 公開(公告)日: | 2019-09-20 |
| 發(fā)明(設(shè)計)人: | 王林章;陳天驕;李宣東 | 申請(專利權(quán))人: | 南京大學(xué) |
| 主分類號: | G06F8/72 | 分類號: | G06F8/72;G06F8/30 |
| 代理公司: | 南京知識律師事務(wù)所 32207 | 代理人: | 張?zhí)K沛 |
| 地址: | 210093 江*** | 國省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 程序合成 重寫規(guī)則 匹配 程序缺陷 語法樹 選項 規(guī)約 缺陷模式 自動修復(fù) 修復(fù) 邏輯表達式 使用約束 求解器 求解 子樹 替換 輸出 轉(zhuǎn)化 | ||
1.一種基于程序合成的C/C++程序缺陷自動修復(fù)方法,其特征在于,該方法包括以下步驟:
步驟1)輸入帶有缺陷的C/C++程序,該程序在測試集S1S2...Sn上發(fā)現(xiàn)缺陷,存在缺陷d1d2...dk;
步驟2)根據(jù)常見的C/C++程序缺陷和缺陷程序的類型,設(shè)定若干重寫規(guī)則,重寫規(guī)則包括缺陷模式和修復(fù)選項,其語法結(jié)構(gòu)為:expr->expr1|expr2…,箭頭前的表示缺陷模式,箭頭后的表示可能的修復(fù)選項,對于缺陷di,可能存在多種修復(fù)選項,分別記為ci1ci2...ciu;
步驟3)將重寫規(guī)則的缺陷模式與缺陷程序進行匹配,找出所有匹配的重寫規(guī)則;
步驟3.1)將帶有缺陷的C/C++程序和重寫規(guī)則解析為抽象語法樹;
步驟3.2)將缺陷程序的抽象語法樹中的每顆子樹與重寫規(guī)則的缺陷模式進行匹配;
步驟3.3)若存在部分重寫規(guī)則與缺陷程序匹配,則表明該缺陷程序存在可能的修復(fù)選項;
步驟3.4)若不存在任何重寫規(guī)則與缺陷程序匹配,則表明本方法無法修復(fù)該程序的缺陷;
步驟4)若存在匹配的重寫規(guī)則,則將匹配的語法樹子樹替換為選擇表達式;
步驟5)將該程序需要滿足的規(guī)約記為f,規(guī)約約定了程序在特定輸入下需要滿足的輸出,使用程序合成方法,根據(jù)該程序的規(guī)約f,得到每個選擇表達式的選項;
步驟6)若步驟5)有解,則代入每個選擇表達式的選項,得到修復(fù)后的程序。
2.根據(jù)權(quán)利要求1所述的基于程序合成的C/C++程序缺陷自動修復(fù)方法,其特征在于:所述步驟4)若存在匹配的重寫規(guī)則,則將匹配的語法樹子樹替換為選擇表達式,具體步驟如下:
步驟4.1)對于每一個重寫規(guī)則,將每個匹配的語法樹子樹替換為選擇表達式,原始語法樹子樹作為該選擇表達式的第一顆子樹;
步驟4.2)將該重寫規(guī)則的若干個修復(fù)選項作為選擇表達式的后續(xù)子樹;
步驟4.3)將每個選擇表達式分別記為e1e2…em,若ei取0則表明該選擇表達式的選項為第一顆子樹,即原始程序代碼,若ei取1則表明該選擇表達式的選項為第二顆子樹,即該缺陷模式的第一個修復(fù)選項ci1,依次類推。
3.根據(jù)權(quán)利要求1所述的基于程序合成的C/C++程序缺陷自動修復(fù)方法,其特征在于:所述步驟5)將該程序需要滿足的規(guī)約記為f,規(guī)約約定了程序在特定輸入下需要滿足的輸出,使用程序合成方法,根據(jù)該程序的規(guī)約f,得到每個選擇表達式的選項,具體步驟如下:
步驟5.1)將帶有選擇表達式的程序和該程序的規(guī)約轉(zhuǎn)化為邏輯表達式,格式如下:
S1S2...Sn為程序的測試用例,ei表示每個選擇表達式的選項,f′為帶選擇表達式的程序,f為該程序需要滿足的規(guī)約;
步驟5.2)使用約束求解器,在設(shè)定的時間t內(nèi),對上述的邏輯表達式進行求解,若對S1S2...Sn存在e1e2...en使得公式成立,則表明對于該程序的缺陷,本方法可以修復(fù),若無解或超時,則本方法無法修復(fù)該程序的缺陷。
4.根據(jù)權(quán)利要求1所述的基于程序合成的C/C++程序缺陷自動修復(fù)方法,其特征在于:所述步驟6)若步驟5)有解,則代入每個選擇表達式的選項,得到修復(fù)后的程序,具體步驟如下:
步驟6.1)對于每個選擇表達式,將選項表示的子樹代替選擇表達式,得到修復(fù)后的語法樹;
步驟6.2)將語法樹輸出為C/C++代碼,得到修復(fù)后的程序。
5.根據(jù)權(quán)利要求1至4之一所述的基于程序合成的C/C++程序缺陷自動修復(fù)方法,其特征在于:本方法在多項式的時間復(fù)雜度內(nèi)實現(xiàn)缺陷修復(fù)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于南京大學(xué),未經(jīng)南京大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201711394256.5/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 易失文件類分配的描述
- 用于在查詢時間清洗基于序列的數(shù)據(jù)的方法和系統(tǒng)
- 安全協(xié)議自動化檢測中的攻擊者模型構(gòu)建方法
- 基于SQL重寫的數(shù)據(jù)庫外部加解密系統(tǒng)及其使用方法
- 動態(tài)解析Web應(yīng)用的裝置和方法
- 將網(wǎng)絡(luò)資源請求變換成零費率網(wǎng)絡(luò)請求的技術(shù)
- 統(tǒng)一資源定位符重寫規(guī)則的生成方法及裝置
- 一種基于程序合成的C/C++程序缺陷自動修復(fù)方法
- 基于請求重寫的惡意文件防御方法、裝置及電子設(shè)備
- 一種基于Rewriter的MySQL數(shù)據(jù)庫的查詢優(yōu)化方法





