亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器及其方法

文檔序號:6432158閱讀:182來源:國知局
專利名稱:處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器及其方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器及其方法。
背景技術(shù)
隨著軟件工程的規(guī)模越來越大,源代碼文件越來越多,源代碼文件間的調(diào)用關(guān)系也是日趨復(fù)雜。單純依靠編譯器不足以發(fā)現(xiàn)代碼中存在的所有問題,越來越多的開發(fā)者使用源代碼靜態(tài)缺陷分析器工具作為編譯器的有效補充來發(fā)現(xiàn)和解決程序中可能存在的問題,如語義錯誤、安全缺陷等。圖1顯示了源代碼靜態(tài)缺陷分析器的常規(guī)框圖。由源代碼開發(fā)人員或測試人員將源代碼輸入源代碼靜態(tài)缺陷分析器中,首先由源代碼解析模塊進行處理,它將源代碼轉(zhuǎn)換為精簡的中間代碼交給缺陷分析模塊,缺陷分析模塊對中間代碼進行分析并將分析數(shù)據(jù),如語義分析、數(shù)據(jù)流分析等提交給結(jié)果輸出模塊,結(jié)果輸出模塊使用分析數(shù)據(jù)并結(jié)合缺陷規(guī)則庫中定義的缺陷生成結(jié)果文件。目前,針對程序源代碼進行靜態(tài)缺陷分析的技術(shù)和工具很多,但絕大多數(shù)都集中于傳統(tǒng)開發(fā)語言,如C、c++、Java等。這種語言的特點是靜態(tài)性、編譯性較好,而當前比較流行的腳本語言,如Ruby、Python、PHP,通常具有動態(tài)性和解釋性特點。下文為一個PYTHON代碼中變量符號定義的例子 def system (cmd)
#some stuff def hello (cmd) #some stuff system (command)^
if b == 1:
from os import * os. system (command) else b == 2:
system = hello else b == 3:
system = 1 else: i = 1
system = i print system undef system print system
-個名字為system的函數(shù)
一個全名為os. system的函數(shù) -一個名字為hello的函數(shù)的別名一個值為1的整型常量
-一個從變量i取值的整型變量 -到底是什么?
-什么都不是
在代碼中使用到某一變量時根據(jù)執(zhí)行路徑的不同,其定義情況、類型都可能不同。如上例中代碼中的變量system,根據(jù)執(zhí)行的路徑不同,可以是函數(shù)、函數(shù)別名、整型變量和未定義的符號。下面是Ruby語言的包含符號定義的代碼片段 while true
var = true break end ρ var
for i in 1. . 3
var = true end ρ var
下面是Python語言的包含符號定義的代碼片段 #!/usr/bin/env python # — * — conding utf ——8 一氺一 def test (χ) if χ:
a = 1234
print hex ( id (a) ) , locals () print hex( id (a) ) , locals ( ) , a text (True)
在Ruby和Python語言中,對符號賦值即被視為完成一個定義(特殊情況除外,如Ruby 中的迭代語句),此定義在后續(xù)執(zhí)行路徑中一直有效(除非遇到對此符號的重新定義或刪除),也就是說其定義原則不同于C/JAVA等符號定義路徑不敏感的語言(這些語言都有嚴格的名字空間約束符號的定義)。這種符號定義的方式極大的增強了語言的靈活性,但對于源代碼靜態(tài)缺陷分析來說,如果不進行精確的符號定義分析,就很難確定在代碼中某一位置符號的類型和其他屬性信息,也就無從進行相應(yīng)的分析工作。已知的源代碼靜態(tài)缺陷分析器忽略符號定義在不同執(zhí)行路徑中的不同定義情況, 遇到這種情況,處理辦法通常是使用所有取值的集合來進行籠統(tǒng)的分析或放棄復(fù)雜情況的分析,這些處理辦法都會導致大量的誤報和漏報。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是如何使源代碼靜態(tài)缺陷分析器能夠更加準確有效的分析處理路徑敏感的符號定義。為了解決上述問題,本發(fā)明提供了一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析方法,包括
A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
B、遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù);如果語句是符號定義類型語句則進行步驟C ;各路徑都已遍歷完后進行步驟D ;C、將該符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;返回步驟B,分析下一條語句;
D、根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。進一步地,所述步驟C包括
Cl、判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后進行步驟C2 ;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則進行步驟C2,如果在則進行步驟C3 ;
C2、將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),進行步驟
C3 ;
C3、根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例;返回步驟B,分析下一條語句。進一步地,所述步驟C3中將新定義的實例保存在該符號的符號結(jié)構(gòu)中是指 將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中。進一步地,所述步驟B中還包括
當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧, 直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。本發(fā)明還提供了一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器,包括 源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
結(jié)果輸出模塊,用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果; 缺陷分析模塊;
其特征在于,還包括符號定義處理模塊;
所述缺陷分析模塊用于遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù); 如果語句是符號定義類型語句則發(fā)送給所述符號定義處理模塊;各路徑都已遍歷完后將分析數(shù)據(jù)發(fā)送給所述結(jié)果輸出模塊;
所述符號定義處理模塊用于將所接收的符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;通知所述缺陷分析模塊分析下一條語句。進一步地,所述符號定義處理模塊包括 添加單元、實例單元;
創(chuàng)建單元,用于判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后指示所述添加單元工作;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則指示所述添加單元工作,如果在則指示所述實例單元工作;
所述添加單元用于將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),然后指示所述實例單元工作;
所述實例單元用于根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例,然后通知所述缺陷分析模塊分析下一條語句。進一步地,所述實例單元將新定義的實例保存在該符號的符號結(jié)構(gòu)中是指 所述實例單元將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中。進一步地,所述缺陷分析模塊還用于當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧,直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。本發(fā)明的技術(shù)方案在解析源代碼的過程中準確定位符號的類型和取值等信息,解決了當前源代碼靜態(tài)缺陷分析器中無法在路徑敏感的分析中準確跟蹤、定位符號定義信息的情況,可以使得基于此符號的靜態(tài)缺陷分析精度得到提高,可以有效降低漏報率和誤報率,提高了當前源代碼靜態(tài)缺陷分析器的檢測精度。


結(jié)合附圖參考詳細描述,可以更容易且更好的領(lǐng)會和理解本發(fā)明的前述方面, 圖1是典型的源代碼靜態(tài)缺陷分析器的功能框圖2是實施例二的處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器的功能框圖; 圖3是實施例二的處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器的工作流程示意圖。
具體實施例方式下面將結(jié)合附圖及實施例對本發(fā)明的技術(shù)方案進行更詳細的說明。需要說明的是,如果不沖突,本發(fā)明實施例以及實施例中的各個特征可以相互結(jié)合,均在本發(fā)明的保護范圍之內(nèi)。另外,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。實施例一、一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析方法,包括
A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
B、遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù);如果語句是符號定義類型語句(如函數(shù)定義、類定義、變量定義等)則進行步驟C ;各路徑都已遍歷完后進行步驟 D ;
C、將該符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;返回步驟B,分析下一條語句;
D、根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。本實施例中,所述步驟A、E可以但不限采用和現(xiàn)有技術(shù)相同的方案實現(xiàn);步驟B中對非符號定義類型語句的分析也可以但不限于按照現(xiàn)有技術(shù)中的方案實現(xiàn)。本實施例的步驟B中,遍歷各路徑時可采用任何路徑敏感的遍歷算法。絕大多數(shù)情況下,在某一執(zhí)行路徑中某一確定位置符號的定義信息都可以在源代碼實際運行前確定下來,因此可以用于精確的缺陷分析;語言中提供靈活的定義符號的方法是為了提高語言的靈活性,采用本實施例的方法后,在進行其他語句的分析時將使用到正確的對應(yīng)執(zhí)行路徑的符號定義信息,從而能夠分析源代碼中路徑敏感的符號定義,避免了代碼中多路徑對同一符號的多次不同定義帶給缺陷分析器的困惑。本實施例中,所述步驟C具體可以包括
Cl、判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后進行步驟C2 ;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則進行步驟C2,如果在則進行步驟C3 ;
C2、將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),進行步驟
C3 ;
C3、根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例;返回步驟B,分析下一條語句。本實施例中,所述步驟C3中將新定義的實例保存在該符號的符號結(jié)構(gòu)中可以但不限于是指將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中;實際應(yīng)用中也不排除采用其它方式保存。本實施例中,所述步驟B中還可以包括
當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧, 直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。實施例二、一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器,如圖2所示,包括
缺陷分析模塊、符號定義處理模塊、結(jié)果輸出模塊; 源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;
所述缺陷分析模塊用于遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù); 如果語句是符號定義類型語句則發(fā)送給所述符號定義處理模塊;各路徑都已遍歷完后將分析數(shù)據(jù)發(fā)送給所述結(jié)果輸出模塊;
所述符號定義處理模塊用于將所接收的符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;通知所述缺陷分析模塊分析下一條語句;
所述結(jié)果輸出模塊用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。本實施例中,所述缺陷分析模塊對對非符號定義類型語句的分析得到分析數(shù)據(jù)的方案、以及結(jié)果輸出模塊的實現(xiàn)方案可以但不限采用和現(xiàn)有技術(shù)相同的方案實現(xiàn);其中預(yù)定的缺陷規(guī)則可以但不限于保存為缺陷規(guī)則庫,可以保存在結(jié)果輸出模塊中,也可以保存在其它模塊中。本實施例在原有源代碼靜態(tài)缺陷分析框架的基礎(chǔ)上設(shè)置了一個符號定義分析處理模塊,該模塊基于缺陷檢測模塊的路徑敏感的遍歷,嵌入缺陷分析處理過程,目的能完整、準確的記錄、替換和恢復(fù)符號定義信息,保證在對中間代碼進行缺陷分析時能夠使用到正確的定義信息,該過程可能進行多次入棧、出棧、前進、回滾等操作,取決于代碼中控制流路徑的數(shù)量,直到所有中間代碼都被缺陷檢測模塊分析處理為止。其它處理流程與典型的源代碼靜態(tài)缺陷分析器一致,如前所述。
本實施例中,所述缺陷分析模塊遍歷各路徑時可采用任何路徑敏感的遍歷算法。本實施例中,所述符號定義處理模塊具體可以包括 添加單元、實例單元;
創(chuàng)建單元,用于判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后指示所述添加單元工作;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則指示所述添加單元工作,如果在則指示所述實例單元工作;
所述添加單元用于將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),然后指示所述實例單元工作;
所述實例單元用于根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例, 然后通知所述缺陷分析模塊分析下一條語句。本實施例中,所述實例單元將新定義的實例保存在該符號的符號結(jié)構(gòu)中可以但不限于是指所述實例單元將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中;實際應(yīng)用中也不排除采用其它方式保存。本實施例中,所述缺陷分析模塊還可以用于當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧,直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。本實施例中,所述源代碼靜態(tài)缺陷分析器的工作流程如圖3所示,包括如下步驟 首先,源碼解析模塊根據(jù)輸入的源代碼文件,產(chǎn)生當前源代碼文件的中間代碼形式,然
后進入缺陷分析模塊。缺陷分析模塊使用路徑敏感的遍歷算法來對中間代碼進行逐句分析。進入新路徑后,如果當前語句為符號定義類型語句(如函數(shù)定義、類定義、變量定義等),則轉(zhuǎn)發(fā)給符號定義處理模塊;如果是其它類型語句,則可按照常規(guī)方式處理,處理完成后則分析下一條語句;在分析下一條語句前先判斷當前遍歷的路徑中語句是否已分析完,如果沒有則分析下一條語句;如果本路徑中語句已分析完,則將該路徑的符號定義列表中的符號依次回滾到上一個標記狀態(tài),然后退出路徑;之后判斷中間代碼中的路徑是否已遍歷完,沒有遍歷完就進入新路徑,繼續(xù)逐條分析語句;如果所有路徑都已遍歷完,則通知源代碼靜態(tài)缺陷分析器的缺陷分析模塊繼續(xù)后面的工作。符號定義處理模塊接收到符號定義類型語句后,判斷該語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則創(chuàng)建新的符號結(jié)構(gòu),將該符號加入當前路徑的符號定義列表,標記符號的當前狀態(tài);如已建立,則在當前路徑的符號定義列表中搜索該符號是否存在,如不存在則將該符號加入當前路徑的符號定義列表,標記符號的當前狀態(tài);如果存在,或是將該符號加入符號定義列表并標記符號的當前狀態(tài)后,根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,并將其壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中, 同時將該符號的當前定義的指針指向該新加入的實例;完成后通知所述缺陷分析模塊繼續(xù)分析下一條語句;
其它實現(xiàn)細節(jié)可參加實施例一。
本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng)地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。當然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明的權(quán)利要求的保護范圍。
權(quán)利要求
1.一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析方法,包括A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;B、遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù);如果語句是符號定義類型語句則進行步驟C ;各路徑都已遍歷完后進行步驟D ;C、將該符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;返回步驟B,分析下一條語句;D、根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟C包括Cl、判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后進行步驟C2 ;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則進行步驟C2,如果在則進行步驟C3 ;C2、將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),進行步驟C3 ;C3、根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例;返回步驟B,分析下一條語句。
3.如權(quán)利要求2所述的方法,其特征在于,所述步驟C3中將新定義的實例保存在該符號的符號結(jié)構(gòu)中是指將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟B中還包括當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧, 直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。
5.一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器,包括源碼解析模塊,用于根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;結(jié)果輸出模塊,用于根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果;缺陷分析模塊;其特征在于,還包括符號定義處理模塊;所述缺陷分析模塊用于遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù); 如果語句是符號定義類型語句則發(fā)送給所述符號定義處理模塊;各路徑都已遍歷完后將分析數(shù)據(jù)發(fā)送給所述結(jié)果輸出模塊;所述符號定義處理模塊用于將所接收的符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;通知所述缺陷分析模塊分析下一條語句。
6.如權(quán)利要求5所述的源代碼靜態(tài)缺陷分析器,其特征在于,所述符號定義處理模塊包括添加單元、實例單元;創(chuàng)建單元,用于判斷該符號定義類型語句中所定義的符號對應(yīng)的符號結(jié)構(gòu)是否已建立,如未建立則建立對應(yīng)的符號結(jié)構(gòu)后指示所述添加單元工作;如已建立則判斷該符號是否在當前遍歷的路徑的符號定義列表中,如果不在則指示所述添加單元工作,如果在則指示所述實例單元工作;所述添加單元用于將該符號加入當前遍歷的路徑的符號定義列表,標記符號的當前狀態(tài),然后指示所述實例單元工作;所述實例單元用于根據(jù)當前遍歷的路徑中對該符號的定義創(chuàng)建新定義的實例,將該新定義的實例保存在該符號對應(yīng)的符號結(jié)構(gòu)中,將該符號的當前定義指向該新定義的實例, 然后通知所述缺陷分析模塊分析下一條語句。
7.如權(quán)利要求6所述的源代碼靜態(tài)缺陷分析器,其特征在于,所述實例單元將新定義的實例保存在該符號的符號結(jié)構(gòu)中是指所述實例單元將該新定義的實例壓入該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中。
8.如權(quán)利要求7所述的源代碼靜態(tài)缺陷分析器,其特征在于所述缺陷分析模塊還用于當一條路徑中的語句都分析完時,將該路徑的符號定義列表中的符號回滾到該符號上一個標記狀態(tài);回滾方法為將該符號對應(yīng)的符號結(jié)構(gòu)的定義實例堆棧中的實例依次出棧,直到該定義實例堆?;謴?fù)到最近一次標記該符號時的情況。
全文摘要
本發(fā)明公開了一種處理路徑敏感符號定義的源代碼靜態(tài)缺陷分析器及其方法;方法包括A、根據(jù)輸入的源代碼文件產(chǎn)生中間代碼;B、遍歷所述中間代碼中的各路徑,逐條分析語句,得到分析數(shù)據(jù);如果語句是符號定義類型語句則進行步驟C;各路徑都已遍歷完后進行步驟D;C、將該符號定義類型語句中所定義的符號記錄在當前遍歷的路徑下,將該符號的當前定義指向當前遍歷的路徑中的定義;返回步驟B,分析下一條語句;D、根據(jù)所述分析數(shù)據(jù)及預(yù)定的缺陷規(guī)則生成缺陷分析結(jié)果。本發(fā)明能使源代碼靜態(tài)缺陷分析器更加準確有效的分析處理路徑敏感的符號定義。
文檔編號G06F11/36GK102279800SQ20111025602
公開日2011年12月14日 申請日期2011年8月31日 優(yōu)先權(quán)日2011年8月31日
發(fā)明者吳世忠, 張普含, 曹明, 朱錢杭, 董國偉, 蔡晶晶, 郝永樂, 陳宇 申請人:中國信息安全測評中心, 北京啟明星辰信息安全技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1