[發明專利]一種檢測C代碼空指針引用的方法及系統有效
| 申請號: | 201410160140.5 | 申請日: | 2014-04-21 |
| 公開(公告)號: | CN103955426B | 公開(公告)日: | 2017-08-29 |
| 發明(設計)人: | 孫毓忠;陳英超;朱洋民 | 申請(專利權)人: | 中國科學院計算技術研究所 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 北京律誠同業知識產權代理有限公司11006 | 代理人: | 祁建國,梁揮 |
| 地址: | 100190 北*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 檢測 代碼 指針 引用 方法 系統 | ||
1.一種檢測C代碼空指針引用的方法,其特征在于,包括:
步驟1,簡化該C代碼,得到目標代碼,根據該目標代碼通過語義分析獲取該目標代碼的語法樹結構,其中該步驟1還包括,將該C代碼中的判斷語句統一為if else語句,將循環語句統一為while語句;
步驟2,獲取待檢測的函數,遍歷該語法樹結構,查找與該函數相對應的語法樹結構,遍歷該函數的語法樹結構,在判斷語句或循環語句的節點之前插入動態檢測過程的語法樹結構,得到新語法樹結構;
步驟3,根據該新語法樹結構,得到最終代碼,編譯并執行該最終代碼,若該最終代碼執行異常,則輸出該空指針的位置;
步驟4,根據步驟1-3生成檢測代碼,并將該檢測代碼嵌入待檢測的C代碼中;
其中步驟2中該動態檢測過程的語法樹結構,用于使后續該判斷語句或該循環語句中的條件表達式產生真、假兩種約束條件,并具體采用窮舉法或調用Z3定理證明器分別為該兩種約束條件賦值,生成相應真、假兩種賦值。
2.如權利要求1所述的檢測C代碼空指針引用的方法,其特征在于,該動態檢測過程包括生成未使用賦值集合,其中該賦值集合中的值使該判斷語句或循環語句產生真、假兩種賦值結果。
3.如權利要求2所述的檢測C代碼空指針引用的方法,其特征在于,還包括,將該值賦予該判斷語句或循環語句中條件語句的變量,將該值存入已使用賦值集合,同時將該未使用賦值集合中的該值刪除。
4.如權利要求3所述的檢測C代碼空指針引用的方法,其特征在于,還包括若該最終代碼執行異常,則輸出該值,并將該已使用賦值集合中的該值刪除,遍歷該未使用賦值結合。
5.一種檢測C代碼空指針引用的系統,其特征在于,包括:
生成語法樹結構模塊,用于簡化該C代碼,得到目標代碼,根據該目標代碼通過語義分析獲取該目標代碼的語法樹結構,所述生成語法樹結構模塊還包括簡化代碼模塊,用于將該C代碼中的判斷語句統一為if else語句,將循環語句統一為while語句;
檢測模塊,用于獲取待檢測的函數,遍歷該語法樹結構,查找與該函數相對應的語法樹結構,遍歷該函數的語法樹結構,在判斷語句或循環語句的節點之前插入動態檢測過程的語法樹結構,得到新語法樹結構;
輸出模塊,用于根據該新語法樹結構,得到最終代碼,編譯并執行該最終代碼,若該最終代碼執行異常,則輸出該空指針的位置;
其中,根據生成語法樹結構模塊、檢測模塊、輸出模塊生成檢測代碼,并將該檢測代碼嵌入待檢測的C代碼中,檢測模塊中該動態檢測過程的語法樹結構,用于使后續該判斷語句或該循環語句中的條件表達式產生真、假兩種約束條件,并具體采用窮舉法或調用Z3定理證明器分別為該兩種約束條件賦值,生成相應真、假兩種賦值。
6.如權利要求5所述的檢測C代碼空指針引用的系統,其特征在于,該動態檢測過程包括生成未使用賦值集合,其中該賦值集合中的值使該判斷語句或循環語句產生真、假兩種賦值結果。
7.如權利要求6所述的檢測C代碼空指針引用的系統,其特征在于,還包括,將該值賦予該判斷語句或循環語句中條件語句的變量,將該值存入已使用賦值集合,同時將該未使用賦值集合中的該值刪除。
8.如權利要求7所述的檢測C代碼空指針引用的系統,其特征在于,還包括若該最終代碼執行異常,則輸出該值,并將該已使用賦值集合中的該值刪除,遍歷該未使用賦值結合。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院計算技術研究所,未經中國科學院計算技術研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410160140.5/1.html,轉載請聲明來源鉆瓜專利網。





