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

一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法

文檔序號(hào):6541870閱讀:184來源:國知局
一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法
【專利摘要】本發(fā)明涉及一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,包括:對(duì)被分析函數(shù)進(jìn)行詞法分析和語法分析,生成被分析函數(shù)的抽象語法樹;從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中;從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中;如果存在未判斷是不是指針引用檢測(cè)對(duì)象的指針,識(shí)別出被其引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中,進(jìn)一步提高了空指針引用缺陷檢測(cè)的精度。
【專利說明】一種充分識(shí)別指針弓I用檢測(cè)對(duì)象的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件靜態(tài)分析【技術(shù)領(lǐng)域】,尤其涉及一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法。
【背景技術(shù)】
[0002]靜態(tài)分析是軟件測(cè)試方法的一種類型,其目的是通過靜態(tài)的分析軟件是否遵守預(yù)定的要求,是保證軟件質(zhì)量的重要一環(huán)。靜態(tài)分析也被稱為靜態(tài)測(cè)試,不實(shí)際運(yùn)行被測(cè)的軟件,而是掃描源程序,從中找出可能導(dǎo)致錯(cuò)誤的結(jié)構(gòu)異常、控制流異常及數(shù)據(jù)流異常等情況。
[0003]基于靜態(tài)分析的缺陷檢測(cè)通過判定靜態(tài)分析結(jié)果是否在語法或語義符合預(yù)訂的要求,空指針引用是軟件中常見的一類缺陷,按照被引用指針的作用域,空指針引用檢測(cè)分為過程內(nèi)空指針引用檢測(cè)與過程間空指針引用檢測(cè)。因?yàn)镃程序語法上的靈活性,導(dǎo)致難以識(shí)別全部的指針引用表達(dá)式及被引用的指針;因?yàn)閺?fù)合類型參數(shù)及多級(jí)指針參數(shù)的使用,導(dǎo)致過程間空指針缺陷檢測(cè)難以充分識(shí)別全部被過程間引用的指針。
[0004]對(duì)空指針引用的充分檢測(cè)建立在指針引用檢測(cè)對(duì)象的充分識(shí)別上,指針引用檢測(cè)對(duì)象識(shí)別不充分將必然導(dǎo)致空指針引用檢測(cè)的漏報(bào)。

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

[0005](一)要解決的技術(shù)問題
[0006]本發(fā)明所要解決的技術(shù)問題是:如何充分識(shí)別指針引用檢測(cè)對(duì)象,提高空指針引用缺陷檢測(cè)的精度。
[0007](二)技術(shù)方案
[0008]為此目的,本發(fā)明提出了一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,包括以下步驟:
[0009]SlOl對(duì)被分析函數(shù)進(jìn)行詞法分析和語法分析,生成被分析函數(shù)的抽象語法樹;
[0010]S102從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中;
[0011]S103從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中;
[0012]S104判斷所述被引用指針集合中是否還有未判斷是不是指針引用檢測(cè)對(duì)象的指針,如果有,則轉(zhuǎn)步驟S105 ;否則,轉(zhuǎn)步驟S106 ;
[0013]S105識(shí)別出被所述未判斷是不是指針引用檢測(cè)對(duì)象的指針引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中,轉(zhuǎn)步驟S104 ;
[0014]S106識(shí)別結(jié)束。
[0015]優(yōu)選地,所述步驟S102從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中具體包括:
[0016]根據(jù)所述指針引用表達(dá)式的語法規(guī)則,從所述抽象語法樹的相應(yīng)節(jié)點(diǎn)上識(shí)別出所述被分析函數(shù)內(nèi)的全部指針引用表達(dá)式;
[0017]對(duì)每一個(gè)識(shí)別出的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式的類型,識(shí)別出被引用的指針變量,并將被引用的指針變量添加到被引用指針集合中。
[0018]優(yōu)選地,所述步驟S103從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中具體包括:
[0019]根據(jù)函數(shù)調(diào)用表達(dá)式與抽象語法樹節(jié)點(diǎn)的對(duì)應(yīng)規(guī)則,從所述抽象語法樹上識(shí)別出被分析函數(shù)所調(diào)用的全部函數(shù);
[0020]對(duì)每一個(gè)被調(diào)用函數(shù),獲取其函數(shù)摘要的空指針引用前置約束,根據(jù)所述空指針引用前置約束獲取所述被調(diào)用函數(shù)中全部被約束為不能為空的指針;
[0021]對(duì)于每一個(gè)被約束為不能為空的指針,根據(jù)函數(shù)調(diào)用點(diǎn)處形參與實(shí)參的對(duì)應(yīng)關(guān)系獲取每一個(gè)被約束為不能為空的指針對(duì)應(yīng)的調(diào)用點(diǎn)處的指針變量集合,并將所述指針變量集合中的所有指針添加到被引用指針集合中。
[0022]優(yōu)選地,所述根據(jù)函數(shù)調(diào)用點(diǎn)處形參與實(shí)參的對(duì)應(yīng)關(guān)系獲取每一個(gè)被約束為不能為空的指針對(duì)應(yīng)的調(diào)用點(diǎn)處的指針變量集合具體包括:
[0023]獲取每一個(gè)被約束不能為空的指針變量的父變量列表,并按父子層次排序;
[0024]獲取排序后列表頂層父變量對(duì)應(yīng)的實(shí)參;
[0025]根據(jù)父變量列表中的變量對(duì)應(yīng)的指針引用表達(dá)式類型,基于頂層父變量對(duì)應(yīng)的實(shí)參在調(diào)用點(diǎn)處獲取其對(duì)應(yīng)的指針變量。
[0026]優(yōu)選地,所述步驟S105識(shí)別出被所述未判斷是不是指針引用檢測(cè)對(duì)象的指針引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中具體包括:
[0027]從被引用指針集合中選取未判定是不是指針引用檢測(cè)對(duì)象的指針,作為待判定指針;
[0028]基于數(shù)據(jù)流分析的結(jié)果,在所述待判定指針被引用的程序點(diǎn)分析獲取其指向?qū)傩?,如果指向?qū)傩允谴_定的,則識(shí)別出被所述待判定指針引用的外部指針,并將所述外部指針添加到指針引用檢測(cè)對(duì)象集合中;否則,將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中。
[0029]優(yōu)選地,所述識(shí)別出被所述待判定指針引用的外部指針具體包括:
[0030]根據(jù)所述數(shù)據(jù)流分析的結(jié)果在所述待判定指針被引用的程序點(diǎn)獲取該指針的取值區(qū)間,并從所述取值區(qū)間獲取所述待判定指針的指向集合;
[0031]對(duì)指向集合中的每個(gè)未知區(qū)域,獲取所述未知區(qū)域?qū)?yīng)變量的父變量,所述父變量為所述待判定指針引用的外部指針。
[0032]優(yōu)選地,所述方法還包括:
[0033]根據(jù)所述抽象語法樹生成反應(yīng)所述被分析函數(shù)控制結(jié)構(gòu)的控制流圖;
[0034]根據(jù)所述控制流圖生成所述被調(diào)用函數(shù)的函數(shù)摘要。[0035](三)有益效果
[0036]本發(fā)明公開了一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,該方法能夠識(shí)別出各種語法形式的被引用指針以及因函數(shù)調(diào)用引起的過程間被引用指針,識(shí)別的結(jié)果可作為空指針引用缺陷充分檢測(cè)的基礎(chǔ),進(jìn)而提高空指針引用缺陷檢測(cè)的精度,降低空指針引用檢測(cè)的漏報(bào)。
【專利附圖】

【附圖說明】
[0037]通過參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0038]圖1是本發(fā)明一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法的流程圖;
[0039]圖2是本發(fā)明實(shí)施例中基于抽象語法樹上識(shí)別出指針引用表達(dá)式的流程圖;
[0040]圖3是本發(fā)明實(shí)施例中識(shí)別指針引用表達(dá)中出被引用指針變量的流程圖;
[0041]圖4是本發(fā)明實(shí)施例中形參到實(shí)參的映射運(yùn)算的流程圖;
[0042]圖5是本發(fā)明實(shí)施例中形參及其按父子關(guān)系排序的父變量集合的運(yùn)算流程圖;
[0043]圖6是本發(fā)明實(shí)施例中獲得形參對(duì)應(yīng)的實(shí)參的流程圖;
[0044]圖7是本發(fā)明實(shí)施例中識(shí)別被引用的外部指針的流程圖。
【具體實(shí)施方式】
[0045]下面將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)描述。
[0046]本發(fā)明提出了一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,應(yīng)用本發(fā)明的指針引用檢測(cè)對(duì)象識(shí)別方法,能夠保證指針引用檢測(cè)對(duì)象識(shí)別的充分性。
[0047]本發(fā)明實(shí)施例一提出了一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,如圖1所示,包括以下步驟:
[0048]SlOl對(duì)被分析函數(shù)進(jìn)行詞法分析和語法分析,生成被分析函數(shù)的抽象語法樹;
[0049]S102從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中;
[0050]S103從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中;
[0051]S104判斷所述被引用指針集合中是否還有未判斷是不是指針引用檢測(cè)對(duì)象的指針,如果有,則轉(zhuǎn)步驟S105 ;否則,轉(zhuǎn)步驟S106 ;
[0052]S105識(shí)別出被所述未判斷是不是指針引用檢測(cè)對(duì)象的指針引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中,轉(zhuǎn)步驟S104 ;
[0053]S106識(shí)別結(jié)束。
[0054]本發(fā)明描述指針變量取值及其關(guān)聯(lián)準(zhǔn)確全面,對(duì)被分析C程序進(jìn)行語法分析得到其抽象語法樹,其中抽象語法樹的節(jié)點(diǎn)與C程序的代碼對(duì)應(yīng)映射關(guān)聯(lián)。C語言中的指針引用表達(dá)式可歸納為*exp、exp->f, exp [i],每個(gè)指針引用表達(dá)式均對(duì)應(yīng)著抽象語法樹上的一棵子樹,遍歷抽象語法樹獲得所有的這類子樹,根據(jù)C語言的語法規(guī)則識(shí)別出該類子樹對(duì)應(yīng)的指針引用表達(dá)式,并識(shí)別出被引用的指針。應(yīng)用RSTVL描述變量的取值,其中RSTVL為一個(gè)四元組〈Var, Region, SExp, Domain〉。其中:Var表示內(nèi)存對(duì)象;Region表示區(qū)域,用來模擬變量實(shí)際運(yùn)行時(shí)所分配的實(shí)際內(nèi)存區(qū)域;SExp表示符號(hào)表達(dá)式,符號(hào)表達(dá)式由符號(hào)與數(shù)值通過數(shù)學(xué)運(yùn)算與邏輯運(yùn)算構(gòu)成;Domain表示取值區(qū)間,其中指針類型的區(qū)間PointerDomain的指向集合為可能指向的變量對(duì)應(yīng)的區(qū)域編號(hào)的集合。應(yīng)用RSTVL及能表示變量的取值,又能表示變量間的別名關(guān)系、復(fù)合數(shù)據(jù)類型變量與其成員間的層次關(guān)系、基本類型變量的取值的邏輯關(guān)聯(lián)關(guān)系;即RSTVL能夠表示程序運(yùn)行時(shí)的內(nèi)存對(duì)象間的所有可能關(guān)聯(lián)。
[0055]本發(fā)明實(shí)施例中指針引用檢測(cè)對(duì)象的充分識(shí)別是在基于RSTVL的數(shù)據(jù)流分析結(jié)果的基礎(chǔ)上進(jìn)行的。本實(shí)施例中的RSTVL適用于流敏感、域敏感、上下文敏感、路徑不敏感的數(shù)據(jù)流分析,RSTVL將內(nèi)存劃分為離散的區(qū)域,能夠描述區(qū)域間的指向關(guān)系、層次關(guān)系以及取值的邏輯關(guān)聯(lián).基于RSTVL的區(qū)域抽象包括:
[0056](I)對(duì)每個(gè)程序點(diǎn)1,集合R1模擬在I處能夠被訪問的區(qū)域集合,集合S1表示在I處使用的符號(hào)集合。
[0057](2)對(duì)每個(gè)程序點(diǎn)I,有一個(gè)抽象存儲(chǔ):// =);其中:
[0058]p'v: V -? R1,映射一個(gè)內(nèi)存對(duì)象到一個(gè)區(qū)域;
[0059]P1r [R1 ^R17表示區(qū)域間的指向關(guān)系;
[0060]P1,:(R: X F) Rt,映射一個(gè)復(fù)合結(jié)構(gòu)變量的成員到一個(gè)區(qū)域。
[0061]對(duì)可尋址表達(dá)式的各種訪存操作,都首先需要獲得所對(duì)應(yīng)的區(qū)域。定義R1Ke]]表示在程序點(diǎn)I上,抽象存儲(chǔ)P中,可尋址表達(dá)式e對(duì)應(yīng)的區(qū)域集合。下面給出獲得各種類型的可尋址表達(dá)式對(duì)應(yīng)的區(qū)域的策略:
【權(quán)利要求】
1.一種充分識(shí)別指針引用檢測(cè)對(duì)象的方法,其特征在于,包括以下步驟: SlOl對(duì)被分析函數(shù)進(jìn)行詞法分析和語法分析,生成被分析函數(shù)的抽象語法樹; S102從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中; S103從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中; S104判斷所述被引用指針集合中是否還有未判斷是不是指針引用檢測(cè)對(duì)象的指針,如果有,則轉(zhuǎn)步驟S105 ;否則,轉(zhuǎn)步驟S106 ; S105識(shí)別出被所述未判斷是不是指針引用檢測(cè)對(duì)象的指針引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中,轉(zhuǎn)步驟S104 ; S106識(shí)別結(jié)束。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S102從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式識(shí)別出被引用指針,并將被引用指針添加到被引用指針集合中具體包括: 根據(jù)所述指針引用表達(dá)式的語法規(guī)則,從所述抽象語法樹的相應(yīng)節(jié)點(diǎn)上識(shí)別出所述被分析函數(shù)內(nèi)的全部指針引用表達(dá)式; 對(duì)每一個(gè)識(shí)別出的指針引用表達(dá)式,根據(jù)所述指針引用表達(dá)式的類型,識(shí)別出被引用的指針變量,并將被引用的指針變量添加到被引用指針集合中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S103從所述抽象語法樹上識(shí)別所述被分析函數(shù)內(nèi)的函數(shù)調(diào)用,根據(jù)被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束識(shí)別出在調(diào)用點(diǎn)處的被引用指針,并將被引用指針添加到被引用指針集合中具體包括: 根據(jù)函數(shù)調(diào)用表達(dá)式與抽象語法樹節(jié)點(diǎn)的對(duì)應(yīng)規(guī)則,從所述抽象語法樹上識(shí)別出被分析函數(shù)所調(diào)用的全部函數(shù); 對(duì)每一個(gè)被調(diào)用函數(shù),獲取其函數(shù)摘要的空指針引用前置約束,根據(jù)所述空指針引用前置約束獲取所述被調(diào)用函數(shù)中全部被約束為不能為空的指針; 對(duì)于每一個(gè)被約束為不能為空的指針,根據(jù)函數(shù)調(diào)用點(diǎn)處形參與實(shí)參的對(duì)應(yīng)關(guān)系獲取每一個(gè)被約束為不能為空的指針對(duì)應(yīng)的調(diào)用點(diǎn)處的指針變量集合,并將所述指針變量集合中的所有指針添加到被引用指針集合中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)函數(shù)調(diào)用點(diǎn)處形參與實(shí)參的對(duì)應(yīng)關(guān)系獲取每一個(gè)被約束為不能為空的指針對(duì)應(yīng)的調(diào)用點(diǎn)處的指針變量集合具體包括: 獲取每一個(gè)被約束不能為空的指針變量的父變量列表,并按父子層次排序; 獲取排序后列表頂層父變量對(duì)應(yīng)的實(shí)參; 根據(jù)父變量列表中的變量對(duì)應(yīng)的指針引用表達(dá)式類型,基于頂層父變量對(duì)應(yīng)的實(shí)參在調(diào)用點(diǎn)處獲取其對(duì)應(yīng)的指針變量。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S105識(shí)別出被所述未判斷是不是指針引用檢測(cè)對(duì)象的指針引用的外部指針,并將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中具體包括: 從被引用指針集合中選取未判定是不是指針引用檢測(cè)對(duì)象的指針,作為待判定指針;基于數(shù)據(jù)流分析的結(jié)果,在所述待判定指針被引用的程序點(diǎn)分析獲取其指向?qū)傩?,如果指向?qū)傩允谴_定的,則識(shí)別出被所述待判定指針引用的外部指針,并將所述外部指針添加到指針引用檢測(cè)對(duì)象集合中;否則,將所述外部指針添加到被調(diào)用函數(shù)的函數(shù)摘要的空指針引用前置約束中。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述識(shí)別出被所述待判定指針引用的外部指針具體包括: 根據(jù)所述數(shù)據(jù)流分析的結(jié)果在所述待判定指針被引用的程序點(diǎn)獲取該指針的取值區(qū)間,并從所述取值區(qū)間獲取所述待判定指針的指向集合; 對(duì)指向集合中的每個(gè)未知區(qū)域,獲取所述未知區(qū)域?qū)?yīng)變量的父變量,所述父變量為所述待判定指針引用的外部指針。
7.根據(jù)權(quán)利要求1-6任一權(quán)利要求所述的方法,其特征在于,所述方法還包括: 根據(jù)所述抽象語法樹生成反應(yīng)所述被分析函數(shù)控制結(jié)構(gòu)的控制流圖; 根據(jù)所述控制流圖生成所述被調(diào)用函數(shù)的函數(shù)摘要。
【文檔編號(hào)】G06F11/36GK103914382SQ201410115369
【公開日】2014年7月9日 申請(qǐng)日期:2014年3月25日 優(yōu)先權(quán)日:2014年3月25日
【發(fā)明者】王雅文, 董玉坤, 宮云戰(zhàn), 金大海, 黃俊飛 申請(qǐng)人:北京郵電大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
峨眉山市| 乳源| 夏河县| 桃源县| 边坝县| 舞阳县| 富宁县| 木里| 武平县| 修文县| 神池县| 利辛县| 东台市| 洪泽县| 历史| 个旧市| 石首市| 新竹县| 东乌珠穆沁旗| 札达县| 望奎县| 天门市| 武山县| 浦北县| 天水市| 柘荣县| 平邑县| 抚顺市| 屯留县| 花莲县| 苏州市| 宜春市| 乐亭县| 澜沧| 枞阳县| 个旧市| 雅安市| 华蓥市| 郸城县| 出国| 安福县|