混合程序分析方法和系統(tǒng)的制作方法
【專利摘要】一種混合程序分析方法包括啟動(dòng)應(yīng)用的靜態(tài)程序分析;在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢;通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集;通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集;通過所述動(dòng)態(tài)程序分析器使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu);通過所述動(dòng)態(tài)程序分析器回答所述查詢;以及繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析。
【專利說(shuō)明】混合程序分析方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及程序分析。更具體地說(shuō),本發(fā)明涉及混合程序分析。
【背景技術(shù)】
[0002]程序分析過程一般可被分為兩類:靜態(tài)程序分析和動(dòng)態(tài)程序分析。在靜態(tài)程序分析中,計(jì)算機(jī)軟件的分析可在不執(zhí)行被分析的應(yīng)用的情況下執(zhí)行。在動(dòng)態(tài)程序分析中,在分析期間使用測(cè)試輸入在真實(shí)或虛擬的處理器上執(zhí)行應(yīng)用。
[0003]根據(jù)Rice定理靜態(tài)程序分析一般被視為不可判定的。Rice定理認(rèn)為,對(duì)于部分函數(shù)的任何非平凡(non-trivial)屬性,沒有任何一般的且有效的方法來(lái)判定一種算法是否判定部分函數(shù)具有該屬性。Rice定理不僅提供了理論性上限,而且還提供了許多實(shí)際的分析所遇到的極限。
[0004]在這些不可判定的分析中,有判定給定調(diào)用點(diǎn)(call site)的確切被調(diào)用方法集(也稱為指針分析)不可判定的問題、解析反射調(diào)用不可判定的問題、以及與字符串分析和常量傳播相關(guān)的問題。
[0005]上述問題的可靠解通常具有較差的精確度。例如,對(duì)Class, newlnstance的調(diào)用(在Java中)的結(jié)果可以近似為本應(yīng)用的類層次結(jié)構(gòu)的所有可能類型。但是,結(jié)果的近似產(chǎn)生不精確且不可伸縮的分析。
[0006]已經(jīng)引入了改進(jìn)的技術(shù)來(lái)執(zhí)行兩階段分析,其中首先運(yùn)行動(dòng)態(tài)程序分析以確定用于隨后的靜態(tài)分析的動(dòng)態(tài)提示,然后靜態(tài)分析可以使用動(dòng)態(tài)提示以便為具有挑戰(zhàn)性的代碼結(jié)構(gòu)建模。例如,在Class, newlnstance的情況中,動(dòng)態(tài)分析記錄newlnstance調(diào)用分配的確切對(duì)象類型,然后靜態(tài)程序分析可以使用該數(shù)據(jù)進(jìn)行指針分析以解析(resolve)虛擬調(diào)用。盡管一般理解對(duì)動(dòng)態(tài)程序分析的這種依賴是不可靠的,但是兩階段分析所要解決的問題是不可判定的并且可靠的近似解經(jīng)常由于喪失精確性而不可用。即,與靜態(tài)程序分析相t匕,兩階段分析只是一種改進(jìn)的折衷。
【發(fā)明內(nèi)容】
[0007]根據(jù)本發(fā)明的實(shí)施例,一種混合程序分析方法包括啟動(dòng)應(yīng)用的靜態(tài)程序分析;在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢;將控制從所述靜態(tài)程序分析器傳遞到所述動(dòng)態(tài)程序分析器并啟動(dòng)所述代碼結(jié)構(gòu)的動(dòng)態(tài)程序分析;通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集;通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集;通過所述動(dòng)態(tài)程序分析器使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu);通過所述動(dòng)態(tài)程序分析器回答所述查詢;以及將控制從所述動(dòng)態(tài)程序分析器傳遞到所述靜態(tài)程序分析器并繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析。
[0008]根據(jù)本發(fā)明的實(shí)施例,混合程序分析系統(tǒng)包括:被配置為啟動(dòng)應(yīng)用的靜態(tài)程序分析的模塊;被配置為在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢的模塊;被配置為將控制從所述靜態(tài)程序分析器傳遞到所述動(dòng)態(tài)程序分析器并啟動(dòng)所述代碼結(jié)構(gòu)的動(dòng)態(tài)程序分析的模塊;被配置為通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集的模塊;被配置為通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集的模塊;被配置為通過所述動(dòng)態(tài)程序分析器,使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的模塊;被配置為通過所述動(dòng)態(tài)程序分析器回答所述查詢的模塊;以及被配置為將控制從所述動(dòng)態(tài)程序分析器傳遞到所述靜態(tài)程序分析器并繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析的模塊。
[0009]一種混合程序分析方法包括啟動(dòng)應(yīng)用的靜態(tài)程序分析;在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢;通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集;通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集;通過所述動(dòng)態(tài)程序分析器,使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu);通過所述動(dòng)態(tài)程序分析器將對(duì)應(yīng)于所述查詢的答案返回到所述靜態(tài)程序分析器;以及繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析。
[0010]根據(jù)本發(fā)明的實(shí)施例,混合程序分析系統(tǒng)包括:被配置為啟動(dòng)應(yīng)用的靜態(tài)程序分析的模塊;被配置為在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢的模塊;被配置為通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集的模塊;被配置為通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集的模塊;被配置為通過所述動(dòng)態(tài)程序分析器,使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的模塊;被配置為通過所述動(dòng)態(tài)程序分析器將對(duì)應(yīng)于所述查詢的答案返回到所述靜態(tài)程序分析器的模塊;以及被配置為繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析的模塊。
【專利附圖】
【附圖說(shuō)明】
[0011]下面參考附圖更詳細(xì)地描述本發(fā)明的優(yōu)選實(shí)施例:
[0012]圖1是用于解釋本發(fā)明的示例性實(shí)施例的例程的流程圖;
[0013]圖2是用于根據(jù)本發(fā)明的實(shí)施例的混合程序分析法的示例性方法的流程圖;
[0014]圖3是示出根據(jù)本發(fā)明的實(shí)施例用于執(zhí)行用于混合程序分析法的方法的示例性計(jì)算機(jī)系統(tǒng)的框圖;
[0015]圖4是用于解釋本發(fā)明的示例性實(shí)施例的例程的流程圖;以及
[0016]圖5是示出根據(jù)本發(fā)明的實(shí)施例用于執(zhí)行用于混合程序分析法的方法的示例性計(jì)算機(jī)系統(tǒng)的框圖。
【具體實(shí)施方式】
[0017]根據(jù)本發(fā)明的示例性實(shí)施例,實(shí)現(xiàn)用于混合程序分析法的框架,該混合程序分析法包括靜態(tài)程序分析和動(dòng)態(tài)程序分析。但是應(yīng)該理解,本發(fā)明的實(shí)施例不限于此處描述的特定方法和/或裝置。而是,本發(fā)明的實(shí)施例更廣泛地涉及用于執(zhí)行程序分析的增強(qiáng)的技術(shù)。此外,盡管此處參考特定的軟件(例如,Java)、語(yǔ)法、協(xié)議、操作平臺(tái)(硬件或軟件)等,但是本發(fā)明的實(shí)施例不限于此類軟件、語(yǔ)法、協(xié)議、操作平臺(tái)等。而且,在給出此處的教導(dǎo)的前提下,本領(lǐng)域的技術(shù)人員很容易理解,可對(duì)所示的實(shí)施例做出各種處于所聲明的發(fā)明的范圍內(nèi)的修改。即,此處示出和描述的實(shí)施例并非旨在或者可以推測(cè)出任何限制。[0018]現(xiàn)在參考圖1所示的示例性例程100來(lái)描述本發(fā)明的實(shí)施例。根據(jù)本發(fā)明的實(shí)施例,混合方法可以在了解靜態(tài)掃描程序?qū)⒔o出哪些查詢的情況下,提供在動(dòng)態(tài)程序分析中使用的用于運(yùn)行或執(zhí)行給定的計(jì)算機(jī)可讀指令的精確輸入?yún)?shù)??刂屏溯斎?yún)?shù)之后,使動(dòng)態(tài)程序分析的響應(yīng)專門針對(duì)適合于回答靜態(tài)分析器提出的查詢的程序運(yùn)行。
[0019]請(qǐng)參考以下示例(以Java語(yǔ)法編寫):
[0020]
【權(quán)利要求】
1.一種混合程序分析方法,包括: 啟動(dòng)應(yīng)用的靜態(tài)程序分析; 在判定需要?jiǎng)討B(tài)分析的應(yīng)用的代碼結(jié)構(gòu)時(shí),通過靜態(tài)程序分析器產(chǎn)生到動(dòng)態(tài)程序分析器的查詢; 將控制從所述靜態(tài)程序分析器傳遞到所述動(dòng)態(tài)程序分析器并啟動(dòng)所述代碼結(jié)構(gòu)的動(dòng)態(tài)程序分析; 通過所述動(dòng)態(tài)程序分析器將所述查詢解析為可用于調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu)的參數(shù)集; 通過所述動(dòng)態(tài)程序分析器產(chǎn)生所述參數(shù)集; 通過所述動(dòng)態(tài)程序分析器使用所述參數(shù)集調(diào)用所述應(yīng)用的所述代碼結(jié)構(gòu); 通過所述動(dòng)態(tài)程序分析器回答所述查詢;以及 將控制從所述動(dòng)態(tài)程序分析器傳遞到所述靜態(tài)程序分析器并繼續(xù)所述應(yīng)用的所述靜態(tài)程序分析。
2.根據(jù)權(quán)利要求1的混合方法,其中所述查詢包括所述代碼結(jié)構(gòu)的上下文信息。
3.根據(jù)權(quán)利要求1的混合方法,其中需要?jiǎng)討B(tài)分析的所述應(yīng)用的所述代碼結(jié)構(gòu)被識(shí)別為影響所述靜態(tài)分析的精確度,并且進(jìn)一步地,其中所述代碼結(jié)構(gòu)在所述靜態(tài)分析維護(hù)的抽象中未被建模。
4.根據(jù)權(quán)利要求1的混合方法,其中需要?jiǎng)討B(tài)分析的所述應(yīng)用的所述代碼結(jié)構(gòu)被所述靜態(tài)分析識(shí)別為反射結(jié)構(gòu)。
5.根據(jù)權(quán)利要求1的混合方法,其中需要?jiǎng)討B(tài)分析的所述應(yīng)用的所述代碼結(jié)構(gòu)被所述靜態(tài)分析識(shí)別為所述應(yīng)用中的條件分支的評(píng)估。
6.根據(jù)權(quán)利要求1的混合方法,其中需要?jiǎng)討B(tài)分析的所述應(yīng)用的所述代碼結(jié)構(gòu)被所述靜態(tài)分析識(shí)別為外部?jī)?nèi)容。
7.根據(jù)權(quán)利要求1的混合方法,進(jìn)一步包括通過所述動(dòng)態(tài)程序分析器將帶有上下文信息的所述查詢解析為所述參數(shù)集。
8.根據(jù)權(quán)利要求1的混合方法,其中所述參數(shù)集包括對(duì)應(yīng)于所述應(yīng)用的已識(shí)別分支的命令行參數(shù)。
9.根據(jù)權(quán)利要求1的混合方法,其中所述參數(shù)集包括對(duì)應(yīng)于所述應(yīng)用的已識(shí)別分支的數(shù)據(jù)輸入。
【文檔編號(hào)】G06F9/445GK103810096SQ201310524568
【公開日】2014年5月21日 申請(qǐng)日期:2013年10月30日 優(yōu)先權(quán)日:2012年11月6日
【發(fā)明者】E·貝斯克洛夫尼, M·皮斯托亞, O·特里普 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司