王力群 繆興華
摘 要: 傳統(tǒng)方法檢測(cè)軟件設(shè)計(jì)中的整型符號(hào)轉(zhuǎn)換缺陷時(shí),只能檢測(cè)到缺陷的“征兆”,無(wú)法檢測(cè)到缺陷的根源,無(wú)法準(zhǔn)確定位整型符號(hào)轉(zhuǎn)換缺陷形成的位置。因此,提出基于動(dòng)態(tài)方法的嵌入式軟件設(shè)計(jì)中缺陷定位技術(shù)。其構(gòu)建在二進(jìn)制插樁框架Valgrind上,采用種類推導(dǎo)方法檢測(cè)整型變量的符號(hào)種類信息,通過(guò)種類推導(dǎo)方法辨識(shí)整型變量的符號(hào)種類信息,獲取內(nèi)存相關(guān)庫(kù)函數(shù)為沖突種類參數(shù)的集合,將其作為潛在整型符號(hào)變換缺陷候選集。通過(guò)動(dòng)態(tài)插樁技術(shù)檢測(cè)候選集,準(zhǔn)確檢測(cè)整型符號(hào)轉(zhuǎn)換缺陷代碼的位置。實(shí)驗(yàn)結(jié)果表明,所提方法準(zhǔn)確檢測(cè)出了整型符號(hào)轉(zhuǎn)換缺陷,性能較高。
關(guān)鍵詞: 大型嵌入式軟件; 軟件設(shè)計(jì); 整型符號(hào)轉(zhuǎn)換; 缺陷定位
中圖分類號(hào): TN926?34; TP311.52 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2017)16?0083?03
Abstract: The integer notation for detecting the transformation defect in the design of the traditional software detection method can only detect the "symptoms" of the defect, but can't detect the root cause of the defect, so it is unable to pinpoint the position formed in the process of the integer notation transformation defect. Therefore, the defect positioning technology in the embedded software design based on dynamic method is put forward. It is constructed on the binary pile framework Valgrind to detect symbol type information of integer variables by the sort derivation method. The species derivation method is used to identify the symbolic sort information of the integer variables, and obtain the conflict species parameter set in memory related library function, which will be taken as a potential candidate set of integer notation transformation defect. The dynamic pile technique can accurately detect the position of integer notation transformation defect code by detecting the candidate set. The experimental results indicate that the proposed method can accurately detect the integer notation transformation defects.
Keywords: large embedded software; software design; integer notation transformation; defect positioning
如今的大型軟件開(kāi)發(fā)中存在復(fù)雜性和抽象性缺陷,受到嵌入式系統(tǒng)時(shí)間以及空間資源有限的干擾,導(dǎo)致檢測(cè)大型嵌入式軟件缺陷的難度不斷提升。而軟件設(shè)計(jì)中的整型符號(hào)轉(zhuǎn)換缺陷較多,該種缺陷的隱蔽性強(qiáng),同其他缺陷融合,會(huì)形成內(nèi)存缺陷,對(duì)程序造成嚴(yán)重?fù)p害[1]。傳統(tǒng)方法檢測(cè)該種缺陷時(shí),只能檢測(cè)到缺陷的“征兆”,無(wú)法檢測(cè)到缺陷的根源。因此,尋求有效的方法,檢測(cè)大型嵌入式軟件設(shè)計(jì)中的整型缺陷,具有較高的應(yīng)用價(jià)值。
1 動(dòng)態(tài)方法嵌入式軟件設(shè)計(jì)中的缺陷定位技術(shù)
1.1 整型符號(hào)轉(zhuǎn)換缺陷
本文方法檢測(cè)整型符合轉(zhuǎn)換缺陷過(guò)程中,應(yīng)先截獲內(nèi)存相關(guān)庫(kù)函數(shù),檢測(cè)整型參數(shù)的符號(hào)種類。定義需要截獲的內(nèi)存相關(guān)庫(kù)函數(shù)和潛在函數(shù),如表1所示。
表1 潛在函數(shù)列表
1.2 總體設(shè)計(jì)
本文方法在二進(jìn)制級(jí)別上對(duì)符號(hào)轉(zhuǎn)換錯(cuò)誤產(chǎn)生的緩沖區(qū)溢出缺陷實(shí)施檢測(cè)。檢測(cè)整型符號(hào)轉(zhuǎn)換缺陷時(shí),應(yīng)先獲取程序變量的符號(hào)種類信息[2?3],再采集引發(fā)符號(hào)沖突的指令地址,對(duì)缺陷形成的位置實(shí)時(shí)定位[4]。設(shè)計(jì)的缺陷檢測(cè)系統(tǒng)構(gòu)建在二進(jìn)制插樁框架Valgrind上,將整型符號(hào)檢測(cè)轉(zhuǎn)換缺陷的檢測(cè)方法應(yīng)用到原型工具Sconveheck的實(shí)現(xiàn)中。系統(tǒng)總體架構(gòu)如圖1所示。
圖1中描述的系統(tǒng)包括Valgrind內(nèi)核部分和原型工具Sconvcheck,Valgrind內(nèi)核可同底層參照系統(tǒng)完成交互。Sconvcheck提供的功能能夠完成符號(hào)轉(zhuǎn)換缺陷的檢測(cè)和定位。
總體系統(tǒng)的運(yùn)行流程是:將二進(jìn)制代碼變換成中間描述形式(VEX,IR),為分析指令的隱藏信息提供依據(jù)[5];在中間代碼層面中,檢測(cè)各條中間代碼指令,采集變量存儲(chǔ)單元中涵蓋的符號(hào)種類信息;收集內(nèi)存相關(guān)函數(shù)定義,得到少數(shù)參數(shù)的符號(hào)種類信息,對(duì)這些映射關(guān)系實(shí)施初始化設(shè)置;采用數(shù)據(jù)流分析各變量的符號(hào)種類信息,存儲(chǔ)變量符號(hào)信息。后續(xù)得到新種類符號(hào)時(shí),將其同前期獲取的符號(hào)種類進(jìn)行對(duì)比[6],如果不一致,則說(shuō)明是沖突種類,存儲(chǔ)當(dāng)前指令;通過(guò)種類推導(dǎo)方法檢索潛在符號(hào)缺陷候選集,依據(jù)存儲(chǔ)的符號(hào)種類信息對(duì)整型符號(hào)變換缺陷代碼實(shí)時(shí)定位。endprint
原型工具Sconvcheck的運(yùn)行流程由信息采集、檢測(cè)方案和缺陷定位三部分組成,其中的符號(hào)種類信息采集流程,如圖2所示。
1.3 檢測(cè)方案
基于圖2描述的符號(hào)種類信息采集過(guò)程,能夠獲取包含沖突種類的單元存儲(chǔ)單元集。將其當(dāng)成潛在的符號(hào)變換缺陷候選集。還應(yīng)采用檢測(cè)方案對(duì)整型符號(hào)變換缺陷進(jìn)行進(jìn)一步辨識(shí)。符號(hào)轉(zhuǎn)換缺陷同內(nèi)存緩沖區(qū)溢出相關(guān),內(nèi)存相關(guān)庫(kù)函數(shù)的參數(shù)如果是沖突種類,則說(shuō)明出現(xiàn)了符號(hào)轉(zhuǎn)換缺陷。整型符號(hào)轉(zhuǎn)換缺陷的檢測(cè)方案的流程如圖3所示。
從圖3可以看出,檢測(cè)方案得到內(nèi)存相關(guān)庫(kù)函數(shù)的調(diào)用后,便得到描述內(nèi)存分配長(zhǎng)度的全部參數(shù)存儲(chǔ)單元。采用映射表檢索相關(guān)的符號(hào)種類信息:如果是沖突種類,則在符號(hào)前插入檢測(cè)代碼,在程序運(yùn)行過(guò)程中檢測(cè)傳遞的實(shí)參是否是負(fù)數(shù);如果不是沖突種類,則結(jié)束檢測(cè);否則,呈現(xiàn)運(yùn)行過(guò)程中將負(fù)數(shù)反饋給沖突種類參數(shù)的現(xiàn)象判定成實(shí)際的符號(hào)變換缺陷。
1.4 缺陷定位
采集符號(hào)種類信息時(shí)既要采集變量的符號(hào)種類信息,也要在存在沖突種類信息時(shí)將當(dāng)前指令地址信息存儲(chǔ)下來(lái)。若變量被辨識(shí)成沖突種類,則用當(dāng)前操作指令地址替換前期記錄的地址信息,依據(jù)新指令地址信息對(duì)缺陷代碼實(shí)施定位。檢測(cè)方案檢測(cè)到整型符號(hào)轉(zhuǎn)換缺陷時(shí),采集變量信息,并對(duì)映射表進(jìn)行檢測(cè),將獲取的指令地址信息當(dāng)成產(chǎn)生缺陷的指令地址?;谠撝噶畹刂沸畔⒛軌颢@取整型符號(hào)轉(zhuǎn)換缺陷代碼位置信息。上述描述的整型符號(hào)變換缺陷定位流程圖,如圖4所示。
2 實(shí)驗(yàn)分析
實(shí)驗(yàn)采用本文方法對(duì)E?mail服務(wù)器thrownmial7.7.2實(shí)施檢測(cè),結(jié)果如表2所示。能夠看出本文方法有效檢測(cè)出了thrownmial7.7.2的中的緩沖區(qū)溢出以及整型符號(hào)轉(zhuǎn)換缺陷,并對(duì)檢測(cè)出的缺陷給出警告。
表2 本文方法的缺陷檢測(cè)結(jié)果
實(shí)驗(yàn)選擇三種待測(cè)程序,使它們分別運(yùn)行在正常狀態(tài)下、Buffcheck以及本文方法中的工具Valgrind下,檢測(cè)不同程序的運(yùn)行效率,分析不同狀態(tài)下的程序運(yùn)行性能,結(jié)果如表3所示。
分析表3可得,待測(cè)程序在本文方法下的運(yùn)行速率比正常運(yùn)行下和其他狀態(tài)下高,說(shuō)明本文方法在提高程序運(yùn)行效率方面具有較強(qiáng)的優(yōu)越性和較高的性能。
3 結(jié) 論
本文提出了基于動(dòng)態(tài)方法的嵌入式軟件設(shè)計(jì)中的缺陷定位技術(shù),其采用面向二進(jìn)制程序整型符號(hào)變換缺陷檢測(cè)方法,對(duì)整型符號(hào)變換引起的緩沖區(qū)溢出缺陷進(jìn)行準(zhǔn)確定位。結(jié)果表明,所提方法準(zhǔn)確檢測(cè)出了整型符號(hào)轉(zhuǎn)換缺陷,性能較高。
參考文獻(xiàn)
[1] 林永峰,陳亮.面向安全性分析的嵌入式軟件測(cè)試方法研究[J].現(xiàn)代電子技術(shù),2016,39(13):80?83.
[2] 蔡紅梅.嵌入式船舶人員落水搜救控制系統(tǒng)的設(shè)計(jì)與研究[J].艦船科學(xué)技術(shù),2015,37(11):155?159.
[3] 張琴.基于瞳孔定位技術(shù)的視覺(jué)跟蹤系統(tǒng)的研究[J].微型機(jī)與應(yīng)用,2016,35(4):54?56.
[4] 常佩佩,趙逢禹.基于代碼結(jié)構(gòu)信息的軟件缺陷定位方法研究[J].計(jì)算機(jī)應(yīng)用研究,2016,33(8):2371?2374.
[5] 王贊,樊向宇,鄒雨果,等.一種基于遺傳算法的多缺陷定位方法[J].軟件學(xué)報(bào),2016,27(4):879?900.
[6] 付佩儒,謝鵬.嵌入式軟件中斷數(shù)據(jù)競(jìng)爭(zhēng)安全性檢測(cè)技術(shù)研究[J].航天控制,2015,33(3):79?82.endprint