一種虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng)。本發(fā)明中的用戶管理模塊對(duì)整個(gè)系統(tǒng)進(jìn)行控制,指定缺陷檢測(cè)類型與檢測(cè)的范圍,將原始的二進(jìn)制文件和指令傳送給缺陷檢測(cè)引擎模塊。缺陷檢測(cè)引擎模塊為嵌入式二進(jìn)制軟件缺陷檢測(cè)提供分析工具,根據(jù)用戶指定的缺陷檢測(cè)范圍、缺陷檢測(cè)類型指令對(duì)原始的待檢測(cè)二進(jìn)制軟件進(jìn)行插樁操作。多體系結(jié)構(gòu)仿真器模塊在計(jì)算機(jī)上仿真出嵌入式平臺(tái)硬件,接收缺陷檢測(cè)引擎模塊插樁好后的二進(jìn)制程序中間代碼并將其編譯成特定的嵌入式平臺(tái)上的可執(zhí)行文件。本發(fā)明使用純軟件的方式進(jìn)行嵌入式二進(jìn)制軟件的缺陷檢測(cè),擺脫了對(duì)昂貴的開發(fā)板和外部設(shè)備的依賴,具有很好的通用性。
【專利說(shuō)明】一種虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及的是一種軟件缺陷檢測(cè)系統(tǒng),具體是一種虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng)。
【背景技術(shù)】
[0002]隨著嵌入式系統(tǒng)應(yīng)用的不斷深入和硬件技術(shù)的不斷革新,嵌入式軟件的規(guī)模和復(fù)雜度與日俱增。然而伴隨而來(lái)的大量的軟件缺陷成為隱藏在高度智能化和信息化系統(tǒng)中的一顆定時(shí)炸彈,對(duì)各類系統(tǒng)造成直接的威脅。因此,保證嵌入式軟件的可靠性成為當(dāng)前面臨的嚴(yán)峻挑戰(zhàn)。
[0003]由于嵌入式系統(tǒng)包含兩個(gè)方面:硬件部分和軟件部分。這就給嵌入式軟件的開發(fā)與調(diào)試帶來(lái)了巨大的困難和挑戰(zhàn),原因在于既要求開發(fā)人員掌握電子專業(yè)嵌入式硬件方面的知識(shí),也要求他們掌握計(jì)算機(jī)專業(yè)軟件方面的知識(shí)。而且傳統(tǒng)的嵌入式軟件開發(fā)環(huán)境需要用到很多專門的軟件和設(shè)備,例如專門的開發(fā)板、JTAG 口代理軟件、ADS1.2編譯環(huán)境、串口調(diào)試器和以太網(wǎng)檢測(cè)工具等。
[0004]同時(shí)隨著硬件結(jié)構(gòu)越發(fā)復(fù)雜和軟件規(guī)模的快速增長(zhǎng),嵌入式應(yīng)用程序的開發(fā)變得緩慢而低效。即使解決了這些問題,嵌入式應(yīng)用程序的在線開發(fā)方式,也給開發(fā)者設(shè)置了很高的門檻。只有擺脫在線開發(fā)方式中對(duì)昂貴硬件設(shè)備的依賴和降低在線調(diào)試方法的復(fù)雜性,才能快速、高效地開發(fā)出實(shí)用的嵌入式應(yīng)用程序。
【發(fā)明內(nèi)容】
[0005]針對(duì)傳統(tǒng)的嵌入式二進(jìn)制軟件缺陷檢測(cè)中存在的問題,本發(fā)明提出了一種利用虛擬仿真技術(shù)進(jìn)行嵌入式二進(jìn)制軟件缺陷檢測(cè)的系統(tǒng)。使用完全虛擬化技術(shù)仿真嵌入式硬件平臺(tái),然后在仿真的嵌入式平臺(tái)上使用動(dòng)態(tài)缺陷檢測(cè)技術(shù)對(duì)嵌入式二進(jìn)制軟件進(jìn)行缺陷檢測(cè)。
[0006]本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
本發(fā)明包括用戶管理模塊、缺陷檢測(cè)引擎模塊和多體系結(jié)構(gòu)仿真器模塊,其中:用戶管理模塊對(duì)整個(gè)系統(tǒng)進(jìn)行控制,指定缺陷檢測(cè)類型與檢測(cè)的范圍,將原始的二進(jìn)制文件和指令傳送給缺陷檢測(cè)引擎模塊,并根據(jù)缺陷檢測(cè)引擎模塊的反饋信息生成缺陷檢測(cè)報(bào)告;缺陷檢測(cè)引擎模塊為嵌入式二進(jìn)制軟件缺陷檢測(cè)提供特定功能的分析工具,根據(jù)用戶指定的缺陷檢測(cè)范圍、缺陷檢測(cè)類型等指令對(duì)原始的待檢測(cè)二進(jìn)制軟件進(jìn)行插樁操作,得到插樁后的二進(jìn)制程序中間代碼,然后將中間代碼傳遞給多體系結(jié)構(gòu)仿真器模塊,并根據(jù)多體系結(jié)構(gòu)仿真模塊反饋的信息對(duì)軟件的缺陷進(jìn)行判別;多體系結(jié)構(gòu)仿真器模塊在普通的計(jì)算機(jī)上仿真出特定的嵌入式平臺(tái)硬件,接收缺陷檢測(cè)引擎模塊插樁好后的二進(jìn)制程序中間代碼并將其編譯成特定的嵌入式平臺(tái)上的可執(zhí)行文件,在缺陷檢測(cè)引擎模塊的指導(dǎo)下運(yùn)行可執(zhí)行文件,然后將運(yùn)行的結(jié)果反饋給缺陷檢測(cè)引擎模塊。
[0007]所述的用戶管理模塊包括:報(bào)告管理模塊和圖形界面模塊。其中:報(bào)告管理模塊將缺陷引擎模塊反饋的信息利用數(shù)據(jù)可視化技術(shù)生成便于用戶理解的報(bào)告。圖形界面模塊提供便于交互的圖形界面的人機(jī)接口,用戶通過(guò)圖形界面模塊與檢測(cè)引擎模塊進(jìn)行交互,指定待測(cè)的程序的類型,如ARM的程序,RTOS上的程序等,還可以選擇檢測(cè)的范圍,如檢測(cè)內(nèi)存溢出、棧溢出、堆溢出、整數(shù)溢出等。
[0008]所述的缺陷檢測(cè)引擎模塊包括:內(nèi)存檢查模塊、函數(shù)調(diào)用分析模塊、緩存分析模塊、線程分析模塊和堆棧分析模塊。其中:內(nèi)存檢查模塊對(duì)軟件內(nèi)存方面的缺陷檢測(cè),比如:堆溢出、棧溢出、不正確的內(nèi)存釋放、內(nèi)存訪問越界、內(nèi)存泄露和內(nèi)存覆蓋等內(nèi)存方面的問題。函數(shù)調(diào)用分析模塊用來(lái)對(duì)軟件中的各種函數(shù)調(diào)用關(guān)系進(jìn)行分析。緩存分析模塊模擬程序與機(jī)器進(jìn)行交互的緩存系統(tǒng)和分支預(yù)測(cè)系統(tǒng),分析程序的cache命中問題。線程分析模塊用來(lái)檢查C\C++、Fortran程序中使用POSIX pthread原語(yǔ)的線程同步與競(jìng)爭(zhēng)的問題。堆棧分析模塊對(duì)程序中使用的堆棧進(jìn)行衡量,分析程序中堆內(nèi)存的使用情況。
[0009]所述的多體系結(jié)構(gòu)仿真器模塊包括:加載器模塊、初始化模塊、代碼cache模塊、OS調(diào)用仿真模塊。其中:加載器模塊將Guest Code和Guest Data寫入到專門用于暫存客戶機(jī)映像的內(nèi)存區(qū)中,并且加載運(yùn)行時(shí)軟件的代碼。初始化模塊為代碼cache和異常索引表分配內(nèi)存空間,同時(shí)建立起客戶機(jī)應(yīng)用程序運(yùn)行時(shí)所需的全部環(huán)境。代碼cache模塊將翻譯過(guò)的基本代碼塊暫存,利用緩存的技術(shù),避免重復(fù)翻譯導(dǎo)致的性能下降。OS調(diào)用仿真模塊在遇到執(zhí)行客戶機(jī)程序中的系統(tǒng)調(diào)用時(shí),將其轉(zhuǎn)化為一個(gè)或者多個(gè)作了修改的本地系統(tǒng)調(diào)用進(jìn)行處理,然后將結(jié)果返回給客戶機(jī)程序。
[0010]本發(fā)明具有下述的有益效果:
1、本發(fā)明使用純軟件的方式進(jìn)行嵌入式二進(jìn)制軟件的缺陷檢測(cè),與傳統(tǒng)的嵌入式軟件缺陷檢測(cè)方法相比擺脫了對(duì)昂貴的開發(fā)板和外部設(shè)備的依賴,具有很好的通用性。
[0011]2、本發(fā)明在多體系結(jié)構(gòu)仿真器模塊和缺陷引擎模塊的協(xié)同工作方面使用了深度代碼融合的方法,減少中間步驟,大大提升了缺陷檢測(cè)的效率。
[0012]3、本發(fā)明的多體系結(jié)構(gòu)仿真器模塊具有拓展性,對(duì)不同架構(gòu)的嵌入式硬件都有很好的適應(yīng)能力。雖然目前只支持嵌入式ARM系列的開發(fā)平臺(tái),但由于采用了開放式可擴(kuò)展的架構(gòu),后期可以支持不同的硬件平臺(tái)和體系結(jié)構(gòu)。
【專利附圖】
【附圖說(shuō)明】
[0013]圖1系統(tǒng)架構(gòu)示意圖。
[0014]圖2實(shí)施例的工作流程圖。
【具體實(shí)施方式】
[0015]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
[0016]如同I所示,本實(shí)施例包括:用戶管理模塊、缺陷檢測(cè)引擎模塊和多體系結(jié)構(gòu)仿真器模塊,其中:用戶管理模塊對(duì)整個(gè)系統(tǒng)進(jìn)行控制,指定缺陷檢測(cè)類型與檢測(cè)的范圍,將原始的二進(jìn)制文件和指令傳送給缺陷檢測(cè)引擎模塊,并根據(jù)缺陷檢測(cè)引擎模塊的反饋信息生成缺陷檢測(cè)報(bào)告;缺陷檢測(cè)引擎模塊為嵌入式二進(jìn)制軟件缺陷檢測(cè)提供特定功能的分析工具,根據(jù)用戶指定的缺陷檢測(cè)范圍、缺陷檢測(cè)類型等指令對(duì)原始的待檢測(cè)二進(jìn)制軟件進(jìn)行插樁操作,得到插樁后的二進(jìn)制程序中間代碼,然后將中間代碼傳遞給多體系結(jié)構(gòu)仿真器模塊,并根據(jù)多體系結(jié)構(gòu)仿真模塊反饋的信息對(duì)軟件的缺陷進(jìn)行判別;多體系結(jié)構(gòu)仿真器模塊在普通的計(jì)算機(jī)上仿真出特定的嵌入式平臺(tái)硬件,接收缺陷檢測(cè)引擎模塊插樁好后的二進(jìn)制程序中間代碼并將其編譯成特定的嵌入式平臺(tái)上的可執(zhí)行文件,在缺陷檢測(cè)引擎模塊的指導(dǎo)下運(yùn)行可執(zhí)行文件,然后將運(yùn)行的結(jié)果反饋給缺陷檢測(cè)引擎模塊。
[0017]如圖2所示,本實(shí)施例具體操作過(guò)程如下:
(I)用戶管理模塊指定待檢測(cè)的缺陷類型
由于嵌入式二進(jìn)制軟件的缺陷類型很多,且各種類型的缺陷的影響程度不同,為了提高執(zhí)行效率可以按需指定待檢測(cè)的缺陷類型,然后將待測(cè)程序與檢測(cè)范圍傳遞給缺陷檢測(cè)引擎模塊。
[0018](2)缺陷檢測(cè)引擎模塊生成中間代碼
缺陷檢測(cè)引擎模塊接收用戶管理模塊傳遞的參數(shù)與原始的待測(cè)程序,然后調(diào)用相應(yīng)的插樁模塊對(duì)待檢測(cè)的嵌入式二進(jìn)制程序進(jìn)行插樁得到一個(gè)統(tǒng)一形式的中間代碼。具體分為8 步完成這個(gè) HostCode—>IR Code—>Host Code 的過(guò)程:
I)反匯編:從機(jī)器碼翻譯為中間代碼IR,此時(shí)為樹型IR。
[0019]2)優(yōu)化1:先從樹型IR轉(zhuǎn)換為平展型的IR,然后做優(yōu)化,包括:刪除冗余Put/Putl/Get/Getl,常量傳遞,刪除死代碼,刪除公共子表達(dá)式,展開循環(huán)loop等。
[0020]3)插樁:這是唯一交給工具插件做的事情,工具可以任意添加分析代碼。
[0021]4)優(yōu)化2:這一遍是對(duì)插樁好的代碼塊做一個(gè)簡(jiǎn)單的優(yōu)化,只做常量傳遞和死代碼移除。
[0022]5)樹型IR建立:將平展的IR轉(zhuǎn)換為樹型IR,為指令選擇做準(zhǔn)備。將賦值給只使用過(guò)一次的臨時(shí)變量的表達(dá)式直接代入那個(gè)臨時(shí)變量的使用點(diǎn),刪除之前的賦值語(yǔ)句,例如賦值語(yǔ)句“ t2=add(tl, con) ”,t2在其他地方只使用過(guò)一次,則用表達(dá)式“ add(tl,con) ”直接在使用t2的語(yǔ)句中取代t2的位置。
[0023]6)指令選擇:樹型IR轉(zhuǎn)換為使用虛擬寄存器的指令序列,指令選擇器使用一個(gè)簡(jiǎn)單的,貪婪的自頂向下的樹匹配算法。
[0024]7)寄存器分配:依然為指令序列形式,線性掃描寄存器分配器用實(shí)際的主機(jī)寄存器取代虛擬寄存器,必要時(shí)插入溢出。
[0025]8)匯編:指令序列轉(zhuǎn)換為機(jī)器代碼,最后的匯編階段只是對(duì)選擇的指令進(jìn)行適當(dāng)?shù)木幋a,然后把它們寫入到一塊內(nèi)存中。
[0026]其中步驟1)、6)、8)與特定體系結(jié)構(gòu)有關(guān),其他的步驟都是與平臺(tái)無(wú)關(guān)的,處理后的中間代碼將傳遞給虛擬仿真器模塊處理執(zhí)行。
[0027](3)虛擬仿真器模塊執(zhí)行中間代碼
虛擬仿真器模塊接收缺陷檢測(cè)引擎模塊傳遞的插樁后的嵌入式二進(jìn)制程序的中間代碼基本塊,然后將其翻譯成本地代碼塊,并模擬嵌入式二進(jìn)制軟件在真實(shí)硬件中的執(zhí)行情況,然后再將二進(jìn)制代碼執(zhí)行時(shí)的運(yùn)行信息反饋給缺陷檢測(cè)引擎模塊,由缺陷檢測(cè)引擎模塊分析待測(cè)嵌入式二進(jìn)制軟件是否存在某種缺陷。
[0028]虛擬仿真器模塊與缺陷檢測(cè)引擎模塊存在著緊密的交互,系統(tǒng)采用了代碼融合的方案來(lái)滿足仿真器模塊與缺陷檢測(cè)引擎模塊對(duì)高性能交互的需求。具體步驟如下:基于對(duì)兩者原理的具體分析,采用代碼融合的方法將二者的中間代碼統(tǒng)一起來(lái),讓缺陷引擎模塊來(lái)做嵌入式軟件的反編譯工作,然后由缺陷引擎模塊來(lái)插入相應(yīng)的功能代碼,充當(dāng)編譯前端的功能,接著把處理后的中間代碼交由虛擬仿真模塊處理執(zhí)行,并將收集到的缺陷信息反饋給缺陷檢測(cè)引擎模塊。
[0029](4)用戶層生成缺陷檢測(cè)報(bào)告
報(bào)告管理模塊根據(jù)缺陷檢測(cè)引擎反饋的執(zhí)行情況生成便于理解的缺陷檢測(cè)報(bào)告。圖形界面提供了可視化的人機(jī)接口便于操作,同時(shí)具有一定的數(shù)據(jù)可視化的功能,能夠形象地展示缺陷檢測(cè)的執(zhí)行情況、最終的結(jié)果、檢測(cè)到的缺陷等。
[0030]本發(fā)明使用了虛擬仿真技術(shù)在普通的計(jì)算機(jī)上實(shí)現(xiàn)了虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng)。該缺陷檢測(cè)系統(tǒng)擺脫了對(duì)昂貴的開發(fā)板和外部設(shè)備的依賴,具有很好的通用性,在多體系結(jié)構(gòu)虛擬仿真器模塊和缺陷引擎模塊的協(xié)同工作方面使用了深度代碼融合的方法,減少中間步驟,大大提升了缺陷檢測(cè)的效率,具有良好的拓展性,對(duì)不同架構(gòu)的嵌入式硬件都有很好的適應(yīng)能力。
【權(quán)利要求】
1.一種虛擬化嵌入式二進(jìn)制軟件缺陷檢測(cè)系統(tǒng),包括用戶管理模塊、缺陷檢測(cè)引擎模塊和多體系結(jié)構(gòu)仿真器模塊,其特征在于: 所述的用戶管理模塊對(duì)整個(gè)系統(tǒng)進(jìn)行控制,指定缺陷檢測(cè)類型與檢測(cè)的范圍,將原始的二進(jìn)制文件和指令傳送給缺陷檢測(cè)引擎模塊,并根據(jù)缺陷檢測(cè)引擎模塊的反饋信息生成缺陷檢測(cè)報(bào)告; 所述的缺陷檢測(cè)引擎模塊為嵌入式二進(jìn)制軟件缺陷檢測(cè)提供分析工具,根據(jù)用戶指定的缺陷檢測(cè)范圍、缺陷檢測(cè)類型指令對(duì)原始的待檢測(cè)二進(jìn)制軟件進(jìn)行插樁操作,得到插樁后的二進(jìn)制程序中間代碼,然后將中間代碼傳遞給多體系結(jié)構(gòu)仿真器模塊,并根據(jù)多體系結(jié)構(gòu)仿真模塊反饋的信息對(duì)軟件的缺陷進(jìn)行判別; 所述的多體系結(jié)構(gòu)仿真器模塊在計(jì)算機(jī)上仿真出嵌入式平臺(tái)硬件,接收缺陷檢測(cè)引擎模塊插樁好后的二進(jìn)制程序中間代碼并將其編譯成特定的嵌入式平臺(tái)上的可執(zhí)行文件,在缺陷檢測(cè)引擎模塊的指導(dǎo)下運(yùn)行可執(zhí)行文件,然后將運(yùn)行的結(jié)果反饋給缺陷檢測(cè)引擎模塊; 其中用戶管理模塊包括報(bào)告管理模塊和圖形界面模塊;所述報(bào)告管理模塊將缺陷引擎模塊反饋的信息利用數(shù)據(jù)可視化技術(shù)生成便于用戶理解的報(bào)告;圖形界面模塊提供便于交互的圖形界面的人機(jī)接口,用戶通過(guò)圖形界面模塊與檢測(cè)引擎模塊進(jìn)行交互,指定待測(cè)的程序的類型; 缺陷檢測(cè)引擎模塊包括內(nèi)存檢查模塊、函數(shù)調(diào)用分析模塊、緩存分析模塊、線程分析模塊和堆棧分析模塊;所述內(nèi)存檢查模塊對(duì)軟件內(nèi)存方面的缺陷檢測(cè),所述函數(shù)調(diào)用分析模塊用來(lái)對(duì)軟件中的各種函數(shù)調(diào)用關(guān)系進(jìn)行分析;所述緩存分析模塊模擬程序與機(jī)器進(jìn)行交互的緩存系統(tǒng)和分支預(yù)測(cè)系統(tǒng),分析程序的cache命中問題;所述線程分析模塊用來(lái)檢查C\C++、Fortran程序中使用POSIX pthread原語(yǔ)的線程同步與競(jìng)爭(zhēng)的問題;所述堆棧分析模塊對(duì)程序中使用的堆棧進(jìn)行衡量,分析程序中堆內(nèi)存的使用情況; 多體系結(jié)構(gòu)仿真器模塊包括加載器模塊、初始化模塊、代碼cache模塊和OS調(diào)用仿真模塊,所述加載器模塊將Guest Code和Guest Data寫入到專門用于暫存客戶機(jī)映像的內(nèi)存區(qū)中,并且加載運(yùn)行時(shí)軟件的代碼;所述初始化模塊為代碼cache和異常索引表分配內(nèi)存空間,同時(shí)建立起客戶機(jī)應(yīng)用程序運(yùn)行時(shí)所需的全部環(huán)境;所述代碼cache模塊將翻譯過(guò)的基本代碼塊暫存,利用緩存的技術(shù),避免重復(fù)翻譯導(dǎo)致的性能下降;所述OS調(diào)用仿真模塊在遇到執(zhí)行客戶機(jī)程序中的系統(tǒng)調(diào)用時(shí),將其轉(zhuǎn)化為一個(gè)或者多個(gè)作了修改的本地系統(tǒng)調(diào)用進(jìn)行處理,然后將結(jié)果返回給客戶機(jī)程序。
【文檔編號(hào)】G06F11/36GK103955424SQ201410113492
【公開日】2014年7月30日 申請(qǐng)日期:2014年3月25日 優(yōu)先權(quán)日:2014年3月25日
【發(fā)明者】方景龍, 張東升, 鄒雪, 王興起, 王大全 申請(qǐng)人:杭州電子科技大學(xué)