[發明專利]一種基于cfg文件靜態分析C++虛函數調用的方法有效
| 申請號: | 201410658925.5 | 申請日: | 2014-11-18 |
| 公開(公告)號: | CN104331368A | 公開(公告)日: | 2015-02-04 |
| 發明(設計)人: | 顧乃杰;馮光輝;張明;曹華雄 | 申請(專利權)人: | 合肥康捷信息科技有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F9/45 |
| 代理公司: | 安徽省合肥新安專利代理有限責任公司 34101 | 代理人: | 何梅生 |
| 地址: | 230000 安徽省合肥市望江西路和創新大*** | 國省代碼: | 安徽;34 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 cfg 文件 靜態 分析 c++ 函數 調用 方法 | ||
技術領域
本發明涉及軟件分析領域,具體地說是一種基于cfg文件靜態分析C++虛函數調用的方法。
背景技術
隨著時代的進步,軟件的功能越來越復雜,用戶對軟件的要求也越來越高。同時伴隨著計算機相關技術的發展,軟件規模越來越龐大,開發的復雜性急劇增加。
隨著軟件規模的增大,為了保證軟件質量,對測試提出了更大的挑戰。尤其對于應用于實時性控制等特殊應用場景時,軟件發生故障時將會導致不可估量的后果,對軟件可靠性要求更高。為了最大程度保證軟件可靠性,需要大量測試軟件。
在軟件測試中,可以分動態測試為和靜態測試,前者通過實際運行被測試程序,觀察運行結果與預期差異,后者無需程序運行,通過代碼分析確定程序缺陷。隨著軟件代碼規模的增大,運行空間急劇擴大,動態測試很難達到100%覆蓋率,為軟件健壯性和安全性留下隱患,同時隨著測試覆蓋程度的增加,測試成本也在急劇增加。通過靜態分析程序,例如分析程序結構,分析程序函數調用關系,分析程序邏輯,可以更有效發現程序問題,效率通常高于動態測試。
在軟件編碼中,大量代碼使用C++語言開發。在靜態分析C++源程序時,通常需要獲取函數調用路徑,基于函數調用路徑分析程序。源程序中存在多個函數調用路徑,通過分析每個函數調用路徑,進而發現程序中的問題。
發明內容
本發明提出一種具有可操作性的基于cfg文件靜態分析C++虛函數調用的方法,以期在靜態分析中準確獲取動態運行時信息,提高靜態分析準確性,實現靜態分析更加符合程序語義。
本發明為解決技術問題采用如下技術方案:
本發明一種基于cfg文件靜態分析C++虛函數調用的方法,基于Linux平臺G++編譯器實現,其特點是按如下步驟進行:
步驟1、建立多個類的新虛函數鏈表和多個類的虛函數起始位置偏移鏈表:
步驟1.1、利用所述G++編譯器對C++源程序進行編譯時,添加編譯參數fdump-tree-cfg和編譯參數fdump-class-hierarchy后進行編譯,由所述編譯參數fdump-tree-cfg生成cfg文件,由所述編譯參數fdump-class-hierarchy獲得編譯器生成的多個類的虛函數表,并保存在class文件中;所述class文件中包括被G++編譯器改編的虛函數名稱;
步驟1.2、提取所述class文件中的多個類的虛函數表,并把被G++編譯器改編的虛函數名稱恢復為C++源程序中的虛函數名稱,按虛函數在class文件中出現的順序使用鏈表按序進行存儲,鏈表中每個節點對應編譯器生成的虛函數表中一行,從而建立多個類的新虛函數鏈表,所述新虛函數鏈表中存儲的函數名稱與源程序中虛函數名稱一致;當一個類含有基類時,所述編譯器生成的虛函數表和新虛函數鏈表中包括被直接繼承和重寫的基類虛函數以及派生類自有虛函數;將所述被直接繼承或重寫的基類虛函數定義為基類對應的虛函數;
步驟1.3、在所述class文件中編譯器生成的虛函數表中,編譯器選擇一行開始存放所述基類對應虛函數;提取并使用鏈表記錄所述基類對應虛函數在新虛函數鏈表的中起始存放位置,從而建立類的虛函數起始位置偏移鏈表;所述虛函數起始位置偏移鏈表中每個節點存儲基類對應虛函數和派生類的首個虛函數在派生類的虛函數表中起始偏移位置;所述起始偏移位置使用指向類的新虛函數鏈表節點的指針表示;
步驟2、虛函數調用:
步驟2.1、在cfg文件中,以“OBJ_TYPE_REF(other;pointer->num)(pointer,parameter)”格式表示虛函數調用,other為無需處理的字符,pointer為類類型的指針變量名稱,num為一整數,parameter為虛函數參數列表,當虛函數無參數時,以“OBJ_TYPE_REF(other;pointer->num)(pointer)”標識虛函數調用,通過pointer指針調用虛函數時,根據所述pointer指針的動態類型,從所述建立的多個類的新虛函數鏈表和多個類的虛函數起始位置偏移鏈表中,選擇pointer指針動態類型對應的新虛函數鏈表和虛函數起始位置偏移鏈表;
步驟2.2、對虛函數起始位置偏移鏈表進行遍歷并找到一節點,所述節點中存放了對應pointer指針靜態類型的起始位置偏移信息,所述起始偏移位置使用指向新虛函數鏈表節點的指針進行表示,通過所述指針找到新虛函數鏈表中的相應節點作為查找起始節點;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于合肥康捷信息科技有限公司,未經合肥康捷信息科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410658925.5/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:變牙型防松螺母
- 下一篇:帶有行程限位裝置的氣液增壓器





