国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      分段符號(hào)執(zhí)行裝置及其工作方法

      文檔序號(hào):6431615閱讀:147來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):分段符號(hào)執(zhí)行裝置及其工作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種結(jié)構(gòu)新穎的分段符號(hào)執(zhí)行裝置及其工作方法,用于解決程序測(cè)試時(shí)的路徑爆炸問(wèn)題,屬于計(jì)算機(jī)中的符號(hào)執(zhí)行設(shè)備的自動(dòng)測(cè)試技術(shù)領(lǐng)域。
      背景技術(shù)
      符號(hào)執(zhí)行(symbolic execution)技術(shù)是一種目前被研究領(lǐng)域廣泛認(rèn)可的、形式化的軟件和程序的自動(dòng)化測(cè)試技術(shù),符號(hào)執(zhí)行技術(shù)誕生于上世紀(jì)70年代,近幾年來(lái),該技術(shù)成為了軟件工程理論和方法研究中的熱點(diǎn),有可能成為解決軟件的自動(dòng)測(cè)試問(wèn)題的核心方法。1976年JC. King提出的符號(hào)執(zhí)行技術(shù),為自動(dòng)測(cè)試?yán)碚撟龀隽碎_(kāi)創(chuàng)性的貢獻(xiàn),成為了最受關(guān)注的形式化(formal)軟件自動(dòng)測(cè)試方法,現(xiàn)在已經(jīng)成為了一種重要的程序分析理論。符號(hào)執(zhí)行技術(shù)的核心思想是用符號(hào)表示程序的輸入數(shù)據(jù),并將程序的運(yùn)算過(guò)程逐指令或逐語(yǔ)句地轉(zhuǎn)換為數(shù)學(xué)表示式,再在程序控制流圖CFG(Contrc)I Flower Graph)的基礎(chǔ)上生成符號(hào)執(zhí)行樹(shù),并為每一條路徑建立一系列的、以輸入數(shù)據(jù)為變量的表達(dá)式。符號(hào)執(zhí)行的定義是假設(shè)對(duì)程序輸入數(shù)據(jù)X(該X為未知數(shù)向量)的可執(zhí)行路徑 P進(jìn)行解析,依次分析程序中的每個(gè)語(yǔ)句和指令,將路徑P中的每一次判斷與跳轉(zhuǎn)對(duì)輸入數(shù)據(jù)的要求都用X的數(shù)學(xué)表達(dá)式,即P的路徑條件PC(path condition)來(lái)表示。然后,再對(duì)該路徑表達(dá)式求解,得到的輸入數(shù)據(jù)、即未知數(shù)向量X的解,再將該X放入程序,就能夠執(zhí)行路徑P,進(jìn)而實(shí)現(xiàn)遍歷路徑的目的。這樣,符號(hào)執(zhí)行的過(guò)程可概括為“假設(shè)變量,建立數(shù)學(xué)表達(dá)式,求解數(shù)學(xué)表達(dá)式”。因此,符號(hào)執(zhí)行是一種路徑敏感性(path-sensitive)的程序分析方法,也是程序靜態(tài)分析和程序自動(dòng)化測(cè)試的重要理論基礎(chǔ)。符號(hào)執(zhí)行的最主要貢獻(xiàn)是將程序測(cè)試問(wèn)題轉(zhuǎn)換成為求解數(shù)據(jù)表達(dá)式的數(shù)學(xué)問(wèn)題。符號(hào)執(zhí)行的過(guò)程是從CFG的入口點(diǎn)開(kāi)始,先將所涉及到的變量符號(hào)化,即用符號(hào)表示變量值;再依次解析程序中的語(yǔ)句和指令,將其翻譯為符號(hào)表達(dá)式。每個(gè)變量的值都采用符號(hào)化的變量和常數(shù)所構(gòu)造的數(shù)學(xué)表達(dá)式來(lái)表示,并在每一個(gè)節(jié)點(diǎn)記錄變量的符號(hào)運(yùn)算表達(dá)式PF(path function)。符號(hào)執(zhí)行過(guò)程中遇到流程控制語(yǔ)言時(shí),就將條件判斷語(yǔ)句對(duì)變量值的要求附加到路徑條件中;再以此循環(huán)執(zhí)行。參見(jiàn)

      圖1,介紹一個(gè)典型的基本符號(hào)執(zhí)行算法的基本過(guò)程的源程序。符號(hào)執(zhí)行是在程序的控制流圖上進(jìn)行的,因此,該算法是先調(diào)用ParseToControlFlow構(gòu)造控制流圖CFG, 然后從CRi入口點(diǎn)開(kāi)始遍歷(在travsel函數(shù)實(shí)現(xiàn))。再依次解析語(yǔ)句如果為賦值語(yǔ)句, 則構(gòu)造PF ;如果為條件語(yǔ)句,則構(gòu)造后續(xù)節(jié)點(diǎn)的PC。在構(gòu)造PF時(shí),如果源操作數(shù)在前向節(jié)點(diǎn)有效PF中有中間表達(dá)式,需要展開(kāi)之,算法中的PF的功能是獲得變量對(duì)應(yīng)的表達(dá)式,還要保證PC中的變量都為輸入數(shù)據(jù)的符號(hào)變量。參見(jiàn)圖2,介紹一段程序及其CFG。該CFG是有唯一的入口點(diǎn)和出口點(diǎn)的有向圖, 圖中的節(jié)點(diǎn)為順序執(zhí)行過(guò)程,邊用于表示執(zhí)行流程的跳轉(zhuǎn)關(guān)系。
      將圖1所示的算法,實(shí)施于圖2所示的程序,其符號(hào)執(zhí)行的具體過(guò)程如下(1)從 <start> 節(jié)點(diǎn)開(kāi)始,執(zhí)行后續(xù)節(jié)點(diǎn)(successor) <1,2>。(2)節(jié)點(diǎn)<1,2>的執(zhí)行條件為T(mén)RUE,表示一定會(huì)被執(zhí)行的。此時(shí),符號(hào)變量A、B、C 的值分別為B、B、0。(3)執(zhí)行節(jié)點(diǎn)<3>,節(jié)點(diǎn)<3>沒(méi)有賦值語(yǔ)言,進(jìn)行了條件判斷;<3>的執(zhí)行條件同為 TRUE, PF沒(méi)有改變。(4) <3>的后續(xù)節(jié)點(diǎn)是根據(jù)遍歷方法選擇執(zhí)行。該示例中是選擇廣度優(yōu)先的遍歷方法。(5)執(zhí)行到節(jié)點(diǎn)<4>,PC發(fā)生了改變,從<3>到<4>的條件為B> 1,與其前驅(qū)條件 <3>的執(zhí)行條件TRUE合取(即執(zhí)行<3>是執(zhí)行<4>的前提條件,為B > 1)。相應(yīng)的執(zhí)行到 <end>節(jié)點(diǎn)的執(zhí)行條件為B < = 1。(6)以此方式執(zhí)行,最終形成類(lèi)似于圖3所示的符號(hào)執(zhí)行樹(shù)。程序的符號(hào)執(zhí)行過(guò)程,也是符號(hào)執(zhí)行樹(shù)的生成過(guò)程。圖3是一個(gè)符號(hào)執(zhí)行樹(shù)的部分。圖3所示的樹(shù)沒(méi)有完成遍歷,表1只是其中一條完整路徑的執(zhí)行過(guò)程。樹(shù)中的每個(gè)節(jié)點(diǎn)包括了其在CFG中的位置、PC和PF,且PC和PF都用符號(hào)表達(dá)式表示,每個(gè)輸入數(shù)據(jù)都表示為符號(hào)。PC和PF存在于符號(hào)執(zhí)行樹(shù)中的每個(gè)節(jié)點(diǎn),也是求解特定執(zhí)行路徑輸入數(shù)據(jù)的基礎(chǔ)。表1完整路徑的符號(hào)執(zhí)行過(guò)程
      權(quán)利要求
      1. 一種分段符號(hào)執(zhí)行裝置,用于解析中間語(yǔ)言程序,并在虛擬機(jī)中進(jìn)行符號(hào)執(zhí)行時(shí)的裝置,且在執(zhí)行過(guò)程中,既不執(zhí)行程序運(yùn)行時(shí)的編譯操作,也不產(chǎn)生實(shí)際執(zhí)行的效果,只產(chǎn)生符號(hào)執(zhí)行的結(jié)果;其特征在于該裝置采用PYTE中間語(yǔ)言和能夠解析PYTE語(yǔ)言的虛擬機(jī),支持對(duì)具有復(fù)雜數(shù)據(jù)類(lèi)型和復(fù)雜調(diào)用關(guān)系的目標(biāo)程序進(jìn)行符號(hào)執(zhí)行;且在符號(hào)執(zhí)行時(shí), 基于PYTE語(yǔ)言對(duì)函數(shù)參數(shù)進(jìn)行輸入輸出IO屬性的劃分,對(duì)目標(biāo)程序進(jìn)行分段,以緩解大型程序符號(hào)執(zhí)行時(shí)的路徑爆炸,使得對(duì)大型程序的符號(hào)執(zhí)行時(shí)間與其規(guī)模的關(guān)聯(lián)程度,從呈指數(shù)相關(guān)降低為呈正比例相關(guān);同時(shí),通過(guò)該裝置的實(shí)際執(zhí)行進(jìn)程控制與交互器模塊與實(shí)際執(zhí)行相結(jié)合,避免符號(hào)分段執(zhí)行時(shí),因數(shù)據(jù)結(jié)構(gòu)復(fù)雜造成結(jié)果不精確;并對(duì)實(shí)際執(zhí)行數(shù)據(jù)符號(hào)時(shí)的執(zhí)行中的路徑條件進(jìn)行約束求解,判斷是否符合執(zhí)行條件,以提高路徑遍歷的覆蓋率,以及程序分析和測(cè)試結(jié)果的準(zhǔn)確率;該裝置設(shè)有下述模塊語(yǔ)言翻譯模塊,負(fù)責(zé)將C或C++源代碼和x86平臺(tái)匯編代碼翻譯為PYTE代碼,并對(duì)目標(biāo)程序進(jìn)行數(shù)據(jù)流分析和分段處理,再給出明確標(biāo)記;還使用輸入IN、輸出OUT、不確定輸出 MAY_0UT的符號(hào)標(biāo)記調(diào)用的參數(shù)屬性,以使指令解析和符號(hào)執(zhí)行器模塊在執(zhí)行PYTE文件過(guò)程中,能夠識(shí)別和執(zhí)行調(diào)用的操作;指令指針模塊,負(fù)責(zé)接收PYTE文件中流程控制語(yǔ)句的控制,或者按照該P(yáng)YTE文件中的指令順序控制指令解析和符號(hào)執(zhí)行器模塊完成符號(hào)執(zhí)行操作;該模塊也能接受設(shè)定的指令指針,將裝置恢復(fù)到設(shè)定狀態(tài);指令解析和符號(hào)執(zhí)行器模塊,作為該裝置的核心模塊,設(shè)置有一套解釋與執(zhí)行PYTE文件的處理流程和在執(zhí)行過(guò)程中使用的、表示符號(hào)化對(duì)象的多種內(nèi)部數(shù)據(jù),用于接收指令指針模塊中的指令指針指向的指令,再根據(jù)該指令格式解析并理解指令,進(jìn)行符號(hào)的分段執(zhí)行操作,生成執(zhí)行結(jié)果路徑條件PC和符號(hào)運(yùn)算表達(dá)式PF,還改變符號(hào)化內(nèi)存模塊和符號(hào)化對(duì)象模塊的狀態(tài);調(diào)用實(shí)際執(zhí)行進(jìn)程控制與交互器模塊完成實(shí)際執(zhí)行操作;符號(hào)化對(duì)象模塊,負(fù)責(zé)將PYTE文件中操作的系統(tǒng)對(duì)象符號(hào)化,以便利用設(shè)置的符號(hào)變量表示該符號(hào)化對(duì)象的屬性;在PYTE程序進(jìn)行創(chuàng)建、關(guān)閉或操作符號(hào)化的對(duì)象類(lèi)型時(shí),該模塊會(huì)相應(yīng)地建立或消除符號(hào)化對(duì)象;對(duì)象的符號(hào)化操作過(guò)程需要在操作系統(tǒng)的監(jiān)視器實(shí)時(shí)監(jiān)控其運(yùn)行;符號(hào)化內(nèi)存模塊,負(fù)責(zé)在指令解析和符號(hào)執(zhí)行器模塊執(zhí)行PYTE程序時(shí),將其中所有的內(nèi)存操作都映射到該模塊內(nèi)完成;且為能真實(shí)模擬程序運(yùn)行,該模塊能夠根據(jù)中間語(yǔ)言執(zhí)行包括分配、釋放、移動(dòng)、拷貝和設(shè)置的多種內(nèi)存操作,還能夠執(zhí)行與內(nèi)存分配相關(guān)的系統(tǒng)函數(shù),將高級(jí)語(yǔ)言直接轉(zhuǎn)換為PYTE語(yǔ)言中的對(duì)應(yīng)指令;該模塊對(duì)調(diào)用過(guò)程中分配的內(nèi)存要進(jìn)行處理,且外部調(diào)用過(guò)程的內(nèi)存操作是在操作系統(tǒng)監(jiān)視器的監(jiān)控中通過(guò)監(jiān)控內(nèi)存操作來(lái)實(shí)現(xiàn)的;內(nèi)部狀態(tài)模塊,設(shè)有包括指向符號(hào)化對(duì)象列表的寄存器和符號(hào)化堆棧的多個(gè)寄存器, 用于存儲(chǔ)該裝置的內(nèi)部狀態(tài),即分段符號(hào)的執(zhí)行狀態(tài);約束求解器模塊,用于完成對(duì)以一組等式或不等式表示的PC進(jìn)行約束求解的數(shù)學(xué)運(yùn)算,即處理PC等式或不等式組的解可滿足性問(wèn)題,實(shí)現(xiàn)自動(dòng)生成程序中每條路徑對(duì)應(yīng)的一個(gè)輸入數(shù)據(jù)向量的功能;實(shí)際執(zhí)行進(jìn)程控制與交互器模塊,當(dāng)執(zhí)行過(guò)程中發(fā)生外部調(diào)用,指令解析和符號(hào)執(zhí)行器模塊需要控制實(shí)際程序的執(zhí)行時(shí),該模塊負(fù)責(zé)與實(shí)際執(zhí)行進(jìn)行交互,讀取內(nèi)存或變量數(shù)值;同時(shí),該模塊還監(jiān)控外部調(diào)用過(guò)程中,對(duì)系統(tǒng)對(duì)象的操作,并通知其他模塊將系統(tǒng)對(duì)象符號(hào)化。
      2.根據(jù)權(quán)利要求1所述的分段符號(hào)執(zhí)行裝置,其特征在于所述PYTE中間語(yǔ)言是介于機(jī)器語(yǔ)言和源程序語(yǔ)言之間的一種能處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和適用于程序分段后進(jìn)行符號(hào)執(zhí)行的中間語(yǔ)言,它基于LLVM中間語(yǔ)言擴(kuò)展而成,用于進(jìn)行程序分析、優(yōu)化和測(cè)試。
      3.根據(jù)權(quán)利要求2所述的分段符號(hào)執(zhí)行裝置,其特征在于所述PYTE中間語(yǔ)言的特點(diǎn)是在數(shù)據(jù)類(lèi)型系統(tǒng)中增加了堆塊形數(shù)據(jù)類(lèi)型,將程序動(dòng)態(tài)分配的內(nèi)存作為一種數(shù)據(jù)類(lèi)型; 在指令集上增加了直接操作堆塊數(shù)據(jù)類(lèi)型的指令,將高級(jí)語(yǔ)言的內(nèi)存管理函數(shù)翻譯為堆塊類(lèi)型數(shù)據(jù)的操作指令;區(qū)分函數(shù)參數(shù)的IO屬性類(lèi)型,即將該參數(shù)根據(jù)其IO特性分為三種 輸入I、輸出O和不確定輸出MAY_0UT。
      4.一種分段符號(hào)執(zhí)行裝置的分段符號(hào)執(zhí)行方法,其特征在于將一個(gè)代碼量大的程序拆分為多個(gè)小程序單元,然后,對(duì)每個(gè)小程序單元順序進(jìn)行分析;且在拆分后,將過(guò)程間的調(diào)用關(guān)系分為單元內(nèi)的過(guò)程調(diào)用和單元外的過(guò)程調(diào)用,分別進(jìn)行相應(yīng)處理;包括下列操作步驟(1)分段符號(hào)執(zhí)行裝置的語(yǔ)言翻譯模塊將匯編語(yǔ)言或高級(jí)程序語(yǔ)言程序翻譯為PYTE 程序,對(duì)程序進(jìn)行數(shù)據(jù)流分析,根據(jù)主調(diào)函數(shù)和被調(diào)函數(shù)對(duì)參數(shù)的訪問(wèn)過(guò)程,判斷函數(shù)的參數(shù)屬性并進(jìn)行標(biāo)記后;將處理后的PYTE程序送到指令指針模塊;(2)指令指針模塊按照PYTE文件中的指令順序,或者接收PYTE文件中流程控制語(yǔ)句的控制,將選取執(zhí)行的指令送入指令解析和符號(hào)執(zhí)行器模塊;(3)指令解析和符號(hào)執(zhí)行器模塊解析指令指針模塊送入的指令,根據(jù)該指令格式進(jìn)行解析和理解,進(jìn)行符號(hào)執(zhí)行并生成執(zhí)行結(jié)果PC、PF,同時(shí)改變符號(hào)化內(nèi)存模塊和符號(hào)化對(duì)象模塊的狀態(tài),再將符號(hào)執(zhí)行結(jié)果送入約束求解器模塊,判斷是否滿足求解條件,即是否符合執(zhí)行條件,實(shí)現(xiàn)遍歷路徑的目的;若滿足,則執(zhí)行步驟(4);否則,放棄執(zhí)行,流程結(jié)束;與此同時(shí),在操作系統(tǒng)監(jiān)視器的實(shí)時(shí)監(jiān)控下,符號(hào)化對(duì)象模塊將PYTE文件中操作的系統(tǒng)對(duì)象符號(hào)化,并利用設(shè)置的符號(hào)變量表示該符號(hào)化對(duì)象的屬性,再將符號(hào)化結(jié)果送入內(nèi)部狀態(tài)模塊存儲(chǔ);內(nèi)部狀態(tài)模塊利用包括指向符號(hào)化對(duì)象列表的寄存器和符號(hào)化堆棧的多個(gè)寄存器,存儲(chǔ)指令解析和符號(hào)執(zhí)行器模塊傳送來(lái)的分段符號(hào)執(zhí)行狀態(tài)和其他模塊的工作狀態(tài);符號(hào)化內(nèi)存模塊在指令解析和符號(hào)執(zhí)行器模塊執(zhí)行PYTE程序時(shí),將后者各種內(nèi)存操作都映射到該符號(hào)化內(nèi)存模塊內(nèi)完成,并存儲(chǔ)其執(zhí)行結(jié)果;(4)約束求解器模塊執(zhí)行和完成對(duì)等式或不等式組PC進(jìn)行的約束求解數(shù)學(xué)運(yùn)算,自動(dòng)生成程序中每條路徑對(duì)應(yīng)的一個(gè)輸入數(shù)據(jù)向量;(5)在發(fā)生外部調(diào)用時(shí),實(shí)際執(zhí)行進(jìn)程控制與交互器模塊負(fù)責(zé)與實(shí)際執(zhí)行進(jìn)行交互,讀取內(nèi)存或變量數(shù)值;并在外部調(diào)用過(guò)程中,該模塊監(jiān)控系統(tǒng)對(duì)象的操作,并通知其他模塊將系統(tǒng)對(duì)象符號(hào)化;(6)完成調(diào)用過(guò)程,將處理結(jié)果傳送給硬件設(shè)備。
      全文摘要
      一種分段符號(hào)執(zhí)行裝置及其工作方法,裝置設(shè)有語(yǔ)言翻譯、指令指針,指令解析和符號(hào)執(zhí)行器,符號(hào)化對(duì)象,符號(hào)化內(nèi)存,內(nèi)部狀態(tài),約束求解器和實(shí)際執(zhí)行進(jìn)程控制與交互器等模塊,采用PYTE語(yǔ)言和能解析該語(yǔ)言的虛擬機(jī),支持對(duì)數(shù)據(jù)類(lèi)型和調(diào)用關(guān)系都復(fù)雜的程序進(jìn)行符號(hào)執(zhí)行;且在符號(hào)執(zhí)行時(shí),對(duì)函數(shù)參數(shù)劃分IO屬性和對(duì)程序分段,緩解路徑爆炸,使得對(duì)大程序的符號(hào)執(zhí)行時(shí)間與其規(guī)模的關(guān)聯(lián)程度降低為正比例相關(guān);還通過(guò)結(jié)合實(shí)際執(zhí)行,避免符號(hào)分段執(zhí)行的結(jié)果不精確;并對(duì)實(shí)際執(zhí)行中的路徑條件進(jìn)行約束求解,判斷是否符合執(zhí)行條件,提高路徑遍歷的覆蓋率,以及程序分析和測(cè)試結(jié)果的準(zhǔn)確率,使得在實(shí)際系統(tǒng)的運(yùn)行環(huán)境下,對(duì)大程序的符號(hào)執(zhí)行技術(shù)達(dá)到實(shí)用化。
      文檔編號(hào)G06F11/36GK102289362SQ201110249700
      公開(kāi)日2011年12月21日 申請(qǐng)日期2011年8月26日 優(yōu)先權(quán)日2011年8月26日
      發(fā)明者安靖, 常晶, 張冬梅, 范文慶, 鐘金鑫, 魏更宇 申請(qǐng)人:北京郵電大學(xué)
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1