專利名稱:基于路徑包含處理方法的源代碼靜態(tài)分析方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種基于路徑包含處理方法的源代碼靜態(tài)分析方法及其裝置。
背景技術(shù):
隨著軟件工程的規(guī)模越來越大,源碼文件越來越多,源代碼文件間的調(diào)用關(guān)系也是日趨復(fù)雜。單純依靠編譯器不足以發(fā)現(xiàn)代碼中存在的所有問題,越來越多的開發(fā)者使用源代碼靜態(tài)分析器工具作為編譯器的有效補(bǔ)充來發(fā)現(xiàn)和解決程序中可能存在的問題,如語義錯誤、安全缺陷等。圖1顯示了源代碼靜態(tài)分析器的常規(guī)框圖。由源代碼開發(fā)人員或測試人員將源代碼輸入源代碼靜態(tài)分析器中,首先由源代碼解析模塊進(jìn)行處理,它將源代碼轉(zhuǎn)換為精簡的中間代碼交給缺陷分析模塊,缺陷分析模塊對中間代碼進(jìn)行分析并將分析數(shù)據(jù)一如語義分析、數(shù)據(jù)流分析等提交給結(jié)果輸出模塊,結(jié)果輸出模塊使用分析數(shù)據(jù)并結(jié)合缺陷規(guī)則庫中定義的缺陷生成結(jié)果文件。目前,針對程序源代碼進(jìn)行靜態(tài)分析的技術(shù)和工具很多,但絕大多數(shù)都集中于傳統(tǒng)開發(fā)語言,如C、c++、Java等。這種語言的特點是靜態(tài)性、編譯性較好,而當(dāng)前比較流行的腳本語言,如PHP (Hypertext Pr印rocessor,超級文本預(yù)處理語言),通常具有動態(tài)性和解釋性特點。下文所示為Java代碼中靜態(tài)路徑包含的例子 improt cn. com. myproject. MyClass;
public MySubClass extends MyClass{ public myMethod() {
……}}
該Java文件中如果需要使用其它文件中的類,如果該類不與當(dāng)前類在同一包package 中,必須通過import關(guān)鍵字明確指定,如上面例子中第1行的improt cn. com. myproject. MyClass,當(dāng)源代碼靜態(tài)分析器中的解析模塊碰到這樣一條語句時,會到相應(yīng)的路徑 “$CLASSPATH/cn/com/myproject” 下去查找對應(yīng)的 MyClass. java 文件。
下文所示為PHP代碼中包含變量的路徑包含的例子 < php
$path = ‘. Iconfig,; SconfigFile = 'myConfig'; include "$path/$configFile";
echo myConfigParam; >在PHP語言中,允許包含路徑中含有變量,可稱之為動態(tài)路徑包含或非常量路徑包含, include “$path/$ConfigFile”,這種情況通常出于部署和運(yùn)行的靈活性需要。如果無法進(jìn)行精確的變量分析的話,很難定位需要包含引用的PHP源文件,而找不到源文件,源代碼靜態(tài)分析器就不會發(fā)揮其作用。因此已知的靜態(tài)分析器遇到這種情況,處理辦法通常趨于兩種極端,一種是直接丟棄該包含文件,即鴕鳥策略,另外一種報告程序中存在動態(tài)包含缺陷。這兩種處理辦法都會導(dǎo)致大量的誤報和漏報。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供如何使源代碼靜態(tài)分析器能處理包含路徑中存在變量的情況。為了解決上述問題,本發(fā)明提供了一種路徑包含的處理方法,包括 當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值;
當(dāng)包含路徑中的變量具有常量值時找到該包含路徑對應(yīng)的源代碼文件; 采用該源代碼文件替代該包含路徑。進(jìn)一步地,所述判斷包含路徑中的變量是否具有常量值的步驟包括 對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點; 如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;
如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本發(fā)明還提供了一種路徑包含的處理裝置,包括
判斷模塊,用于當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值; 查找模塊,用于當(dāng)所述判斷模塊判斷包含路徑中的變量具有常量值時,找到該包含路徑對應(yīng)的源代碼文件;
處理模塊,用于采用該源代碼文件替代該包含路徑。進(jìn)一步地,所述判斷模塊判斷包含路徑中的變量是否具有常量值是指
所述判斷模塊對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本發(fā)明還提供了一種基于路徑包含處理方法的源代碼靜態(tài)分析器,包括 源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
缺陷分析模塊,用于根據(jù)所接收的中間代碼得到分析數(shù)據(jù); 結(jié)果輸出模塊,用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果; 還包括常量分析模塊;
所述源碼解析模塊還用于在所述中間代碼中查找包含路徑,如果不存在包含路徑則將中間代碼發(fā)送給所述缺陷分析模塊;當(dāng)查找到為非常量的包含路徑時將該包含路徑發(fā)送給所述常量分析模塊,接收到常量分析模塊返回的包含路徑對應(yīng)的源代碼文件后,采用該源代碼文件替代對應(yīng)的包含路徑;替代后繼續(xù)在所述中間代碼中查找包含路徑;
所述常量分析模塊用于判斷所接收到的包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件,并將其返回給所述源碼解析模塊。進(jìn)一步地,所述源碼解析模塊包括控制單元、發(fā)送單元;
轉(zhuǎn)換單元,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
判斷單元,用于在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則找到該常量對應(yīng)的源代碼文件,并發(fā)送給所述控制單元;如果為非常量則將該包含路徑發(fā)送給所述常量分析模塊;如果查找不出包含路徑,則指示所述發(fā)送單元將中間代碼發(fā)送給所述缺陷分析模塊;
所述控制單元用于當(dāng)接收到所述常量分析模塊或判斷單元發(fā)送的源代碼文件后,采用該源代碼文件替代所述判斷單元所查找到的包含路徑;替代后指示所述判斷單元繼續(xù)查找包含路徑。進(jìn)一步地,所述常量分析模塊判斷所接收到的包含路徑中的變量是否具有常量值是指
所述常量分析模塊對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本發(fā)明還提供了一種基于路徑包含處理方法的源代碼靜態(tài)分析方法,包括
A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
B、在所述中間代碼中查找包含路徑,如果不存在包含路徑則進(jìn)行步驟E;當(dāng)查找到為非常量的包含路徑時進(jìn)行步驟C ;
C、判斷該包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件;
D、采用該源代碼文件替代對應(yīng)的包含路徑;替代后返回步驟B;
E、根據(jù)所述中間代碼得到分析數(shù)據(jù);根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。進(jìn)一步地,所述步驟B包括
Bi、在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則進(jìn)行步驟B2 ;如果為非常量則進(jìn)行步驟C ;如果查找不出包含路徑,則進(jìn)行步驟E ;
B2、找到該包含路徑對應(yīng)的源代碼文件;進(jìn)行步驟D ; 所述步驟D中替代后返回步驟Bi。進(jìn)一步地,所述步驟C包括
對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點; 如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值,找到該包含路徑對應(yīng)的源代碼文件;
如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本發(fā)明的技術(shù)方案解決了當(dāng)前源代碼靜態(tài)分析器中無法處理包含路徑中存在變量的情況;提高了當(dāng)前源代碼靜態(tài)分析器的檢測精度。
當(dāng)結(jié)合附圖參考一下詳細(xì)描述時,可以更容易且更好的領(lǐng)會和理解本發(fā)明的各實施例,附圖中
圖1是現(xiàn)有的源代碼靜態(tài)分析器的示意框圖2是實施例一的基于路徑包含處理方法的源代碼靜態(tài)分析器的示意框圖; 圖3是實施例一的基于路徑包含處理方法的源代碼靜態(tài)分析器的工作流程示意圖。
具體實施例方式下面將結(jié)合附圖及實施例對本發(fā)明的技術(shù)方案進(jìn)行更詳細(xì)的說明。需要說明的是,如果不沖突,本發(fā)明實施例以及實施例中的各個特征可以相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。實施例一、一種基于路徑包含處理方法的源代碼靜態(tài)分析器,如圖2所示,包括 缺陷分析模塊、常量分析模塊;
源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;在所述中間代碼中查找包含路徑,如果不存在包含路徑則將中間代碼發(fā)送給所述缺陷分析模塊;當(dāng)查找到為非常量的包含路徑時將該包含路徑發(fā)送給所述常量分析模塊,接收到常量分析模塊返回的包含路徑對應(yīng)的源代碼文件后,采用該源代碼文件替代對應(yīng)的包含路徑;替代后繼續(xù)在所述中間代碼中查找包含路徑;
所述常量分析模塊用于判斷所接收到的包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件,并將其返回給所述源碼解析模塊; 所述缺陷分析模塊用于根據(jù)所接收的中間代碼得到分析數(shù)據(jù); 結(jié)果輸出模塊,用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。本實施例中,所述缺陷分析模塊和結(jié)果輸出模塊可以但不限采用和現(xiàn)有技術(shù)相同的方案實現(xiàn);其中預(yù)定的缺陷規(guī)則可以但不限于保存為缺陷規(guī)則庫,可以保存在結(jié)果輸出模塊中,也可以保存在其它模塊中。本實施例中,所述源碼解析模塊還可以用于當(dāng)所述中間代碼中存在包含路徑且為常量時,找到該包含路徑對應(yīng)的源代碼文件。本實施例中,常量分析模塊與源碼解析模塊進(jìn)行交互,盡可能的確定包含路徑下的變量的常量值,進(jìn)一步確定被包含的源代碼文件,并提交給源碼解析模塊進(jìn)行處理。本實施例中,源碼解析模塊與靜態(tài)分析模塊合作的流程如圖3所示 首先,將源代碼文件輸入源碼解析模塊,產(chǎn)生當(dāng)前源代碼文件的中間代碼。其次,檢查中間代碼中是否存在包含路徑語句,如果不存在則進(jìn)入源代碼靜態(tài)分析器的后續(xù)模塊。如果存在包含路徑,則進(jìn)一步判斷包含路徑是否是常量。如果是常量則按照常規(guī)靜態(tài)包含處理,即根據(jù)該常量找到對應(yīng)源代碼文件,并將其輸入源碼解析模塊中。如果是非常量,則使用常量分析模塊進(jìn)行包含路徑中變量的常量分析,經(jīng)過分析后有兩種可能,一種是包含路徑中變量具有常量值,則按照常規(guī)靜態(tài)包含處理,另一種包含路徑中變量不具有常量值,則丟棄該路徑。靜態(tài)包含處理完成后繼續(xù)檢查生成的中間代碼中是否還有包含路徑。雖然在圖3中示出了流程順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
7
該過程可能反復(fù)進(jìn)行多次,取決于被包含的代碼中是否仍然有需要分析的路徑, 直到所有可解析的包含路徑內(nèi)的文件都被源碼解析模塊處理為止。之后的處理流程可以與典型的源代碼靜態(tài)分析器流程一致,如前所述。本實施例中,所述源碼解析模塊具體可以包括控制單元、發(fā)送單元; 轉(zhuǎn)換單元,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
判斷單元,用于在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則找到該常量對應(yīng)的源代碼文件,并發(fā)送給所述控制單元;如果為非常量則將該包含路徑發(fā)送給所述常量分析模塊;如果查找不出包含路徑,則指示所述發(fā)送單元將中間代碼發(fā)送給所述缺陷分析模塊;
控制單元,用于當(dāng)接收到所述常量分析模塊或判斷單元發(fā)送的源代碼文件后,采用該源代碼文件替代所述判斷單元所查找到的包含路徑;替代后指示所述判斷單元繼續(xù)查找包含路徑。本實施例中,所述常量分析模塊還可以用于當(dāng)包含路徑中的變量不具有常量值時丟棄該包含路徑并通知所述控制單元;
所述控制單元當(dāng)收到所述常量分析模塊的通知后指示所述判斷單元繼續(xù)查找包含路徑。本實施例中,所述常量分析模塊可以但不限于使用數(shù)據(jù)流分析方法來進(jìn)行常量分析,確認(rèn)每個程序點是否包含常量以及常量內(nèi)容。本實施例中,所述常量分析模塊對包含路徑建立常量傳播方程,然后通過迭代計算反復(fù)求解,直到到達(dá)不動點。此時包含路徑中的變量如果具有常量值,則該變量對應(yīng)的常量以及常量內(nèi)容都已經(jīng)分析出來,常量分析模塊使用該求解結(jié)果可以很容易的判斷出當(dāng)前非常量包含路徑中的變量是否存在常量值,如果求解結(jié)果為確定的值,則判斷包含路徑中的變量具有常量值,如果求解結(jié)果為不確定的值,則判斷包含路徑中的變量不具有常量值。絕大多數(shù)情況下,包含路徑中的變量的值都可以在代碼實際運(yùn)行前確定下來,而不會導(dǎo)致所謂動態(tài)包含漏洞;而程序中包含路徑中添加變量的主要目的在于編譯和部署的靈活性。本實施例在解析源代碼的過程中進(jìn)一步分析包含路徑中存在的變量的值,如果該變量存在一個或一組確定的值,源代碼靜態(tài)分析器就可以根據(jù)該值來包含對于路徑下的源代碼文件,從而使得源代碼靜態(tài)分析器的分析范圍得到擴(kuò)大。實施例二、一種基于路徑包含處理方法的源代碼靜態(tài)分析方法,包括
A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
B、在所述中間代碼中查找包含路徑,如果不存在包含路徑則進(jìn)行步驟E;當(dāng)查找到為非常量的包含路徑時進(jìn)行步驟C ;
C、判斷該包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件;
D、采用該源代碼文件替代對應(yīng)的包含路徑;替代后返回步驟B;
E、根據(jù)所述中間代碼得到分析數(shù)據(jù);根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。本實施例中,所述步驟A、E可以但不限采用和現(xiàn)有技術(shù)相同的方案實現(xiàn)。本實施例中,所述步驟B還可以包括當(dāng)所述中間代碼中存在包含路徑且為常量時,找到該包含路徑對應(yīng)的源代碼文件,進(jìn)行步驟D。本實施例中,所述步驟B具體可以包括
Bi、在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則進(jìn)行步驟B2 ;如果為非常量則進(jìn)行步驟C ;如果查找不出包含路徑,則進(jìn)行步驟E ;
B2、找到該包含路徑對應(yīng)的源代碼文件;進(jìn)行步驟D ; 所述步驟D中替代后返回步驟Bi。本實施例中,所述步驟C具體可以包括
對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點; 如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值,找到該包含路徑對應(yīng)的源代碼文件;
如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本實施例中,所述步驟C還可以包括
當(dāng)判斷該包含路徑中的變量不具有常量值時丟棄該包含路徑并返回步驟Bl。實施例三、一種路徑包含的處理方法,包括
當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值; 當(dāng)包含路徑中的變量具有常量值時找到該包含路徑對應(yīng)的源代碼文件; 采用該源代碼文件替代該包含路徑。本實施例中,所述方法還可以包括
當(dāng)包含路徑中的變量不具有常量值時丟棄該包含路徑。本實施例中,所述判斷包含路徑中的變量是否具有常量值的步驟具體可以包括 對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;
如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值; 如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。本實施例當(dāng)運(yùn)行在源代碼靜態(tài)分析器中時,各步驟可以均由新增的模塊完成,也可以均通過改進(jìn)源碼解析模塊完成,還可以部分通過改進(jìn)源碼解析模塊完成,部分由新增模塊完成。實施例四、一種路徑包含的處理裝置,包括
判斷模塊,用于當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值; 查找模塊,用于當(dāng)所述判斷模塊判斷包含路徑中的變量具有常量值時,找到該包含路徑對應(yīng)的源代碼文件;
處理模塊,用于采用該源代碼文件替代該包含路徑。所述判斷模塊判斷包含路徑中的變量是否具有常量值是指
本實施例中,所述判斷模塊判斷包含路徑中的變量是否具有常量值的步驟具體可以是
指
所述判斷模塊對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。
本實施例中,所述判斷模塊還可以用于當(dāng)判斷包含路徑中的變量不具有常量值時,丟棄該包含路徑。本實施例可以在源代碼靜態(tài)分析器的基礎(chǔ)上實現(xiàn),其中各模塊可以均由新增的模塊實現(xiàn),也可以均通過改進(jìn)源碼解析模塊實現(xiàn),還可以部分模塊通過改進(jìn)源碼解析模塊實現(xiàn),部分模塊由新增模塊實現(xiàn)。本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲于計算機(jī)可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng)地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。當(dāng)然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種路徑包含的處理方法,包括當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值; 當(dāng)包含路徑中的變量具有常量值時找到該包含路徑對應(yīng)的源代碼文件; 采用該源代碼文件替代該包含路徑。
2.如權(quán)利要求1所述的方法,其特征在于,所述判斷包含路徑中的變量是否具有常量值的步驟包括對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點; 如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值; 如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。
3.一種路徑包含的處理裝置,包括判斷模塊,用于當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值; 查找模塊,用于當(dāng)所述判斷模塊判斷包含路徑中的變量具有常量值時,找到該包含路徑對應(yīng)的源代碼文件;處理模塊,用于采用該源代碼文件替代該包含路徑。
4.如權(quán)利要求3所述的裝置,其特征在于,所述判斷模塊判斷包含路徑中的變量是否具有常量值是指所述判斷模塊對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。
5.一種基于路徑包含處理方法的源代碼靜態(tài)分析器,包括 源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼; 缺陷分析模塊,用于根據(jù)所接收的中間代碼得到分析數(shù)據(jù);結(jié)果輸出模塊,用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果; 其特征在于,還包括常量分析模塊;所述源碼解析模塊還用于在所述中間代碼中查找包含路徑,如果不存在包含路徑則將中間代碼發(fā)送給所述缺陷分析模塊;當(dāng)查找到為非常量的包含路徑時將該包含路徑發(fā)送給所述常量分析模塊,接收到常量分析模塊返回的包含路徑對應(yīng)的源代碼文件后,采用該源代碼文件替代對應(yīng)的包含路徑;替代后繼續(xù)在所述中間代碼中查找包含路徑;所述常量分析模塊用于判斷所接收到的包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件,并將其返回給所述源碼解析模塊。
6.如權(quán)利要求5所述的源代碼靜態(tài)分析器,其特征在于,所述源碼解析模塊包括 控制單元、發(fā)送單元;轉(zhuǎn)換單元,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;判斷單元,用于在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則找到該常量對應(yīng)的源代碼文件,并發(fā)送給所述控制單元;如果為非常量則將該包含路徑發(fā)送給所述常量分析模塊;如果查找不出包含路徑,則指示所述發(fā)送單元將中間代碼發(fā)送給所述缺陷分析模塊;所述控制單元用于當(dāng)接收到所述常量分析模塊或判斷單元發(fā)送的源代碼文件后,采用該源代碼文件替代所述判斷單元所查找到的包含路徑;替代后指示所述判斷單元繼續(xù)查找包含路徑。
7.如權(quán)利要求5或6所述的源代碼靜態(tài)分析器,其特征在于,所述常量分析模塊判斷所接收到的包含路徑中的變量是否具有常量值是指所述常量分析模塊對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。
8.一種基于路徑包含處理方法的源代碼靜態(tài)分析方法,包括A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;B、在所述中間代碼中查找包含路徑,如果不存在包含路徑則進(jìn)行步驟E;當(dāng)查找到為非常量的包含路徑時進(jìn)行步驟C ;C、判斷該包含路徑中的變量是否具有常量值,如果具有則找到該包含路徑對應(yīng)的源代碼文件;D、采用該源代碼文件替代對應(yīng)的包含路徑;替代后返回步驟B;E、根據(jù)所述中間代碼得到分析數(shù)據(jù);根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。
9.如權(quán)利要求8所述的方法,其特征在于,所述步驟B包括Bi、在所述中間代碼中查找包含路徑,查找到一條后判斷所找到的包含路徑是否為常量,如果為常量則進(jìn)行步驟B2 ;如果為非常量則進(jìn)行步驟C ;如果查找不出包含路徑,則進(jìn)行步驟E ;B2、找到該包含路徑對應(yīng)的源代碼文件;進(jìn)行步驟D ;所述步驟D中替代后返回步驟Bi。
10.如權(quán)利要求8或9所述的方法,其特征在于,所述步驟C包括對該包含路徑建立常量傳播方程,通過迭代計算反復(fù)求解,直到到達(dá)不動點;如果求解結(jié)果為確定的值,則判斷該包含路徑中的變量具有常量值,找到該包含路徑對應(yīng)的源代碼文件;如果求解結(jié)果為不確定的值,則判斷該包含路徑中的變量不具有常量值。
全文摘要
本發(fā)明公開了一種基于路徑包含處理方法的源代碼靜態(tài)分析方法及其裝置;所述處理方法包括當(dāng)包含路徑為非常量時,判斷該包含路徑中的變量是否具有常量值;當(dāng)包含路徑中的變量具有常量值時找到該包含路徑對應(yīng)的源代碼文件;采用該源代碼文件替代該包含路徑。本發(fā)明使源代碼靜態(tài)分析器能處理包含路徑中存在變量的情況。
文檔編號G06F11/36GK102279799SQ20111025602
公開日2011年12月14日 申請日期2011年8月31日 優(yōu)先權(quán)日2011年8月31日
發(fā)明者吳世忠, 時志偉, 洪東, 王眉林, 章磊, 郭濤, 陳曉軍, 韓冰 申請人:中國信息安全測評中心, 北京啟明星辰信息安全技術(shù)有限公司