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

一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法

文檔序號(hào):6586360閱讀:170來(lái)源:國(guó)知局
專利名稱:一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種在軟件源代碼中檢測(cè)缺陷的技術(shù),確切的說(shuō),涉及一種基于代碼 分析工具與被測(cè)系統(tǒng)編譯過(guò)程相結(jié)合的軟件源代碼缺陷檢測(cè)方法,屬于計(jì)算機(jī)信息安全技 術(shù)領(lǐng)域。
背景技術(shù)
代碼缺陷檢測(cè)工具在檢測(cè)一個(gè)軟件包時(shí),需要獲得該軟件包正常編譯的順序和命 令,從而可以對(duì)該軟件包進(jìn)行編譯和檢測(cè)。但是現(xiàn)有的軟件包都有各自不同的編譯環(huán)境和 構(gòu)建方法,這對(duì)代碼檢測(cè)工具獲取軟件包的完整編譯方法造成了很大困難。現(xiàn)有的一些方法,包括環(huán)境變量替換,人工修改工程文件,這些均具有自動(dòng)化程度 不高,適用范圍窄等特點(diǎn)。環(huán)境變量替換是利用某些構(gòu)建系統(tǒng)在檢測(cè)編譯器時(shí)通過(guò)當(dāng)前環(huán) 境變量的值來(lái)獲取當(dāng)前編譯器。通過(guò)修改環(huán)境變量,可以讓構(gòu)建系統(tǒng)認(rèn)為檢測(cè)工具為當(dāng)前 編譯器,從而將檢測(cè)工具代入編譯命令,執(zhí)行檢測(cè)過(guò)程。這種方法的缺陷在于軟件并沒(méi)被真 正構(gòu)建,在編譯過(guò)程依賴先前編譯的結(jié)果時(shí),編譯過(guò)程無(wú)法完整進(jìn)行。人工修改工程文件是 通過(guò)修改工程文件中跟編譯相關(guān)的命令參數(shù),將檢測(cè)工具代入編譯命令,達(dá)到檢測(cè)目的。這 種方法需要針對(duì)不同的工程文件進(jìn)行不同的處理,費(fèi)時(shí)費(fèi)力,還容易出錯(cuò)。

發(fā)明內(nèi)容
本發(fā)明的目的在于不干擾正常編譯過(guò)程的條件下,獲取編譯命令的順序和參數(shù), 不僅針對(duì)不同的編譯環(huán)境和構(gòu)建方法而且能夠完整進(jìn)行編譯過(guò)程,自動(dòng)化程度高,適用范 圍廣,不易出錯(cuò)。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明所提供的技術(shù)方案的基本構(gòu)思如下本發(fā)明提供一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法,其特殊之處 在于包括下列操作步驟(1)實(shí)現(xiàn)執(zhí)行可執(zhí)行程序的函數(shù),即編寫(xiě)用來(lái)替換系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù);(2)設(shè)置環(huán)境變量;(3)編譯程序找到環(huán)境變量指定的庫(kù)文件;(4)編譯程序?qū)⒕幾g命令和參數(shù)傳給重載過(guò)后的執(zhí)行可執(zhí)行程序的函數(shù);(5)執(zhí)行可執(zhí)行程序的函數(shù)記錄編譯命令,即從執(zhí)行可執(zhí)行程序的函數(shù)的參數(shù)中 獲取實(shí)際編譯命令的信息;(6)調(diào)用系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù)。所述步驟(1)中將執(zhí)行可執(zhí)行程序的函數(shù)編譯成庫(kù)文件。所述步驟(2)所述設(shè)置環(huán)境變量是指將命令設(shè)置到環(huán)境變量里。所述步驟(3)所述指定的庫(kù)文件為執(zhí)行可執(zhí)行程序的函數(shù)編譯成的庫(kù)文件。所述步驟(4)中重載執(zhí)行可執(zhí)行程序的函數(shù)的步驟如下(41)將編譯程序傳進(jìn)的編譯命令和參數(shù)按照用戶需要的格式保存到指定的日志
3文件中;(42)利用系統(tǒng)庫(kù)中提供的動(dòng)態(tài)鏈接庫(kù)操作函數(shù),找到系統(tǒng)提供的執(zhí)行可執(zhí)行程序 的函數(shù);(43)將原始命令參數(shù)傳給系統(tǒng)的執(zhí)行可執(zhí)行程序的函數(shù),進(jìn)行調(diào)用;(44)將結(jié)果返回調(diào)用者。所述執(zhí)行可執(zhí)行程序的函數(shù)為execO函數(shù),所述系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù)為 系統(tǒng)exec ()庫(kù)函數(shù),所述環(huán)境變量為L(zhǎng)D_PRELOAD環(huán)境變量。所述庫(kù)文件為libmyexec. so庫(kù)文件。所述命令指 export LD_PREL0AD = libmyexec. so。所述exec ()函數(shù)為一個(gè)函數(shù)族,包括execv (), execve (), execvp () 3個(gè)函數(shù)。所述步驟(42)中的操作動(dòng)態(tài)鏈接庫(kù)的函數(shù)是指dlopen函數(shù)。與現(xiàn)有的技術(shù)相比,本發(fā)明具有如下有益效果1、本發(fā)明是對(duì)軟件包的構(gòu)建進(jìn)行集成的方法,解決了獲取軟件包編譯順序和參數(shù) 的問(wèn)題,使得代碼編譯檢測(cè)工具可以完整、正確記錄和再現(xiàn)軟件包編譯的全部過(guò)程。2、通過(guò)設(shè)置環(huán)境變量的方式,讓編譯系統(tǒng)在找到C系統(tǒng)庫(kù)之前找到我們實(shí)現(xiàn)的用 來(lái)替換系統(tǒng)可執(zhí)行程序的函數(shù)的動(dòng)態(tài)鏈接庫(kù)。3、在用來(lái)截獲系統(tǒng)可執(zhí)行程序的函數(shù)中,我們重新編寫(xiě)了新的執(zhí)行可執(zhí)行程序的 函數(shù),它首先記錄完整的編譯命令參數(shù),然后再調(diào)用真正的系統(tǒng)可執(zhí)行程序的函數(shù)。這樣既 獲得了編譯的命令,又不影響正常編譯的進(jìn)行,整個(gè)過(guò)程對(duì)于被編譯的軟件包來(lái)說(shuō)是透明 的。4、通過(guò)重載動(dòng)態(tài)鏈接庫(kù)中編譯相關(guān)的系統(tǒng)調(diào)用的方式來(lái)截獲編譯過(guò)程,適用范圍 廣,只要是具有動(dòng)態(tài)鏈接庫(kù)機(jī)制的平臺(tái)都可以適用。即通過(guò)截獲系統(tǒng)調(diào)用的方法來(lái)獲取整 個(gè)編譯的過(guò)程,適用于所有具有動(dòng)態(tài)鏈接功能的操作系統(tǒng)平臺(tái)。獲得的信息完整,因?yàn)闆](méi)有 命令可以繞過(guò)系統(tǒng)調(diào)用而單獨(dú)被系統(tǒng)執(zhí)行。同時(shí)對(duì)于被測(cè)軟件包來(lái)說(shuō)透明度高,完全不影 響原來(lái)的編譯過(guò)程。


圖1 現(xiàn)有技術(shù)原理圖;圖2:是本發(fā)明原理圖。
具體實(shí)施例方式下面結(jié)合附圖,對(duì)本發(fā)明一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法 的主要處理步驟(1)實(shí)現(xiàn)exec()函數(shù),即編寫(xiě)用來(lái)替換系統(tǒng)exec ()庫(kù)函數(shù)的函數(shù);將exec 0函 數(shù)編譯成libmyexec. so庫(kù)文件;(2)設(shè)置環(huán)境變量;具體是將命令export LD_PREL0AD = libmyexec. so設(shè)置到 LD_PREL0AD環(huán)境變量里;(3)編譯程序找到LD_PREL0AD環(huán)境變量指定的libmyexec. so庫(kù)文件;(4)編譯程序?qū)⒕幾g命令和參數(shù)傳給重載過(guò)后的exec O函數(shù);
exec()函數(shù)為一個(gè)函數(shù)族,包括execv (), execve (), execvp () 3個(gè)函數(shù),重載 exec ()函數(shù)所包括的3個(gè)函數(shù)的步驟如下(41)將編譯程序傳進(jìn)的編譯命令和參數(shù)按照用戶需要的格式保存到指定的log 文件中;(42)利用dlopen庫(kù)中提供的動(dòng)態(tài)鏈接庫(kù)操作exec 0函數(shù),找到系統(tǒng)提供的真正 的系統(tǒng)exec ()庫(kù)函數(shù);(43)將原始命令參數(shù)傳給真正的系統(tǒng)execO庫(kù)函數(shù),進(jìn)行調(diào)用;(44)將結(jié)果返回調(diào)用者。(5) exec ()函數(shù)記錄編譯命令,即從exec ()函數(shù)的參數(shù)中獲取實(shí)際編譯命令的信 息;(6)調(diào)用系統(tǒng)exec ()庫(kù)函數(shù)。我們根據(jù)操作系統(tǒng)執(zhí)行用戶命令的原理,設(shè)計(jì)了通過(guò)截獲系統(tǒng)調(diào)用的方法來(lái)獲取 整個(gè)編譯的過(guò)程。我們以Linux為例,說(shuō)明具體的截獲方法。此原理也適用于所有具有動(dòng) 態(tài)鏈接功能的操作系統(tǒng)平臺(tái)。在Linux系統(tǒng)中,用戶程序通常以調(diào)用系統(tǒng)exec 0庫(kù)函數(shù)系統(tǒng)調(diào)用的方式來(lái)執(zhí)行 新的命令。軟件包的編譯系統(tǒng)也是如此。編譯程序在確定了將要執(zhí)行的編譯命令之后,將 其作為參數(shù)傳給系統(tǒng)exec ()庫(kù)函數(shù)。execO創(chuàng)建一個(gè)新的進(jìn)程即exec 0函數(shù),并在新進(jìn) 程中執(zhí)行參數(shù)中指定的命令。于是,execO函數(shù)就是一個(gè)可以看到所有編譯命令的函數(shù)。 我們需要的信息都可以在execO函數(shù)處獲得。一般來(lái)說(shuō)execO都是在標(biāo)準(zhǔn)C程序庫(kù)中,以動(dòng)態(tài)鏈接的方式被調(diào)用??梢酝ㄟ^(guò)設(shè) 置LD_PREL0AD環(huán)境變量的方式,讓編譯系統(tǒng)在找到C系統(tǒng)庫(kù)之前找到我們實(shí)現(xiàn)的用來(lái)替換 系統(tǒng)execO庫(kù)函數(shù)的動(dòng)態(tài)鏈接庫(kù)。在用來(lái)截獲系統(tǒng)execO庫(kù)函數(shù)的庫(kù)中,我們重新實(shí)現(xiàn) 了新的execO函數(shù)。在我們實(shí)現(xiàn)的execO函數(shù)中,首先記錄完整的編譯命令參數(shù),然后再 調(diào)用真正的系統(tǒng)execO庫(kù)函數(shù)。這樣既獲得了編譯的命令,又不影響正常編譯的進(jìn)行。整 個(gè)過(guò)程對(duì)于被編譯的軟件包來(lái)說(shuō)是透明的。通過(guò)重載動(dòng)態(tài)鏈接庫(kù)中編譯相關(guān)的系統(tǒng)調(diào)用的方式來(lái)截獲編譯過(guò)程,適用范圍 廣,只要是具有動(dòng)態(tài)鏈接庫(kù)機(jī)制的平臺(tái)都可以適用。獲得的信息完整,因?yàn)闆](méi)有命令可以繞 過(guò)系統(tǒng)調(diào)用而單獨(dú)被系統(tǒng)執(zhí)行。同時(shí)對(duì)于被測(cè)軟件包來(lái)說(shuō)透明度高,完全不影響原來(lái)的編 譯過(guò)程。最后應(yīng)當(dāng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其限制,盡 管參照上述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然 可以對(duì)本發(fā)明的具體實(shí)施方式
進(jìn)行修改或者等同替換,而未脫離本發(fā)明精神和范圍的任何 修改或者等同替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法,其特征在于包括下列操作步驟(1)實(shí)現(xiàn)執(zhí)行可執(zhí)行程序的函數(shù),即編寫(xiě)用來(lái)替換系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù);(2)設(shè)置環(huán)境變量;(3)編譯程序找到環(huán)境變量指定的庫(kù)文件;(4)編譯程序?qū)⒕幾g命令和參數(shù)傳給重載過(guò)后的執(zhí)行可執(zhí)行程序的函數(shù);(5)執(zhí)行可執(zhí)行程序的函數(shù)記錄編譯命令,即從執(zhí)行可執(zhí)行程序的函數(shù)的參數(shù)中獲取實(shí)際編譯命令的信息;(6)調(diào)用系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟(1)中將執(zhí)行可執(zhí)行程序的函數(shù) 編譯成庫(kù)文件。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟(2)所述設(shè)置環(huán)境變量是指將命 令設(shè)置到環(huán)境變量里。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟(3)所述指定的庫(kù)文件為執(zhí)行可 執(zhí)行程序的函數(shù)編譯成的庫(kù)文件。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟(4)中重載執(zhí)行可執(zhí)行程序的函 數(shù)的步驟如下(41)將編譯程序傳進(jìn)的編譯命令和參數(shù)按照用戶需要的格式保存到指定的日志文件中;(42)利用系統(tǒng)庫(kù)中提供的動(dòng)態(tài)鏈接庫(kù)操作函數(shù),找到系統(tǒng)提供的執(zhí)行可執(zhí)行程序的函數(shù);(43)將原始命令參數(shù)傳給系統(tǒng)的執(zhí)行可執(zhí)行程序的函數(shù),進(jìn)行調(diào)用;(44)將結(jié)果返回調(diào)用者。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行可執(zhí)行程序的函數(shù)為execO函 數(shù),所述系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù)為系統(tǒng)exec 0庫(kù)函數(shù),所述環(huán)境變量為L(zhǎng)D-PREL0AD環(huán)境變量。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述exec()函數(shù)為一個(gè)函數(shù)族,包括 execv (),execve (),execvp () 3 個(gè)函數(shù)。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟(42)中的操作動(dòng)態(tài)鏈接庫(kù)的函 數(shù)是指dlopen函數(shù)。
全文摘要
本發(fā)明提供一種讓代碼分析工具獲取被檢測(cè)軟件包編譯過(guò)程的方法,包括下列操作步驟(1)實(shí)現(xiàn)執(zhí)行可執(zhí)行程序的函數(shù),即編寫(xiě)用來(lái)替換系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù);(2)設(shè)置環(huán)境變量;(3)編譯程序找到環(huán)境變量指定的庫(kù)文件;(4)編譯程序?qū)⒕幾g命令和參數(shù)傳給重載過(guò)后的執(zhí)行可執(zhí)行程序的函數(shù);(5)執(zhí)行可執(zhí)行程序的函數(shù)記錄編譯命令,即從執(zhí)行可執(zhí)行程序的函數(shù)的參數(shù)中獲取實(shí)際編譯命令的信息;(6)調(diào)用系統(tǒng)執(zhí)行可執(zhí)行程序的函數(shù)。本發(fā)明的目的在于不干擾正常編譯過(guò)程的條件下,獲取編譯命令的順序和參數(shù),不僅針對(duì)不同的編譯環(huán)境和構(gòu)建方法而且能夠完整進(jìn)行編譯過(guò)程,自動(dòng)化程度高,適用范圍廣,不易出錯(cuò)。
文檔編號(hào)G06F11/36GK101937389SQ20091025925
公開(kāi)日2011年1月5日 申請(qǐng)日期2009年12月17日 優(yōu)先權(quán)日2009年12月17日
發(fā)明者張*, 許中興 申請(qǐng)人:北京測(cè)騰信息技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1