1.一種用于提供語料庫的方法,包括:
獲得多個(gè)軟件文件;
針對(duì)所述多個(gè)軟件文件中的每一個(gè)確定多個(gè)產(chǎn)物;以及
將針對(duì)所述多個(gè)軟件文件中的每一個(gè)的所述多個(gè)產(chǎn)物存儲(chǔ)在數(shù)據(jù)庫中。
2.根據(jù)權(quán)利要求1所述的方法,還包括:定位所述多個(gè)軟件文件中的構(gòu)建文件并使用所述構(gòu)建文件來生成編譯器調(diào)用。
3.根據(jù)權(quán)利要求2所述的方法,還包括:將所述編譯器調(diào)用轉(zhuǎn)換成底層虛擬機(jī)(LLVM)前端調(diào)用。
4.根據(jù)權(quán)利要求3所述的方法,其中所述LLVM前端調(diào)用被修改或設(shè)備化以生成產(chǎn)物。
5.根據(jù)權(quán)利要求2所述的方法,其中所述構(gòu)建文件選自包括autocomf文件、cmake文件、automake文件、make文件以及供應(yīng)商指令的組。
6.根據(jù)權(quán)利要求2所述的方法,其中使用所述構(gòu)建文件來生成所述編譯器調(diào)用包括嘗試使用所述構(gòu)建文件來進(jìn)行至少部分地完成的構(gòu)建。
7.根據(jù)權(quán)利要求2所述的方法,其中使用所述構(gòu)建文件包括自動(dòng)地使用所述構(gòu)建文件。
8.根據(jù)權(quán)利要求2所述的方法,其中通過使用系統(tǒng)調(diào)用掛鉤來識(shí)別原始構(gòu)建過程中的一個(gè)或多個(gè)構(gòu)建步驟并將其設(shè)備化,來確定生成的所述編譯器調(diào)用。
9.根據(jù)權(quán)利要求8所述的方法,其中所述系統(tǒng)調(diào)用掛鉤包括s軌跡掛鉤。
10.根據(jù)權(quán)利要求1所述的方法,其中獲得多個(gè)軟件文件包括自動(dòng)地獲得多個(gè)軟件文件。
11.根據(jù)權(quán)利要求10所述的方法,其中自動(dòng)地獲得多個(gè)軟件文件包括使多個(gè)計(jì)算機(jī)共同地獲得所述多個(gè)軟件文件。
12.根據(jù)權(quán)利要求10所述的方法,其中自動(dòng)地獲得多個(gè)軟件文件包括從公共儲(chǔ)存庫自動(dòng)地獲得所述多個(gè)軟件文件中的至少一些。
13.根據(jù)權(quán)利要求10所述的方法,其中所述多個(gè)軟件文件包括軟件包的至少一個(gè)修訂版。
14.根據(jù)權(quán)利要求13所述的方法,還包括在所述軟件包的所述至少一個(gè)修訂版的產(chǎn)物之間的多個(gè)關(guān)系,其中所述多個(gè)關(guān)系被存儲(chǔ)在所述數(shù)據(jù)庫中。
15.根據(jù)權(quán)利要求1所述的方法,還包括:將所述軟件文件中的每一個(gè)轉(zhuǎn)換成中間表示,并根據(jù)針對(duì)所述軟件文件中的每一個(gè)的所述中間表示來確定所述多個(gè)產(chǎn)物中的至少一個(gè)。
16.根據(jù)權(quán)利要求1所述的方法,還包括:將所述多個(gè)軟件文件中的一個(gè)或多個(gè)分布在多個(gè)計(jì)算機(jī)之間并使所述多個(gè)計(jì)算機(jī)共同地將所述軟件文件中的每一個(gè)轉(zhuǎn)換成中間表示,并且根據(jù)針對(duì)所述軟件文件中的每一個(gè)的所述中間表示來確定所述多個(gè)產(chǎn)物中的至少一個(gè)。
17.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)產(chǎn)物包括調(diào)用圖、控制流程圖、use-def鏈、def-use鏈、支配樹、基本塊、變量、常量、分支語義以及協(xié)議中的一個(gè)或多個(gè)。
18.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)產(chǎn)物包括系統(tǒng)調(diào)用軌跡和執(zhí)行軌跡中的一個(gè)或多個(gè)。
19.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)產(chǎn)物包括循環(huán)不變量、類型信息、Z符號(hào)以及標(biāo)簽遷移系統(tǒng)表示中的一個(gè)或多個(gè)。
20.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)產(chǎn)物包括內(nèi)聯(lián)代碼注釋、提交歷史、文件編制文件以及公共漏洞和暴露源入口中的一個(gè)或多個(gè)。
21.根據(jù)權(quán)利要求1所述的方法,其中針對(duì)所述多個(gè)軟件文件中的每一個(gè)確定所述多個(gè)產(chǎn)物包括通過從所述多個(gè)軟件文件中的至少一個(gè)提取字符串來確定所述多個(gè)產(chǎn)物中的至少一個(gè)。
22.根據(jù)權(quán)利要求1所述的方法,其中針對(duì)所述多個(gè)軟件文件中的每一個(gè)確定所述多個(gè)產(chǎn)物包括在設(shè)備化環(huán)境中運(yùn)行所述多個(gè)軟件文件中的至少一些。
23.根據(jù)權(quán)利要求22所述的方法,其中所述設(shè)備化環(huán)境選自包括虛擬機(jī)、模擬器以及系統(tǒng)管理程序的組。
24.根據(jù)權(quán)利要求1所述的方法,還包括:生成與用于所述軟件文件中的每一個(gè)的所述多個(gè)產(chǎn)物相關(guān)聯(lián)的多個(gè)分級(jí)關(guān)系。
25.根據(jù)權(quán)利要求1所述的方法,還包括:將所述多個(gè)軟件文件存儲(chǔ)在所述數(shù)據(jù)庫中。
26.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)軟件文件是源代碼格式。
27.根據(jù)權(quán)利要求1所述的方法,其中所述多個(gè)軟件文件是二進(jìn)制代碼格式。
28.根據(jù)權(quán)利要求1所述的方法,其中所述數(shù)據(jù)庫是圖形數(shù)據(jù)庫。
29.一種用于提供語料庫的裝置,包括:
一個(gè)或多個(gè)存儲(chǔ)設(shè)備,存儲(chǔ)針對(duì)多個(gè)軟件文件中的每一個(gè)的多個(gè)產(chǎn)物,其中所述多個(gè)產(chǎn)物中的至少一些是根據(jù)所述多個(gè)軟件文件中的至少一些的中間表示而確定的。
30.一種用于提供語料庫的系統(tǒng),包括:
接口,能夠與具有多個(gè)軟件文件的源進(jìn)行通信;
一個(gè)或多個(gè)存儲(chǔ)設(shè)備,用于存儲(chǔ)針對(duì)所述多個(gè)軟件文件中的每一個(gè)的多個(gè)產(chǎn)物;以及
處理器,被通信耦合到所述接口和所述存儲(chǔ)設(shè)備,并且被配置成:
從所述源獲得所述多個(gè)軟件文件,以及
針對(duì)所述多個(gè)軟件文件中的每一個(gè)確定所述多個(gè)產(chǎn)物。
31.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述接口是網(wǎng)絡(luò)接口。
32.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述處理器被配置成確定所述多個(gè)產(chǎn)物包括:所述處理器被配置成將所述軟件文件中的每一個(gè)轉(zhuǎn)換成中間表示并根據(jù)針對(duì)所述軟件文件中的每一個(gè)的所述中間表示來確定所述多個(gè)產(chǎn)物中的至少一個(gè)。
33.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述處理器被配置成確定所述多個(gè)產(chǎn)物包括:所述處理器被配置成通過從所述多個(gè)軟件文件中的至少一些提取字符串來確定所述多個(gè)產(chǎn)物中的至少一個(gè)。
34.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述處理器被配置成獲得所述多個(gè)軟件文件包括:所述處理器被配置成自動(dòng)地從軟件儲(chǔ)存庫檢索所述多個(gè)軟件文件。
35.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述多個(gè)產(chǎn)物包括針對(duì)所述多個(gè)軟件文件中的每一個(gè)的圖形產(chǎn)物。
36.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述多個(gè)產(chǎn)物包括針對(duì)所述多個(gè)軟件文件中的每一個(gè)的開發(fā)產(chǎn)物。
37.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述多個(gè)產(chǎn)物包括針對(duì)所述多個(gè)軟件文件中的每一個(gè)的動(dòng)態(tài)產(chǎn)物。
38.根據(jù)權(quán)利要求30所述的系統(tǒng),其中所述多個(gè)產(chǎn)物包括針對(duì)所述多個(gè)軟件文件中的每一個(gè)的導(dǎo)出產(chǎn)物。
39.一種其上存儲(chǔ)有可執(zhí)行程序的非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),其中,所述程序命令處理設(shè)備執(zhí)行以下步驟:
自動(dòng)地獲得多個(gè)軟件文件;
通過以下操作來針對(duì)所述多個(gè)軟件文件中的每一個(gè)確定多個(gè)產(chǎn)物:
將所述軟件文件中的每一個(gè)轉(zhuǎn)換成中間表示,并且
根據(jù)針對(duì)所述軟件文件中的每一個(gè)的所述中間表示來確定所述多個(gè)產(chǎn)物中的至少一個(gè);以及
將針對(duì)所述多個(gè)軟件文件中的每一個(gè)的所述多個(gè)產(chǎn)物存儲(chǔ)在數(shù)據(jù)庫中。