一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法
【專利摘要】本發(fā)明提供一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,包括:S1:分離出源碼使用接口函數(shù);S2:根據(jù)控制流信息對(duì)接口函數(shù)按照正常執(zhí)行和異常處理路徑進(jìn)行歸類;S3:統(tǒng)計(jì)正常執(zhí)行和異常處理路徑中接口函數(shù)成對(duì)出現(xiàn)的頻度;S4:根據(jù)所設(shè)定閾值過(guò)濾低頻次不可信的配對(duì)函數(shù);S5:根據(jù)過(guò)濾后的配對(duì)函數(shù)檢測(cè)源碼中的使用違例。本發(fā)明能夠自動(dòng)從源碼中挖掘配對(duì)函數(shù),并根據(jù)配對(duì)函數(shù)對(duì)源碼進(jìn)行檢測(cè)。
【專利說(shuō)明】一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體涉及一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法。
【背景技術(shù)】
[0002]在計(jì)算機(jī)大型軟件系統(tǒng)中,存在大量的函數(shù)使用規(guī)則,其中一大類即為兩個(gè)函數(shù)針對(duì)同一資源執(zhí)行相反的功能,在本方法中,稱之為配對(duì)函數(shù)。由于大型軟件文檔的缺失,分工開(kāi)發(fā)的人員眾多等原因,使得該類軟件中存在大量的違例和配對(duì)函數(shù)的使用相關(guān)。
[0003]配對(duì)函數(shù)作用在同一類資源上,并執(zhí)行相關(guān)的功能,一般是接口提供者已經(jīng)實(shí)現(xiàn),一對(duì)配對(duì)函數(shù)中,一個(gè)完成資源的申請(qǐng),另一個(gè)完成資源的釋放,但是使用者僅關(guān)心功能的實(shí)現(xiàn),可能對(duì)接口使用和規(guī)范不熟練,在異常處理中,對(duì)申請(qǐng)的資源沒(méi)有及時(shí)釋放,從而造成內(nèi)核泄露、死鎖等問(wèn)題。
【發(fā)明內(nèi)容】
[0004](一)解決的技術(shù)問(wèn)題
[0005]針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提供一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,能夠自動(dòng)從源碼中挖掘配對(duì)函數(shù),并根據(jù)配對(duì)函數(shù)對(duì)源碼進(jìn)行檢測(cè)。
[0006](二)技術(shù)方案
[0007]為了達(dá)到以上目的,本發(fā)明通過(guò)以下技術(shù)方案予以實(shí)現(xiàn):
[0008]一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,該方法包括:
[0009]S1:分離出源碼使用接口函數(shù);
[0010]S2:根據(jù)控制流信息對(duì)接口函數(shù)按照正常執(zhí)行和異常處理路徑進(jìn)行歸類;
[0011]S3:統(tǒng)計(jì)正常執(zhí)行和異常處理路徑中接口函數(shù)成對(duì)出現(xiàn)的頻度;
[0012]S4:根據(jù)所設(shè)定閾值過(guò)濾低頻次不可信的配對(duì)函數(shù);
[0013]S5:根據(jù)配對(duì)函數(shù)檢測(cè)源碼中的使用違例。
[0014]優(yōu)選地,所述源碼使用接口函數(shù)包括:大型操作系統(tǒng)軟件中提供給驅(qū)動(dòng)程序使用的內(nèi)核擴(kuò)展函數(shù)接口,以及大型軟件分層設(shè)計(jì)實(shí)現(xiàn)中為上層提供的資源管理接口。
[0015]優(yōu)選地,步驟S2具體包括:根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,發(fā)生錯(cuò)誤時(shí),調(diào)用的函數(shù)均為異常處理路徑中的函數(shù),而執(zhí)行成功的函數(shù)則處于正常執(zhí)行路徑中。
[0016]優(yōu)選地,步驟S3具體包括:對(duì)于正常執(zhí)行路徑和異常處理路徑中的任意兩個(gè)函數(shù),若其函數(shù)參數(shù)存在關(guān)聯(lián)性,統(tǒng)計(jì)成對(duì)出現(xiàn)的次數(shù)。
[0017]優(yōu)選地,步驟S4具體包括:根據(jù)所設(shè)定的閾值對(duì)成對(duì)的函數(shù)進(jìn)行過(guò)濾,低于或等于所設(shè)定閾值的函數(shù)被忽略,高于所設(shè)定閾值的函數(shù)被保留,并判定為配對(duì)函數(shù)。
[0018]優(yōu)選地,步驟S5具體包括:根據(jù)挖掘和統(tǒng)計(jì)分析后所得的配對(duì)函數(shù),對(duì)源碼中的執(zhí)行路徑進(jìn)行掃描,若正常路徑中調(diào)用了配對(duì)函數(shù)之一,則檢查在執(zhí)行路徑上的異常處理路徑是否調(diào)用了對(duì)應(yīng)的配對(duì)的另一個(gè)函數(shù)。[0019]優(yōu)選地,所述根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,具體包括:若調(diào)用的接口函數(shù)返回相關(guān)的錯(cuò)誤或者讀取到輸入的異常數(shù)據(jù),則中斷后續(xù)的執(zhí)行。
[0020]優(yōu)選地,所述參數(shù)存在關(guān)聯(lián)性,具體包括:當(dāng)兩個(gè)函數(shù)作用于同一具體資源上時(shí),兩個(gè)函數(shù)參數(shù)和返回值存在關(guān)聯(lián)性;在規(guī)范命名的大型軟件中,兩者函數(shù)名字存在關(guān)聯(lián)性。
[0021]優(yōu)選地,所述所設(shè)定的閾值具體包括頻度參數(shù)、系統(tǒng)默認(rèn)值以及根據(jù)統(tǒng)計(jì)結(jié)果計(jì)算的平均值。
[0022]優(yōu)選地,任一所述配對(duì)函數(shù)包含兩個(gè)函數(shù),其中一個(gè)在正常執(zhí)行路徑中,另一個(gè)出現(xiàn)在與之對(duì)應(yīng)的異常處理路徑中,且兩者執(zhí)行相反的功能或操作。
[0023]優(yōu)選地,所述輸入的異常數(shù)據(jù)具體包括:外部環(huán)境、硬件或用戶輸入的異常數(shù)據(jù),或者輸入的數(shù)據(jù)進(jìn)行運(yùn)算后產(chǎn)生的異常數(shù)據(jù)。
[0024](三)有益效果
[0025]本發(fā)明至少有如下有益效果:
[0026]本發(fā)明提供了一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,能夠自動(dòng)地挖掘接口函數(shù)中的配對(duì)函數(shù),并對(duì)源碼進(jìn)行規(guī)范檢查,因此對(duì)接口函數(shù)的使用規(guī)范有著重要意義。
【專利附圖】
【附圖說(shuō)明】
[0027]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些圖獲得其他的附圖。
[0028]圖1為本發(fā)明實(shí)施例的一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法的流程圖;
[0029]圖2為本發(fā)明實(shí)施例的一個(gè)具體的挖掘和分析源碼示意圖。
【具體實(shí)施方式】
[0030]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0031]實(shí)施例1:
[0032]如圖1所示,本發(fā)明實(shí)施例提供了一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,該方法包括如下步驟:
[0033]S1:分離出源碼使用接口函數(shù);
[0034]S2:根據(jù)控制流信息對(duì)接口函數(shù)按照正常執(zhí)行和異常處理路徑進(jìn)行歸類;
[0035]S3:統(tǒng)計(jì)正常執(zhí)行和異常處理路徑中接口函數(shù)成對(duì)出現(xiàn)的頻度;
[0036]S4:根據(jù)閾值過(guò)濾低頻次不可信的配對(duì)函數(shù);
[0037]S5:根據(jù)過(guò)濾后的配對(duì)函數(shù)檢測(cè)源碼中的使用違例。
[0038]優(yōu)選地,所述源碼使用接口函數(shù)包括:大型操作系統(tǒng)軟件中提供給驅(qū)動(dòng)程序使用的內(nèi)核擴(kuò)展函數(shù)接口,以及大型軟件分層設(shè)計(jì)實(shí)現(xiàn)中為上層提供的資源管理接口。
[0039]優(yōu)選地,步驟S2具體包括:根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,發(fā)生錯(cuò)誤時(shí),調(diào)用的函數(shù)均為異常處理路徑中的函數(shù),而執(zhí)行成功的函數(shù)則處于正常執(zhí)行路徑中。
[0040]優(yōu)選地,步驟S3具體包括:對(duì)于正常執(zhí)行路徑和異常處理路徑中的任意兩個(gè)函數(shù),若其函數(shù)參數(shù)存在關(guān)聯(lián)性,統(tǒng)計(jì)成對(duì)出現(xiàn)的次數(shù)。
[0041]優(yōu)選地,步驟S4具體包括:根據(jù)所設(shè)定的閾值對(duì)成對(duì)的函數(shù)進(jìn)行過(guò)濾,低于或等于所設(shè)定閾值的函數(shù)被忽略,高于所設(shè)定閾值的函數(shù)被保留,并判定為配對(duì)函數(shù)。
[0042]優(yōu)選地,步驟S5具體包括:根據(jù)挖掘和統(tǒng)計(jì)分析后所得的配對(duì)函數(shù),對(duì)源碼中的執(zhí)行路徑進(jìn)行掃描,若正常路徑中調(diào)用了配對(duì)函數(shù)之一,則檢查在執(zhí)行路徑上的異常處理路徑是否調(diào)用了對(duì)應(yīng)的配對(duì)的另一個(gè)函數(shù)。
[0043]優(yōu)選地,所述根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,具體包括:若調(diào)用的接口函數(shù)返回相關(guān)的錯(cuò)誤或者讀取到輸入的異常數(shù)據(jù),則中斷后續(xù)的執(zhí)行。
[0044]優(yōu)選地,所述參數(shù)存在關(guān)聯(lián)性,具體包括:當(dāng)兩個(gè)函數(shù)作用于同一具體資源上時(shí),兩個(gè)函數(shù)參數(shù)和返回值存在關(guān)聯(lián)性;在規(guī)范命名的大型軟件中,兩者函數(shù)名字存在關(guān)聯(lián)性。
[0045]優(yōu)選地,所述所設(shè)定的閾值具體包括頻度、系統(tǒng)默認(rèn)值以及根據(jù)統(tǒng)計(jì)結(jié)果計(jì)算的平均值。
[0046]優(yōu)選地,任一所述配對(duì)函數(shù)包含兩個(gè)函數(shù),其中一個(gè)在正常執(zhí)行路徑中,另一個(gè)出現(xiàn)在與之對(duì)應(yīng)的異常處理路徑中,且兩者執(zhí)行相反的功能或操作。
[0047]優(yōu)選地,所述輸入的異常數(shù)據(jù)具體包括:外部環(huán)境、硬件或用戶輸入的異常數(shù)據(jù),或者輸入的數(shù)據(jù)進(jìn)行運(yùn)算后產(chǎn)生的異常數(shù)據(jù)。
[0048]本發(fā)明實(shí)施例提供了一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,能夠自動(dòng)地挖掘接口函數(shù)中的配對(duì)函數(shù),并對(duì)源碼進(jìn)行規(guī)范檢查,從而使得因此對(duì)接口函數(shù)的使用規(guī)范有著重要意義。
[0049]實(shí)施例2:
[0050]如圖2所示,為本發(fā)明另一實(shí)施例提供的一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,在該實(shí)施例中將結(jié)合操作系統(tǒng)的設(shè)備驅(qū)動(dòng)源碼,根據(jù)所述的挖掘和分析方法對(duì)該款驅(qū)動(dòng)的檢測(cè)過(guò)程進(jìn)行具體闡述。
[0051]步驟101:分離出函數(shù)cp_init_one調(diào)用的函數(shù),包括:alloc_etherdev、pci_enable_device> pci_set_mwi> pci_disable_device 和 free_netdev。
[0052]步驟102:根據(jù)控制流信息對(duì)接口函數(shù)按照正常執(zhí)行和異常處理路徑進(jìn)行歸類。由于存在多條可能的執(zhí)行路徑,為了簡(jiǎn)單,選擇多條執(zhí)行路徑中的一條,其中包括正常執(zhí)行和異常處理兩類操作。如圖2所示,在1889行出現(xiàn)錯(cuò)誤,此時(shí)alloc_etherdev和pci_enable_device執(zhí)行成功,位于正常執(zhí)行路徑中,并轉(zhuǎn)入異常執(zhí)行路徑,包括pci_disable_device 和 free_netdev 兩個(gè)函數(shù)。
[0053]步驟103:針對(duì)操作系統(tǒng)的所有源碼執(zhí)行上述分析,統(tǒng)計(jì)(pci_enable_device,pci_disable_device)、(pci_enable_device, free_netdev)等的出現(xiàn)頻度,由于前者在函數(shù)名字、參數(shù)等各個(gè)方面均符合配對(duì)跡象,以此類推(alloc_etherdev, free_netdev)。最終可以得出兩對(duì)配對(duì)函數(shù):(pci_enable_device, pci_disable_device)和(alloc_etherdev, free_netdev),這兩對(duì)配對(duì)函數(shù)分別作用在同類資源上,前者完成設(shè)備激活和去激活,后者完成內(nèi)存申請(qǐng)和釋放。
[0054]步驟104:再次掃描所有的源碼,若存在一個(gè)函數(shù)執(zhí)行成功pci_enable_device,在其后續(xù)的錯(cuò)誤處理路徑中沒(méi)有調(diào)用pci_diSable_deViCe,則視為找到一個(gè)使用違例。
[0055]以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解;其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種基于配對(duì)資源管理函數(shù)的自適應(yīng)挖掘和分析方法,其特征在于,該方法包括: S1:分離出源碼使用接口函數(shù); 52:根據(jù)控制流信息對(duì)接口函數(shù)按照正常執(zhí)行和異常處理路徑進(jìn)行歸類; 53:統(tǒng)計(jì)正常執(zhí)行和異常處理路徑中接口函數(shù)成對(duì)出現(xiàn)的頻度; 54:根據(jù)所設(shè)定閾值過(guò)濾低頻次不可信的配對(duì)函數(shù); 55:根據(jù)過(guò)濾后的配對(duì)函數(shù)檢測(cè)源碼中的使用違例。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述源碼使用接口函數(shù)包括:大型操作系統(tǒng)軟件中提供給驅(qū)動(dòng)程序使用的內(nèi)核擴(kuò)展函數(shù)接口,以及大型軟件分層設(shè)計(jì)實(shí)現(xiàn)中為上層提供的資源管理接口。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S2具體包括:根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,發(fā)生錯(cuò)誤時(shí),調(diào)用的函數(shù)均為異常處理路徑中的函數(shù),而執(zhí)行成功的函數(shù)則處于正常執(zhí)行路徑中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S3具體包括:對(duì)于正常執(zhí)行路徑和異常處理路徑中的任意兩個(gè)函數(shù),若其參數(shù)存在關(guān)聯(lián)性,統(tǒng)計(jì)成對(duì)出現(xiàn)的次數(shù)。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S4具體包括:根據(jù)所設(shè)定的閾值對(duì)成對(duì)的函數(shù)進(jìn)行過(guò)濾,低于或等于所設(shè)定閾值的函數(shù)被忽略,高于所設(shè)定閾值的函數(shù)被保留,并判定為配對(duì)函數(shù)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S5具體包括:根據(jù)挖掘和統(tǒng)計(jì)分析后所得的配對(duì)函數(shù),對(duì)源碼中的執(zhí)行路徑進(jìn)行掃描,若正常路徑中調(diào)用了配對(duì)函數(shù)之一,則檢查在執(zhí)行路徑上的異常處理路徑是否調(diào)用了對(duì)應(yīng)的配對(duì)的另一個(gè)函數(shù)。
7.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)函數(shù)返回值進(jìn)行錯(cuò)誤判定,具體包括:若調(diào)用的接口函數(shù)返回相關(guān)的錯(cuò)誤或者讀取到輸入的異常數(shù)據(jù),則中斷后續(xù)的執(zhí)行。
8.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述參數(shù)存在關(guān)聯(lián)性,具體包括:當(dāng)兩個(gè)函數(shù)作用于同一具體資源上時(shí),兩個(gè)函數(shù)參數(shù)和返回值存在關(guān)聯(lián)性;在規(guī)范命名的大型軟件中,兩者函數(shù)名字存在關(guān)聯(lián)性。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述所設(shè)定的閾值具體包括頻度、系統(tǒng)默認(rèn)值以及根據(jù)統(tǒng)計(jì)結(jié)果計(jì)算的平均值。
10.根據(jù)權(quán)利要求5所述的方法,其特征在于,任一所述配對(duì)函數(shù)包含兩個(gè)函數(shù),其中一個(gè)在正常執(zhí)行路徑中,另一個(gè)出現(xiàn)在與之對(duì)應(yīng)的異常處理路徑中,且兩者執(zhí)行相反的功能或操作。
11.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述輸入的異常數(shù)據(jù)具體包括:外部環(huán)境、硬件或用戶輸入的異常數(shù)據(jù),或者輸入的數(shù)據(jù)進(jìn)行運(yùn)算后產(chǎn)生的異常數(shù)據(jù)。
【文檔編號(hào)】G06F11/36GK103942145SQ201410150754
【公開(kāi)日】2014年7月23日 申請(qǐng)日期:2014年4月15日 優(yōu)先權(quán)日:2014年4月15日
【發(fā)明者】胡事民, 劉虎球 申請(qǐng)人:清華大學(xué)