專利名稱:一種帶環(huán)路徑的編碼、執(zhí)行及解碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及動(dòng)態(tài)程序分析過(guò)程中執(zhí)行信息的收集技術(shù)領(lǐng)域,特別是ー種帶環(huán)路徑的編碼、執(zhí)行及解碼方法。
背景技術(shù):
動(dòng)態(tài)程序分析是基于程序執(zhí)行的分析技術(shù),所以收集程序的執(zhí)行信息是動(dòng)態(tài)分析方法不可缺少的一部分。為了高效的收集路徑的執(zhí)行信息,現(xiàn)有技術(shù)普遍采用路徑編碼的方式,將每條路徑映射到ー個(gè)或ー組整數(shù),以快速的判斷當(dāng)前執(zhí)行的路徑是否與已執(zhí)行的某條路徑相同,方便的進(jìn)行執(zhí)行次數(shù)的累加。相應(yīng)的,為了實(shí)現(xiàn)路徑的編碼,在程序執(zhí)行之前,首先要對(duì)程序進(jìn)行插裝,在分析程序的控制流圖(CFG, control flow graph)的基礎(chǔ)上,在程序的相關(guān)位置插入ー個(gè)或多個(gè)探針變量的值操作語(yǔ)句及相關(guān)的邏輯控制、探針收集等語(yǔ)句。這樣當(dāng)程序每一次執(zhí)行完畢之后,所收集的路徑編碼計(jì)算結(jié)果就唯一確定該次執(zhí)行 的路徑。對(duì)于無(wú)環(huán)控制流,現(xiàn)有技術(shù)采用的路徑編碼方式是首先將無(wú)環(huán)控制流圖的每條邊分配ー個(gè)整數(shù)權(quán)值,各條無(wú)環(huán)路徑的編碼即為該路徑中所有邊對(duì)應(yīng)權(quán)值之和。為了實(shí)現(xiàn)該種路徑編碼,在程序中插裝的語(yǔ)句僅需在執(zhí)行中將所執(zhí)行的邊的權(quán)值進(jìn)行累加,便可計(jì)算出最終的路徑編碼。此類(lèi)方法在處理無(wú)環(huán)路徑上是精確的,且可以保證所有無(wú)環(huán)路徑的編碼是連續(xù)的整數(shù)(即路徑編碼是緊湊的),從而具有較高的存儲(chǔ)效率。在處理循環(huán)的問(wèn)題上,現(xiàn)有技術(shù)沿襲使用邊的權(quán)值累加的辦法進(jìn)行編碼的方案,但每條邊在不同的循環(huán)執(zhí)行情況可能具有不同的權(quán)值,采用帶有邏輯判斷的權(quán)值累加方案保證各條有環(huán)路徑具有唯一的編碼。但是在實(shí)際應(yīng)用中,復(fù)雜的循環(huán)往往會(huì)導(dǎo)致邏輯判斷過(guò)于復(fù)雜,難以處理。在實(shí)際的應(yīng)用中,所處理的程序往往是帶有循環(huán)的,且循環(huán)的結(jié)構(gòu)和執(zhí)行情況多種多祥,因此,針對(duì)帶環(huán)路徑的實(shí)用編碼方案不可缺少。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種帶環(huán)路徑的精確編碼方法,其能夠滿足探針計(jì)算與路徑編碼方式能夠保證各條路徑的編碼具有唯一性,達(dá)到精確收集有環(huán)控制流執(zhí)行信息的效果;處理過(guò)程間各種調(diào)用的能力使該方法能夠運(yùn)用到在面向?qū)ο蟮膱?chǎng)景之下。為了實(shí)現(xiàn)上述目的,本發(fā)明采取的技術(shù)方案為ー種帶環(huán)路徑的編碼、執(zhí)行及解碼方法,其包括以下步驟
(1).從程序源碼中獲取各個(gè)過(guò)程之間的調(diào)用關(guān)系、每個(gè)過(guò)程內(nèi)部的控制結(jié)構(gòu)以及在控制結(jié)構(gòu)基礎(chǔ)上的無(wú)環(huán)子 (2).按照路徑的不同類(lèi)型執(zhí)行相應(yīng)的插裝算法,即
對(duì)于過(guò)程內(nèi)的路徑,首先求出過(guò)程內(nèi)部具有多個(gè)入邊的節(jié)點(diǎn)集合,對(duì)于集合中的每個(gè)節(jié)點(diǎn),定義其具有η條入邊,將這η條入邊依次與從O開(kāi)始的n-Ι個(gè)連續(xù)整數(shù)相對(duì)應(yīng);然后在該邊上插裝加法和乘法相結(jié)合的探針計(jì)算語(yǔ)句,執(zhí)行終點(diǎn)處的探針變量的值對(duì)應(yīng)于所執(zhí)行路徑的編碼,以使得到的路徑編碼具有唯一性;
對(duì)于過(guò)程間的路徑,基于目標(biāo)程序中各個(gè)過(guò)程之間的調(diào)用關(guān)系,以適當(dāng)?shù)牟呗詫⑦^(guò)程集簇;如果ー個(gè)多態(tài)調(diào)用涉及的被調(diào)用方法分布在多個(gè)簇中,則對(duì)相應(yīng)的調(diào)用語(yǔ)句進(jìn)行拆解,以使每個(gè)調(diào)用邊的動(dòng)態(tài)綁定情況局限于單個(gè)簇中;然后組合各個(gè)過(guò)程內(nèi)的控制流圖得到全局控制流;對(duì)于全局控制流圖中的節(jié)點(diǎn),按照過(guò)程內(nèi)路徑的方式按序進(jìn)行插裝,且對(duì)于有多個(gè)入邊的節(jié)點(diǎn),依次在其所有入邊上插裝乘法和加法相結(jié)合的探針計(jì)算語(yǔ)句;
(3).執(zhí)行插裝后的程序,并收集相應(yīng)的路徑編碼及其頻率;
(4).由收集到的信息在控制流圖上進(jìn)行回溯,將路徑編碼轉(zhuǎn)化為路徑,以獲取路徑的執(zhí)行結(jié)果。具體的,在步驟(I)中,由控制流分析器獲取控制流結(jié)構(gòu)的相關(guān)信息,如過(guò)程間的 調(diào)用關(guān)系、過(guò)程內(nèi)的控制流圖以及在控制流圖上得出無(wú)環(huán)子圖,以應(yīng)用于編碼算法。無(wú)環(huán)子圖(RAS, Reduciable Acyclic Subgraph)是控制流圖中滿足如下的條件的子圖(1)子圖是ー個(gè)單入口單出口結(jié)構(gòu);(2)子圖中沒(méi)有回邊;(3)對(duì)于控制流圖中子圖之外的任意一個(gè)節(jié)點(diǎn)A,不存在從A指向子圖入ロ以外節(jié)點(diǎn)的邊,也不存在從子圖出ロ以外節(jié)點(diǎn)指向A的邊;(4)以子圖中節(jié)點(diǎn)為端點(diǎn)的所有非回邊都在子圖中,即如果控制流中存在一條從子圖的出口節(jié)點(diǎn)到其入口節(jié)點(diǎn)的回邊,那么該回邊可以不包括在子圖中。在控制流結(jié)構(gòu)中獲取無(wú)環(huán)子圖的意義在于,本發(fā)明的路徑編碼方法可以與已有的無(wú)環(huán)路徑編碼方法結(jié)合起來(lái)進(jìn)行,能夠在一定程度上壓縮編碼,提升效率。在獲得過(guò)程間的調(diào)用關(guān)系后,需要進(jìn)行集簇與多態(tài)處理。面向?qū)ο筌浖锌赡艽嬖谥鴱?fù)雜的多態(tài)調(diào)用關(guān)系,即一條調(diào)用邊在實(shí)際執(zhí)行的動(dòng)態(tài)綁定中可能對(duì)應(yīng)多個(gè)被調(diào)用方法。對(duì)于多態(tài)調(diào)用的一種簡(jiǎn)單的處理方式是將存在多態(tài)關(guān)系的調(diào)用邊拆分為多條調(diào)用邊,同時(shí)在代碼中添加對(duì)象類(lèi)型的判定語(yǔ)句,使每個(gè)動(dòng)態(tài)綁定的被調(diào)用方法都和一條調(diào)用邊相對(duì)應(yīng)。這樣就可以將面向?qū)ο笾械亩鄳B(tài)調(diào)用轉(zhuǎn)換為傳統(tǒng)的面向過(guò)程程序中的調(diào)用關(guān)系。但是,對(duì)于復(fù)雜的多態(tài)情況,一條調(diào)用邊往往需要被拆分為許多條調(diào)用,每ー種動(dòng)態(tài)綁定類(lèi)型都需要做代碼層次上的修改,增添了較大的耗費(fèi)。如果能夠?qū)⒍鄠€(gè)可能被調(diào)用的方法集簇處理,即全部或部分的避免上述拆分,較為簡(jiǎn)便。在獲得過(guò)程內(nèi)部的控制流圖及其基礎(chǔ)上的無(wú)環(huán)子圖后,即進(jìn)行探針計(jì)算與路徑編碼。在單個(gè)過(guò)程的控制流中,探針計(jì)算方式需要能夠區(qū)分不同的路徑。傳統(tǒng)的無(wú)環(huán)路徑編碼方法采用的計(jì)算方式是對(duì)控制流中的邊分配ー個(gè)整數(shù)作為權(quán)值,然后在執(zhí)行過(guò)程中將所執(zhí)行的邊的權(quán)值累加。合適的權(quán)值分配算法能夠保證所有的非循環(huán)路徑對(duì)應(yīng)于不同的探針變量取值。然而在帶有循環(huán)的控制流中,由于加法具有交換性且存在著同樣的邊以不同順序組成的相異路徑,使用累加邊的權(quán)值的方式無(wú)法進(jìn)行有效的區(qū)分。所以本發(fā)明采用加法和乘法相結(jié)合的方式進(jìn)行探針變量的計(jì)算。進(jìn)ー步的,本發(fā)明步驟(2)中,探針計(jì)算語(yǔ)句為定義r’為無(wú)環(huán)子圖的局部探針變量,r為單個(gè)過(guò)程內(nèi)部的全局探針變量,η為執(zhí)行終點(diǎn)的執(zhí)行路徑的數(shù)量,則執(zhí)行終點(diǎn)處探針變量的值,即所執(zhí)行路徑的編碼為r=r*n+r’。本發(fā)明中采用ー個(gè)整型變量作為探針變量,對(duì)于控制流圖中每ー個(gè)具有多個(gè)入邊的節(jié)點(diǎn),在其所有入邊上依次插裝探針語(yǔ)句,使用乘法和加法相結(jié)合的方式進(jìn)行計(jì)算,保證不同入邊的執(zhí)行對(duì)應(yīng)不同的探針變量取值。這樣,無(wú)論入邊是循環(huán)回邊還是普通邊,不同路徑必然對(duì)應(yīng)于不同的路徑編碼。如果ー個(gè)節(jié)點(diǎn)有η個(gè)前驅(qū),那么其η條入邊依次對(duì)應(yīng)于(Γη_1的整數(shù),這種計(jì)算方式下,前驅(qū)中的探針取值和所執(zhí)行的入邊信息均可以保留。這樣從路徑編碼可以準(zhǔn)確、唯一的獲知相應(yīng)的路徑。更進(jìn)一歩的,在進(jìn)行解碼時(shí),無(wú)環(huán)路徑編碼方法普遍采用的解碼方式是在目標(biāo)程序執(zhí)行之如,枚舉所有浄態(tài)無(wú)環(huán)路徑,并建立甸條路徑與其編碼的對(duì)應(yīng)關(guān)系表;在每次執(zhí)行完畢時(shí),按照所收集的編碼查表即可得知所執(zhí)行的路徑。與無(wú)環(huán)控制流不同,對(duì)于包含循環(huán)的控制流,其上靜態(tài)路徑數(shù)目無(wú)限,無(wú)法枚挙。這樣在目標(biāo)程序執(zhí)行之前,無(wú)法列出路徑編碼與路徑的一一對(duì)應(yīng)表。為了從路徑編碼的統(tǒng)計(jì)結(jié)果得出相應(yīng)的路徑執(zhí)行結(jié)果,本發(fā)明采用路徑回溯的方法獲取編碼所對(duì)應(yīng)的路徑,實(shí)現(xiàn)解碼。
從探針計(jì)算方式可以看出,ー個(gè)節(jié)點(diǎn)處探針變量值對(duì)η取余即可得到所執(zhí)行的入邊編號(hào),對(duì)η取商即可得到前驅(qū)節(jié)點(diǎn)處變量r的取值。這樣以迭代的方式,可以由路徑編碼從程序的出ロ節(jié)點(diǎn)回溯到入口節(jié)點(diǎn),即可獲知相應(yīng)的執(zhí)行路徑?;厮莘绞綆?lái)的好處在于回溯在目標(biāo)程序執(zhí)行之后進(jìn)行,避免了對(duì)未執(zhí)行路徑的運(yùn)算,由于所執(zhí)行路徑的數(shù)目與靜態(tài)路徑總數(shù)相比很小,這樣省略了大量路徑編碼的處理。本發(fā)明的有益效果為
(1)本發(fā)明的路徑編碼方法能夠保證各條循環(huán)路徑編碼的唯一性,即保證了收集路徑執(zhí)行信息的精確性。相應(yīng)的插裝方式簡(jiǎn)單高效,僅需對(duì)每個(gè)節(jié)點(diǎn)的所有入邊處理一次,免去了分析控制流、對(duì)節(jié)點(diǎn)進(jìn)行逆拓?fù)渑判虻炔襟E;其探針的構(gòu)造僅與控制流局部相關(guān)而非全局相關(guān),更適于處理復(fù)雜結(jié)構(gòu);不需區(qū)分循環(huán)的回邊與其余類(lèi)型的邊,能夠有效的處理循環(huán);
(2)在面向?qū)ο髨?chǎng)景下,其中的拆分與集簇方法能夠簡(jiǎn)明的處理多態(tài)問(wèn)題,使可編碼的對(duì)象不拘泥于過(guò)程內(nèi)路徑。
圖I所示為本發(fā)明方法的體系結(jié)構(gòu)示意 圖2所示為探針插裝算法及路徑編碼方式示意 圖3為針對(duì)無(wú)環(huán)子圖的編碼計(jì)算方式示意 圖4所示為無(wú)環(huán)子圖結(jié)構(gòu)示意 圖5所示為圖4所對(duì)應(yīng)的編碼方案示意 圖6所示為多態(tài)集簇方法示意圖。
具體實(shí)施例方式為使本發(fā)明的內(nèi)容更加明顯易懂,以下結(jié)合附圖和具體實(shí)施方式
作進(jìn)ー步描述。如圖I所示,本發(fā)明的帶環(huán)路徑的編碼、執(zhí)行及解碼方法,包括以下步驟
(I).從程序源碼中獲取各個(gè)過(guò)程之間的調(diào)用關(guān)系、每個(gè)過(guò)程內(nèi)部的控制結(jié)構(gòu)以及在控制結(jié)構(gòu)基礎(chǔ)上的無(wú)環(huán)子 (2).按照路徑的不同類(lèi)型執(zhí)行相應(yīng)的插裝算法,即
對(duì)于過(guò)程內(nèi)的路徑,首先求出過(guò)程內(nèi)部具有多個(gè)入邊的節(jié)點(diǎn)集合,對(duì)于集合中的每個(gè)節(jié)點(diǎn),定義其具有η條入變,將這η條入邊依次與從O開(kāi)始的n-Ι個(gè)連續(xù)整數(shù)相對(duì)應(yīng);然后在該邊上插裝加法和乘法相結(jié)合的探針計(jì)算語(yǔ)句,執(zhí)行終點(diǎn)處的探針變量的值對(duì)應(yīng)于所執(zhí)行路徑的編碼,以使得到的路徑編碼具有唯一性;
對(duì)于過(guò)程間的路徑,基于目標(biāo)程序中各個(gè)過(guò)程之間的調(diào)用關(guān)系,以適當(dāng)?shù)牟呗詫⑦^(guò)程集簇;如果ー個(gè)多態(tài)調(diào)用涉及的被調(diào)用方法分布在多個(gè)簇中,則對(duì)相應(yīng)的調(diào)用語(yǔ)句進(jìn)行拆解,以使每個(gè)調(diào)用邊的動(dòng)態(tài)綁定情況局限于單個(gè)簇中;然后組合各個(gè)過(guò)程內(nèi)的控制流圖得 到全局控制流;對(duì)于全局控制流圖中的節(jié)點(diǎn),按照過(guò)程內(nèi)路徑的方式按序進(jìn)行插裝,且對(duì)于有多個(gè)入邊的節(jié)點(diǎn),依次在其所有入邊上插裝乘法和加法相結(jié)合的探針計(jì)算語(yǔ)句;
(3).執(zhí)行插裝后的程序,并收集相應(yīng)的路徑編碼及其頻率;
(4).由收集到的信息在控制流圖上進(jìn)行回溯,將路徑編碼轉(zhuǎn)化為路徑,以獲取路徑的執(zhí)行結(jié)果。具體的,在步驟(I)中,由控制流分析器獲取控制流結(jié)構(gòu)的相關(guān)信息,即過(guò)程間的調(diào)用關(guān)系、過(guò)程內(nèi)的控制流圖以及在控制流圖上得出無(wú)環(huán)子圖,以應(yīng)用于編碼算法。無(wú)環(huán)子圖的結(jié)構(gòu)形式可參考圖4虛線框中所示。為了在一定程度上壓縮編碼,提升效率,本發(fā)明的路徑編碼方法與已有的無(wú)環(huán)路徑編碼方法結(jié)合起來(lái)進(jìn)行。在獲得過(guò)程間的調(diào)用關(guān)系后,需要進(jìn)行集簇與多態(tài)處理。如圖6所示,圖中共包含五個(gè)方法,方法之間存在顯式調(diào)用和潛在調(diào)用關(guān)系。之后本發(fā)明將AB和CDE分別集簇,使得調(diào)用關(guān)系僅發(fā)生在方法與簇之間,這樣就減少了調(diào)用邊,避免了代碼上的調(diào)用拆分。在添加了與調(diào)用邊相對(duì)應(yīng)的返回邊后,過(guò)程間的控制流結(jié)構(gòu)與過(guò)程內(nèi)結(jié)構(gòu)相似,即可以枚舉路徑,按照與過(guò)程內(nèi)的路徑編碼方法進(jìn)行處理。在獲得過(guò)程內(nèi)部的控制流圖及其基礎(chǔ)上的無(wú)環(huán)子圖后,即進(jìn)行探針計(jì)算與路徑編碼。為了能夠區(qū)分不同的路徑,本發(fā)明采用加法和乘法相結(jié)合的方式進(jìn)行探針變量的計(jì)算。本發(fā)明中采用ー個(gè)整型變量作為探針變量,對(duì)于控制流圖中每ー個(gè)具有多個(gè)入邊的節(jié)點(diǎn),在其所有入邊上依次插裝探針語(yǔ)句,使用乘法和加法相結(jié)合的方式進(jìn)行計(jì)算,保證不同入邊的執(zhí)行對(duì)應(yīng)不同的探針變量取值。這樣,無(wú)論入邊是循環(huán)回邊還是普通邊,不同路徑必然對(duì)應(yīng)于不同的路徑編碼。結(jié)合圖2所示,如果ー個(gè)節(jié)點(diǎn)有η個(gè)前驅(qū),那么其η條入邊依次對(duì)應(yīng)(Γη-I的整數(shù),此節(jié)點(diǎn)的編碼r的計(jì)算方式即n (i)為r=r*n+i。這種計(jì)算方式下,前驅(qū)中的探針取值和所執(zhí)行的入邊信息均可以保留。這樣從路徑編碼可以準(zhǔn)確、唯一的獲知相應(yīng)的路徑。再結(jié)合圖3來(lái)看,無(wú)環(huán)子圖中入口到出口之間有η條路徑,利用r’作為局部探針變量,r’的取值范圍為0彡r’彡n-1,則在無(wú)環(huán)子圖的出口處路徑編碼計(jì)算方式即 n(r’ )為r=r*n+r’。假設(shè)有簡(jiǎn)化的應(yīng)用實(shí)例,其目標(biāo)程序的控制流圖結(jié)構(gòu)如圖4所示,其中包含ー個(gè)虛線框內(nèi)所示的無(wú)環(huán)子圖。相應(yīng)的編碼方案和插裝語(yǔ)句如圖5所示。使用!·作為全局探針變量,r’為無(wú)環(huán)子圖的局部探針變量。在無(wú)環(huán)子圖的出口處,由于子圖中共有六條語(yǔ)句,即r’的取值為O 5,執(zhí)行終點(diǎn)處路徑的數(shù)量η為6,故可使用語(yǔ)句“r=r*6+r’”將局部路徑的編碼集成到全局路徑編碼之中。利用上述探針計(jì)算方法,按照?qǐng)D5所示的插裝方式,任意兩條路徑(包括有環(huán)路徑)的編碼不同,如路徑ABDMIGBEMJG的編碼為11,ABEMJGBDMIG的編碼為66。目標(biāo)程序在經(jīng)歷插裝、執(zhí)行之后,到解碼時(shí),本發(fā)明采用路徑回溯的方法獲取編碼所對(duì)應(yīng)的路徑,實(shí)現(xiàn)解碼從探針計(jì)算方式可以看出,ー個(gè)節(jié)點(diǎn)處探針變量值對(duì)η取余即可得到所執(zhí)行的入邊編號(hào),對(duì)η取商即可得到前驅(qū)節(jié)點(diǎn)處變量r的取值。這樣以迭代的方式,可以由路徑編碼從程序的出口節(jié)點(diǎn)回溯到入口節(jié)點(diǎn),即可獲知相應(yīng)的執(zhí)行路徑?;厮菰谀繕?biāo)程序執(zhí)行之后進(jìn)行,也避免了對(duì)未執(zhí)行路徑的運(yùn)算,由于所執(zhí)行路徑的數(shù)目與靜態(tài)路徑總數(shù)相比很小,這樣就省略了大量路徑編碼的處理。本發(fā)明中的探針計(jì)算和路徑編碼是密不可分的兩個(gè)部分,路徑的編碼與插裝的探針語(yǔ)句相對(duì)應(yīng),而探針語(yǔ)句又由所插裝的探針語(yǔ)句在目標(biāo)程序執(zhí)行過(guò)程中計(jì)算得出。精確的路徑編碼要求任一路徑的編碼具有唯一性,相應(yīng)的,不同路徑上所執(zhí)行的的探針語(yǔ)句也必須計(jì)算出不同的變量取值。 本發(fā)明方法的基礎(chǔ)在于有環(huán)控制流圖中的探針插裝方法,該方法保證了路徑編碼的唯一性,井能夠簡(jiǎn)明的得以實(shí)現(xiàn)。在此基礎(chǔ)之上,結(jié)合相應(yīng)的優(yōu)化方法,可以路徑編碼的空間,提高運(yùn)算效率;結(jié)合過(guò)程間調(diào)用的處理和優(yōu)化方式,可以應(yīng)用于面向?qū)ο蟪绦虻穆窂骄幋a之中。本發(fā)明中所述具體實(shí)施案例僅為本發(fā)明的較佳實(shí)施案例而已,并非用來(lái)限定本發(fā)明的實(shí)施范圍。即凡依本發(fā)明申請(qǐng)專利范圍的內(nèi)容所作的等效變化與修飾,都應(yīng)作為本發(fā)明的技術(shù)范疇。
權(quán)利要求
1.ー種帶環(huán)路徑的編碼、執(zhí)行及解碼方法,其特征是,包括以下步驟 (1)從程序源碼中獲取各個(gè)過(guò)程之間的調(diào)用關(guān)系、每個(gè)過(guò)程內(nèi)部的控制結(jié)構(gòu)以及在控制結(jié)構(gòu)基礎(chǔ)上的無(wú)環(huán)子圖; (2)按照路徑的不同類(lèi)型執(zhí)行相應(yīng)的插裝算法,即 對(duì)于過(guò)程內(nèi)的路徑,首先求出過(guò)程內(nèi)部具有多個(gè)入邊的節(jié)點(diǎn)集合,對(duì)于集合中的每個(gè)節(jié)點(diǎn),定義其具有η條入變,將這η條入邊依次與從O開(kāi)始的η-i個(gè)連續(xù)整數(shù)相對(duì)應(yīng);然后在該邊上插裝加法和乘法相結(jié)合的探針計(jì)算語(yǔ)句,執(zhí)行終點(diǎn)處的探針變量的值對(duì)應(yīng)于所執(zhí)行路徑的編碼,以使得到的路徑編碼具有唯一性; 對(duì)于過(guò)程間的路徑,基于目標(biāo)程序中各個(gè)過(guò)程之間的調(diào)用關(guān)系,以適當(dāng)?shù)牟呗詫⑦^(guò)程集簇;如果ー個(gè)多態(tài)調(diào)用涉及的被調(diào)用方法分布在多個(gè)簇中,則對(duì)相應(yīng)的調(diào)用語(yǔ)句進(jìn)行拆解,以使每個(gè)調(diào)用邊的動(dòng)態(tài)綁定情況局限于單個(gè)簇中;然后組合各個(gè)過(guò)程內(nèi)的控制流圖得到全局控制流;對(duì)于全局控制流圖中的節(jié)點(diǎn),按照過(guò)程內(nèi)路徑的方式按序進(jìn)行插裝,且對(duì)于有多個(gè)入邊的節(jié)點(diǎn),依次在其所有入邊上插裝乘法和加法相結(jié)合的探針計(jì)算語(yǔ)句; (3)執(zhí)行插裝后的程序,并收集相應(yīng)的路徑編碼及其頻率; (4)由步驟(3)中收集到的信息在控制流圖上進(jìn)行回溯,將路徑編碼轉(zhuǎn)化為路徑,以獲取路徑的執(zhí)行結(jié)果。
2.根據(jù)權(quán)利要求I所述的帶環(huán)路徑的編碼、執(zhí)行及解碼方法,其特征是,步驟(2)中,探針計(jì)算語(yǔ)句為:定義r’為無(wú)環(huán)子圖的局部探針變量,!·為單個(gè)過(guò)程內(nèi)部的全局探針變量,η為執(zhí)行路徑的數(shù)量,則執(zhí)行終點(diǎn)處探針變量的值,即所執(zhí)行路徑的編碼計(jì)算方式為r=r*n+r’,程序執(zhí)行完畢后的r的取值即為所執(zhí)行路徑的編碼。
全文摘要
本發(fā)明公開(kāi)了一種帶環(huán)路徑的編碼、執(zhí)行及解碼方法,其通過(guò)區(qū)分控制流圖中節(jié)點(diǎn)的各條入邊,保證有環(huán)情況下每條路徑具有唯一的編碼,并且結(jié)合面向?qū)ο筌浖蟹椒ㄩg調(diào)用關(guān)系的處理,使得該編碼方案不僅可以應(yīng)用于過(guò)程內(nèi)路徑,也可以應(yīng)用于過(guò)程間路徑,并能夠處理多態(tài)、遞歸等復(fù)雜的調(diào)用關(guān)系。此外本發(fā)明還利用控制流圖結(jié)構(gòu)中無(wú)環(huán)子圖的概念,并通過(guò)在無(wú)環(huán)子圖中應(yīng)用已有的無(wú)環(huán)路徑編碼方案,將子圖中的路徑編碼與本方法的全局路徑編碼相結(jié)合,不僅保證了路徑編碼的唯一性,且起到了壓縮編碼空間、提升編碼效率的效果。同時(shí)本發(fā)明還提供了針對(duì)性的執(zhí)行和解碼方法,簡(jiǎn)明易于實(shí)現(xiàn)。
文檔編號(hào)G06F9/44GK102693133SQ20121015967
公開(kāi)日2012年9月26日 申請(qǐng)日期2012年5月22日 優(yōu)先權(quán)日2012年5月22日
發(fā)明者李必信, 王璐璐 申請(qǐng)人:東南大學(xué)