欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法

文檔序號(hào):10552822閱讀:352來(lái)源:國(guó)知局
一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法
【專利摘要】本發(fā)明提供一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法,首先分析函數(shù)所有路徑,輸入:一個(gè)函數(shù)所有的邏輯路徑,函數(shù)信息,控制流圖,函數(shù)實(shí)參列表;輸出:所有路徑的約束系統(tǒng);然后單個(gè)路徑分析,輸入:一條邏輯路徑,函數(shù)信息,控制流圖,函數(shù)實(shí)參列表。輸出:該條路徑的約束系統(tǒng)以及一些附加信息。約束系統(tǒng):關(guān)于數(shù)組變量的所有范圍約束;附加信息:函數(shù)信息,函數(shù)調(diào)用關(guān)系,路徑信息。
【專利說(shuō)明】
一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于符號(hào)執(zhí)行技術(shù)領(lǐng)域,涉及一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法。
【背景技術(shù)】
[0002]符號(hào)執(zhí)行是指在不執(zhí)行程序的前提下,用符號(hào)值表示程序變量的值,然后模擬程序執(zhí)行來(lái)進(jìn)行相關(guān)分析的技術(shù),它可以分析代碼的所有語(yǔ)義信息,也可以只分析部分語(yǔ)義信息(如只分析“內(nèi)存是否釋放”這一部分的語(yǔ)義信息)。符號(hào)執(zhí)行通常也被理解為符號(hào)預(yù)測(cè),屬于靜態(tài)測(cè)試方法的一種,其基本思想是:將程序源代碼中變量的值采用抽象化符號(hào)的形式表示,模擬程序執(zhí)行,其適用于在對(duì)路徑敏感的程序分析中。通常意義下的程序執(zhí)行是給出具體的輸入數(shù)據(jù)使得程序能夠沿著某一特定路徑執(zhí)行并輸出與之對(duì)應(yīng)的具體結(jié)果。然而符號(hào)執(zhí)行的目的是分析程序中變量之間的約束關(guān)系,不需制定具體的輸入數(shù)據(jù),將變量作為代數(shù)中的抽象符號(hào)處理結(jié)合程序的約束條件進(jìn)行推理,結(jié)果是一些描述變量間關(guān)系的表達(dá)式。在符號(hào)執(zhí)行的過(guò)程中,CFG中的分支導(dǎo)致了對(duì)于變量的不同的約束條件,而這些約束條件就描述了相應(yīng)路徑的測(cè)試數(shù)據(jù)間的約束關(guān)系。
[0003]數(shù)組越界故障是在利用數(shù)組名和其下標(biāo)引用數(shù)組中的元素時(shí),下標(biāo)值超出了數(shù)組的長(zhǎng)度范圍而產(chǎn)生的。當(dāng)用數(shù)組名和其下標(biāo)引用數(shù)組元素時(shí),其下標(biāo)形式可以歸納為以下3種形式:(I)數(shù)組下標(biāo)是一常數(shù),例如varname[7] ; (2)數(shù)組下標(biāo)是一個(gè)變量,,例如varname[j] ; (3)數(shù)組下標(biāo)是一個(gè)表達(dá)式,例如¥31'1^1116[;[*1^+_]_*2]。數(shù)組的下標(biāo)無(wú)論是上述哪3種形式,下標(biāo)都可以看作是整型表達(dá)式(常數(shù)是最簡(jiǎn)單的表達(dá)式)。但由于數(shù)組下標(biāo)表達(dá)式中某些變量受用戶輸入或程序多分支的影響,其靜態(tài)計(jì)算結(jié)果往往不是一個(gè)明確的值而是一個(gè)整型區(qū)間,即每一個(gè)數(shù)組變量映射一個(gè)區(qū)間r,區(qū)間表示數(shù)組下標(biāo)的整數(shù)范圍,在對(duì)數(shù)組變量進(jìn)行訪問(wèn)時(shí),比較區(qū)間r和區(qū)間[O,len-1], Ien表示數(shù)組變量定義的長(zhǎng)度,如果r&[0,Ien-1 ],則對(duì)數(shù)組的操作在允許的范圍之內(nèi),是正確的,否則就會(huì)發(fā)生數(shù)組越界故障。
[0004]區(qū)間運(yùn)算:區(qū)間作為整型值的一種代數(shù)表現(xiàn)形式,滿足一定的性質(zhì),這里將一些基本的代數(shù)運(yùn)算如+、_、*、/等操作擴(kuò)展到整型區(qū)間上,通過(guò)區(qū)間運(yùn)算,實(shí)現(xiàn)對(duì)變量區(qū)間的更新和傳播。
[0005]假設(shè)min(xl,x2,…)和max(xl,x2,…)這兩個(gè)函數(shù)意義分別表示為求參數(shù)的最小值和最大值。設(shè)xe [a,b],ye[c,d],a<b,c<d^z = a+MgSzG [e,f ],區(qū)間[e,f ]可按以下規(guī)則確定:
[0006][a,b] + [c,d] = [a+c ,b+d] ; [a,b]-[c,d] = [a_d,b_c] ;[a,b]X[c,d] = [min(ac,ad,bc,bd),max(ac,ad,bc,bd) ] ;ab>0時(shí) l/[a,b] = [ 1/b, l/a,ab〈0 時(shí),l/[a,b] = (-°°,l/a]
[0007][min(a/c,a/d,b/c,b/d),max(a/c,a/d,b/c,b/d)],c<d〈0
[0008][min(a/c,a/d,b/c,b/d),max(a/c,a/d,b/c,b/d)],0<c^;d
[0009][-OO , + oo] ,c^O^d
[0010]}
[0011]以上是最基本的區(qū)間運(yùn)算規(guī)則,,在這個(gè)基礎(chǔ)上可以根據(jù)具體被測(cè)程序?qū)ι鲜鲆?guī)則進(jìn)行擴(kuò)充,用來(lái)計(jì)算數(shù)組下標(biāo)表達(dá)式在程序的每條執(zhí)行路徑上具體區(qū)間范圍r。
[0012]區(qū)間傳播:所謂區(qū)間傳播就是這個(gè)整型區(qū)間沿著程序路徑得到不斷更新和傳播,使數(shù)組下標(biāo)表達(dá)式中每一個(gè)變量映射一個(gè)最能反映變量此刻狀態(tài)的值的區(qū)間。將整型變量映射為一個(gè)整型區(qū)間[min,max],然后通過(guò)對(duì)程序控制流圖的分析,不斷進(jìn)行區(qū)間更新。這里,每一個(gè)整型變量對(duì)應(yīng)一個(gè)區(qū)間,變量的區(qū)間可以通過(guò)多種操作進(jìn)行改變,變量在定義時(shí)如果沒(méi)有進(jìn)行初始化,則變量區(qū)間被定義為[_°°,+ °°]。隨著變量的變化,變量區(qū)間也不斷變化,一般是通過(guò)賦值語(yǔ)句改變變量區(qū)間,對(duì)變量的區(qū)間進(jìn)行重新定義,同時(shí)也可以通過(guò)其它的方法改變變量的區(qū)間,比如作為參數(shù)傳遞到函數(shù)體,在函數(shù)體里對(duì)參數(shù)進(jìn)行操作,再傳遞到函數(shù)外面。通常,一個(gè)變量的定義伴隨著一個(gè)區(qū)間的產(chǎn)生,而變量的結(jié)束暗示著區(qū)間的消亡。
[0013]符號(hào)執(zhí)行雖然精度較高,但是在遍歷過(guò)程中,約束會(huì)越來(lái)越復(fù)雜,求解的難度會(huì)越來(lái)越難;而區(qū)間分析在處理復(fù)雜的控制語(yǔ)句時(shí)會(huì)出現(xiàn)精度下降的問(wèn)題。本方案將符號(hào)執(zhí)行與區(qū)間分析相結(jié)合,利用符號(hào)執(zhí)行的路徑選擇優(yōu)勢(shì)解決區(qū)間分析中存在的問(wèn)題,利用區(qū)間分析的思想降低符號(hào)執(zhí)行約束的復(fù)雜度。
[0014]數(shù)組越界是緩沖區(qū)溢出故障類型中的一種最常見(jiàn)的故障,它是由于對(duì)數(shù)組下標(biāo)的操作超過(guò)了下標(biāo)范圍而引起的,數(shù)組越界在使用數(shù)組類型進(jìn)行程序設(shè)計(jì)的軟件中普遍存在。數(shù)組越界通常分為上溢和下溢。譬如聲明一個(gè)數(shù)組,其大小為len,則其下標(biāo)范圍為R =[0,1611-1],如果以」為數(shù)組下標(biāo)引用數(shù)組元素時(shí),!_]_£1?,則不會(huì)發(fā)生故障,如果」〈0,則發(fā)生故障,稱之為下溢;如果j>len_l,則稱之為上溢。因此通常對(duì)數(shù)組邊界的檢查要包括兩部分,即檢查數(shù)組上界和下界,只有對(duì)下標(biāo)的操作在其區(qū)間內(nèi),才能保證對(duì)數(shù)組的使用無(wú)誤,否則就會(huì)發(fā)生數(shù)組越界故障。

【發(fā)明內(nèi)容】

[0015]本發(fā)明為了解決上述技術(shù)問(wèn)題,提出一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法。
[0016]本發(fā)明通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
[0017]—種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法,包括以下步驟:
[0018]步驟一、分析函數(shù)所有路徑,遍歷函數(shù)的邏輯路徑列表,得到其中的第一個(gè)路徑對(duì)象path,如果path為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);否則將路徑對(duì)象、函數(shù)信息、控制流圖、實(shí)參列表作為參數(shù),執(zhí)行單個(gè)路徑分析,將path指向下一個(gè)邏輯路徑對(duì)象,然后執(zhí)行步驟二;
[0019]步驟二、單個(gè)路徑分析,如果函數(shù)實(shí)參列表的大小不為0,執(zhí)行步驟三;否則,執(zhí)行步驟四;
[0020]步驟三、根據(jù)函數(shù)信息,把實(shí)參的約束,值傳遞給形參變量,并添加到約束列表和變量類型列表中;
[0021]步驟四、遍歷該路徑,得到它的第一個(gè)結(jié)點(diǎn)node;如果node為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);否則,執(zhí)行步驟五;
[0022]步驟五、通過(guò)node的編號(hào)信息,在控制流圖中查找到對(duì)應(yīng)的控制流結(jié)點(diǎn),對(duì)該控制流圖結(jié)點(diǎn)的語(yǔ)句類型進(jìn)行判斷,如果語(yǔ)句類型為VARIABLE_DEF,則執(zhí)行步驟六;如果語(yǔ)句類型為Assign_EXPR,則執(zhí)行步驟七;如果語(yǔ)句類型為for,則執(zhí)行步驟八;如果語(yǔ)句類型為Other_EXPR,則執(zhí)行步驟九;
[0023]步驟六、語(yǔ)句類型為VARIABLE_DEF:將該語(yǔ)句涉及的變量添加到變量類型列表,如果涉及的是數(shù)組或整型變量,生成區(qū)間表示,利用區(qū)間與上下界生成約束,并添加到約束列表中;
[0024]步驟七、語(yǔ)句類型為Assign_EXPR:如果語(yǔ)句涉及的變量是整型或數(shù)組變量,則進(jìn)行區(qū)間運(yùn)算,生成約束,并添加到約束列表中;
[0025]步驟八、語(yǔ)句類型為for:通過(guò)控制流圖結(jié)點(diǎn),得到for的條件表達(dá)式信息,解析該條件表達(dá)式,得到整形變量名稱,初始值,根據(jù)相應(yīng)的約束規(guī)則,生成該整型變量的約束,并以(變量名稱,約束)的形式存儲(chǔ)到變量類型列表中;
[0026]步驟九、語(yǔ)句類型為Other_EXPR:該語(yǔ)句是函數(shù)調(diào)用。根據(jù)實(shí)參和參數(shù)類型列表,如果實(shí)參是數(shù)組或整型變量,則要把約束賦給相應(yīng)的形參,并且把所有實(shí)參的值賦給形參,然后執(zhí)行步驟一分析函數(shù)所有路徑。
【附圖說(shuō)明】
[0027]圖1為本發(fā)明基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法流程圖。
【具體實(shí)施方式】
[0028]下面對(duì)本發(fā)明作進(jìn)一步介紹。
[0029]如圖1所示,本方法在控制流圖的基礎(chǔ)上進(jìn)行分析。
[0030](I)分析函數(shù)所有路徑
[0031 ]輸入:一個(gè)函數(shù)所有的邏輯路徑,函數(shù)信息,控制流圖,函數(shù)實(shí)參列表
[0032]輸出:所有路徑的約束系統(tǒng)
[0033]流程
[0034]1.遍歷函數(shù)的邏輯路徑列表,得到其中的第一個(gè)路徑對(duì)象path。
[0035]2.如果path為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);
[0036]否則,將路徑對(duì)象,函數(shù)信息,控制流圖,實(shí)參列表作為參數(shù),執(zhí)行單個(gè)路徑分析。
[0037]3.將path指向下一個(gè)邏輯路徑對(duì)象,然后執(zhí)行流程2。
[0038](2)單個(gè)路徑分析
[0039]輸入:一條邏輯路徑,函數(shù)信息,控制流圖,函數(shù)實(shí)參列表。
[0040]輸出:該條路徑的約束系統(tǒng)以及一些附加信息。約束系統(tǒng):關(guān)于數(shù)組變量的所有范圍約束;附加信息:函數(shù)信息,函數(shù)調(diào)用關(guān)系,路徑信息。
[0041]流程:
[0042]1.如果函數(shù)實(shí)參列表的大小不為0,執(zhí)行流程2;否則,執(zhí)行流程3。
[0043]2.根據(jù)函數(shù)信息,把實(shí)參的約束,值傳遞給形參變量,并添加到約束列表和變量類型列表中。
[0044]3.遍歷該路徑,得到它的第一個(gè)結(jié)點(diǎn)node。
[0045]4.如果node為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);
[0046]否則,執(zhí)行流程5。
[0047]5.通過(guò)node的編號(hào)信息,可以在控制流圖中查找到對(duì)應(yīng)的控制流結(jié)點(diǎn)。對(duì)該控制流圖結(jié)點(diǎn)的語(yǔ)句類型進(jìn)行判斷,如果語(yǔ)句類型為VARIABLE_DEF,則執(zhí)行流程6;如果語(yǔ)句類型為Assign_EXPR,則執(zhí)行流程7;如果語(yǔ)句類型為for,則執(zhí)行流程8;如果語(yǔ)句類型為Other_EXPR,則執(zhí)行流程9。
[0048]6.語(yǔ)句類型為VARIABLE_DEF:將該語(yǔ)句涉及的變量添加到變量類型列表,如果涉及的是數(shù)組或整型變量,生成區(qū)間表示,利用區(qū)間與上下界生成約束,并添加到約束列表中。
[0049]7.語(yǔ)句類型為Assign_EXPR:如果語(yǔ)句涉及的變量是整型或數(shù)組變量,則進(jìn)行區(qū)間運(yùn)算,生成約束,并添加到約束列表中。
[0050]8.語(yǔ)句類型為for:通過(guò)控制流圖結(jié)點(diǎn),得到for的條件表達(dá)式信息,解析該條件表達(dá)式,得到整形變量名稱,初始值,根據(jù)相應(yīng)的約束規(guī)則,生成該整型變量的約束,并以(變量名稱,約束)的形式存儲(chǔ)到變量類型列表中。
[0051]9.語(yǔ)句類型為Other_EXPR:該語(yǔ)句是函數(shù)調(diào)用。根據(jù)實(shí)參和參數(shù)類型列表,如果實(shí)參是數(shù)組或整型變量,則要把約束賦給相應(yīng)的形參,并且把所有實(shí)參的值賦給形參,然后執(zhí)行(I)分析函數(shù)所有路徑。
【主權(quán)項(xiàng)】
1.一種基于符號(hào)執(zhí)行的數(shù)組越界檢測(cè)方法,其特征在于,包括以下步驟: 步驟一、分析函數(shù)所有路徑,遍歷函數(shù)的邏輯路徑列表,得到其中的第一個(gè)路徑對(duì)象path,如果path為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);否則將路徑對(duì)象、函數(shù)信息、控制流圖、實(shí)參列表作為參數(shù),執(zhí)行單個(gè)路徑分析,將path指向下一個(gè)邏輯路徑對(duì)象,然后執(zhí)行步驟二; 步驟二、單個(gè)路徑分析,如果函數(shù)實(shí)參列表的大小不為O,執(zhí)行步驟三;否則,執(zhí)行步驟四; 步驟三、根據(jù)函數(shù)信息,把實(shí)參的約束,值傳遞給形參變量,并添加到約束列表和變量類型列表中; 步驟四、遍歷該路徑,得到它的第一個(gè)結(jié)點(diǎn)node;如果node為null,則直接返回約束系統(tǒng)及附加信息,并退出該函數(shù);否則,執(zhí)行步驟五; 步驟五、通過(guò)node的編號(hào)信息,在控制流圖中查找到對(duì)應(yīng)的控制流結(jié)點(diǎn),對(duì)該控制流圖結(jié)點(diǎn)的語(yǔ)句類型進(jìn)行判斷,如果語(yǔ)句類型為VARIABLE_DEF,則執(zhí)行步驟六;如果語(yǔ)句類型為Assign_EXPR,則執(zhí)行步驟七;如果語(yǔ)句類型為for,則執(zhí)行步驟八;如果語(yǔ)句類型為Other_EXPR,則執(zhí)行步驟九; 步驟六、語(yǔ)句類型為VARIABLE_DEF:將該語(yǔ)句涉及的變量添加到變量類型列表,如果涉及的是數(shù)組或整型變量,生成區(qū)間表示,利用區(qū)間與上下界生成約束,并添加到約束列表中; 步驟七、語(yǔ)句類型為Assign_EXPR:如果語(yǔ)句涉及的變量是整型或數(shù)組變量,則進(jìn)行區(qū)間運(yùn)算,生成約束,并添加到約束列表中; 步驟八、語(yǔ)句類型為for:通過(guò)控制流圖結(jié)點(diǎn),得到for的條件表達(dá)式信息,解析該條件表達(dá)式,得到整形變量名稱,初始值,根據(jù)相應(yīng)的約束規(guī)則,生成該整型變量的約束,并以(變量名稱,約束)的形式存儲(chǔ)到變量類型列表中; 步驟九、語(yǔ)句類型為Other_EXPR:該語(yǔ)句是函數(shù)調(diào)用。根據(jù)實(shí)參和參數(shù)類型列表,如果實(shí)參是數(shù)組或整型變量,則要把約束賦給相應(yīng)的形參,并且把所有實(shí)參的值賦給形參,然后執(zhí)行步驟一分析函數(shù)所有路徑。
【文檔編號(hào)】G06F11/36GK105912459SQ201610202057
【公開(kāi)日】2016年8月31日
【申請(qǐng)日】2016年4月1日
【發(fā)明人】胡昌振, 單純, 于澤群, 薛靜鋒, 趙小林
【申請(qǐng)人】北京理工大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
班玛县| 南部县| 马尔康县| 噶尔县| 崇仁县| 平顶山市| 洪洞县| 浪卡子县| 泸水县| 彭水| 仁布县| 万年县| 迁安市| 米泉市| 临海市| 吉木萨尔县| 阳江市| 三河市| 安陆市| 饶平县| 韩城市| 舒兰市| 东乡县| 宜都市| 炉霍县| 马龙县| 洛隆县| 嘉定区| 平度市| 东乌珠穆沁旗| 怀安县| 澎湖县| 榆林市| 辽中县| 文安县| 墨玉县| 巴青县| 杭州市| 丰原市| 西乡县| 延寿县|