[發(fā)明專利]一種基于cfg文件靜態(tài)分析C++虛函數(shù)調(diào)用的方法有效
| 申請(qǐng)?zhí)枺?/td> | 201410658925.5 | 申請(qǐng)日: | 2014-11-18 |
| 公開(公告)號(hào): | CN104331368A | 公開(公告)日: | 2015-02-04 |
| 發(fā)明(設(shè)計(jì))人: | 顧乃杰;馮光輝;張明;曹華雄 | 申請(qǐng)(專利權(quán))人: | 合肥康捷信息科技有限公司 |
| 主分類號(hào): | G06F11/36 | 分類號(hào): | G06F11/36;G06F9/45 |
| 代理公司: | 安徽省合肥新安專利代理有限責(zé)任公司 34101 | 代理人: | 何梅生 |
| 地址: | 230000 安徽省合肥市望江西路和創(chuàng)新大*** | 國省代碼: | 安徽;34 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 cfg 文件 靜態(tài) 分析 c++ 函數(shù) 調(diào)用 方法 | ||
1.一種基于cfg文件靜態(tài)分析C++虛函數(shù)調(diào)用的方法,基于Linux平臺(tái)G++編譯器實(shí)現(xiàn),其特征是按如下步驟進(jìn)行:
步驟1、建立多個(gè)類的新虛函數(shù)鏈表和多個(gè)類的虛函數(shù)起始位置偏移鏈表:
步驟1.1、利用所述G++編譯器對(duì)C++源程序進(jìn)行編譯時(shí),添加編譯參數(shù)fdump-tree-cfg和編譯參數(shù)fdump-class-hierarchy后進(jìn)行編譯,由所述編譯參數(shù)fdump-tree-cfg生成cfg文件,由所述編譯參數(shù)fdump-class-hierarchy獲得編譯器生成的多個(gè)類的虛函數(shù)表,并保存在class文件中;所述class文件中包括被G++編譯器改編的虛函數(shù)名稱;
步驟1.2、提取所述class文件中的多個(gè)類的虛函數(shù)表,并把被G++編譯器改編的虛函數(shù)名稱恢復(fù)為C++源程序中的虛函數(shù)名稱,按虛函數(shù)在class文件中出現(xiàn)的順序使用鏈表按序進(jìn)行存儲(chǔ),鏈表中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)編譯器生成的虛函數(shù)表中一行,從而建立多個(gè)類的新虛函數(shù)鏈表,所述新虛函數(shù)鏈表中存儲(chǔ)的函數(shù)名稱與源程序中虛函數(shù)名稱一致;當(dāng)一個(gè)類含有基類時(shí),所述編譯器生成的虛函數(shù)表和新虛函數(shù)鏈表中包括被直接繼承和重寫的基類虛函數(shù)以及派生類自有虛函數(shù);將所述被直接繼承或重寫的基類虛函數(shù)定義為基類對(duì)應(yīng)的虛函數(shù);
步驟1.3、在所述class文件中編譯器生成的虛函數(shù)表中,編譯器選擇一行開始存放所述基類對(duì)應(yīng)虛函數(shù);提取并使用鏈表記錄所述基類對(duì)應(yīng)虛函數(shù)在新虛函數(shù)鏈表的中起始存放位置,從而建立類的虛函數(shù)起始位置偏移鏈表;所述虛函數(shù)起始位置偏移鏈表中每個(gè)節(jié)點(diǎn)存儲(chǔ)基類對(duì)應(yīng)虛函數(shù)和派生類的首個(gè)虛函數(shù)在派生類的虛函數(shù)表中起始偏移位置;所述起始偏移位置使用指向類的新虛函數(shù)鏈表節(jié)點(diǎn)的指針表示;
步驟2、虛函數(shù)調(diào)用:
步驟2.1、在cfg文件中,以“OBJ_TYPE_REF(other;pointer->num)(pointer,parameter)”格式表示虛函數(shù)調(diào)用,other為無需處理的字符,pointer為類類型的指針變量名稱,num為一整數(shù),parameter為虛函數(shù)參數(shù)列表,當(dāng)虛函數(shù)無參數(shù)時(shí),以“OBJ_TYPE_REF(other;pointer->n?um)(pointer)”標(biāo)識(shí)虛函數(shù)調(diào)用,通過pointer指針調(diào)用虛函數(shù)時(shí),根據(jù)所述pointer指針的動(dòng)態(tài)類型,從所述建立的多個(gè)類的新虛函數(shù)鏈表和多個(gè)類的虛函數(shù)起始位置偏移鏈表中,選擇poi?nter指針動(dòng)態(tài)類型對(duì)應(yīng)的新虛函數(shù)鏈表和虛函數(shù)起始位置偏移鏈表;
步驟2.2、對(duì)虛函數(shù)起始位置偏移鏈表進(jìn)行遍歷并找到一節(jié)點(diǎn),所述節(jié)點(diǎn)中存放了對(duì)應(yīng)poi?nter指針靜態(tài)類型的起始位置偏移信息,所述起始偏移位置使用指向新虛函數(shù)鏈表節(jié)點(diǎn)的指針進(jìn)行表示,通過所述指針找到新虛函數(shù)鏈表中的相應(yīng)節(jié)點(diǎn)作為查找起始節(jié)點(diǎn);
步驟2.3、根據(jù)所述cfg文件中pointer指針調(diào)用虛函數(shù)格式中的num整數(shù),從所述查找起始節(jié)點(diǎn)開始查找第num個(gè)鏈表節(jié)點(diǎn),且查找起始節(jié)點(diǎn)為第0個(gè)鏈表節(jié)點(diǎn),并返回第num個(gè)節(jié)點(diǎn)中存儲(chǔ)的虛函數(shù)名稱;
步驟2.4、通過cfg文件中虛函數(shù)調(diào)用中的parameter虛函數(shù)參數(shù)列表,使用C++中重載規(guī)則,唯一確定被調(diào)用的虛函數(shù),從而完成虛函數(shù)調(diào)用解析。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于合肥康捷信息科技有限公司,未經(jīng)合肥康捷信息科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410658925.5/1.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 上一篇:變牙型防松螺母
- 下一篇:帶有行程限位裝置的氣液增壓器
- 同類專利
- 專利分類
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F11-00 錯(cuò)誤檢測;錯(cuò)誤校正;監(jiān)控
G06F11-07 .響應(yīng)錯(cuò)誤的產(chǎn)生,例如,容錯(cuò)
G06F11-22 .在準(zhǔn)備運(yùn)算或者在空閑時(shí)間期間內(nèi),通過測試作故障硬件的檢測或定位
G06F11-28 .借助于檢驗(yàn)標(biāo)準(zhǔn)程序或通過處理作錯(cuò)誤檢測、錯(cuò)誤校正或監(jiān)控
G06F11-30 .監(jiān)控
G06F11-36 .通過軟件的測試或調(diào)試防止錯(cuò)誤
- 螺旋泵壓CFG樁
- CFG樁檢驗(yàn)承載力加載反力裝置
- 一種CFG樁預(yù)制樁頭及CFG樁施工方法
- 一種精確控制CFG樁樁頂高程的方法
- 一種CFG樁兼做護(hù)坡樁的樁基結(jié)構(gòu)
- 一種CFG樁復(fù)合地基結(jié)構(gòu)
- 預(yù)制型實(shí)心CFG樁的復(fù)合地基結(jié)構(gòu)及其施工方法
- SSA結(jié)構(gòu)解析方法、裝置、電子設(shè)備和存儲(chǔ)介質(zhì)
- 一種預(yù)制型實(shí)心CFG樁的復(fù)合地基結(jié)構(gòu)
- 一種改進(jìn)型現(xiàn)澆CFG樁復(fù)合地基結(jié)構(gòu)
- 復(fù)雜背景中實(shí)現(xiàn)靜態(tài)目標(biāo)檢測和識(shí)別的方法
- 一種設(shè)置靜態(tài)認(rèn)證信息的方法及裝置
- 一種基于物聯(lián)網(wǎng)技術(shù)的機(jī)房靜態(tài)資源快速定位的方法
- 一種動(dòng)態(tài)網(wǎng)頁靜態(tài)化的方法和裝置
- 瀏覽器靜態(tài)資源加載方法、瀏覽器程序及可讀存儲(chǔ)介質(zhì)
- 靜態(tài)資源更新方法、裝置、存儲(chǔ)介質(zhì)和計(jì)算機(jī)設(shè)備
- 一種圖像顯示方法及裝置
- 一種靜態(tài)方法修改非靜態(tài)對(duì)象的方法
- 一種靜態(tài)資源加載方法、裝置、設(shè)備及可讀存儲(chǔ)介質(zhì)
- 一種靜態(tài)資源獲取方法、裝置及其相關(guān)設(shè)備





