監(jiān)控底層接口是否變化的方法及裝置制造方法【專利摘要】本發(fā)明涉及監(jiān)控底層接口是否變化的方法及裝置,其中監(jiān)控底層接口是否變化的方法包括步驟:獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù);判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同;以及若第一版本與第二版本所有對應(yīng)接口的函數(shù)相同,則判斷為第一版本與第二版本的底層接口相同,若第一版本與第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為第一版本與第二版本的底層接口不相同。本發(fā)明可以快速、有效地檢測出底層接口的變化?!緦@f明】監(jiān)控底層接口是否變化的方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及底層接口監(jiān)控【
技術(shù)領(lǐng)域:
】,特別涉及監(jiān)控底層接口是否變化的方法及裝置?!?br>背景技術(shù):
】[0002]目前,主流的系統(tǒng)架構(gòu),例如軟件架構(gòu)等,大都采用分層架構(gòu),它會(huì)將一些通用的和相對獨(dú)立的功能封裝成接口,并以動(dòng)態(tài)鏈接庫(DynamicLinkLibrary,Dll)的方式提供。這些提供接口的動(dòng)態(tài)鏈接庫就組成了底層。而上層要使用這些功能的時(shí)候,就需要加載這些動(dòng)態(tài)鏈接庫以使用這些動(dòng)態(tài)鏈接庫提供的接口。隨著時(shí)間的發(fā)展,底層接口也隨著時(shí)間和軟件功能的變化而變化(例如底層接口的第二版本相對于底層接口的第一版本有變化),而這樣的變化會(huì)影響上層的功能和使用,這些變化對于上層來說是十分重要的。因此,監(jiān)控底層接口的這種變化并告知上層使用者是十分必要的。[0003]現(xiàn)有的監(jiān)控底層接口變化的方法是通過掃描源代碼的方式。即需要將源代碼文件拉到本地,使用微軟提供的DTE接口,對源代碼文件進(jìn)行逐個(gè)的掃描,通過關(guān)鍵字識別源代碼的二進(jìn)制文件的底層的接口,然后對底層的接口進(jìn)行比較以監(jiān)控底層接口是否變化。但是,使用源代碼監(jiān)控底層接口是否變化的方法主要有以下問題:一方面,需要拉取源代碼到本地進(jìn)行源代碼的比較,這就需要源代碼的權(quán)限,而源代碼的權(quán)限是比較敏感的資源,獲取過程比較復(fù)雜。另一方面,需要掃描全部源代碼以進(jìn)行接口的比較,而現(xiàn)在大多數(shù)產(chǎn)品的源代碼量是比較大的,因此進(jìn)行源代碼比較這個(gè)過程是非常耗時(shí)的。而且,為了解決耗時(shí)問題,會(huì)采取分布式的方法進(jìn)行,但部署成分布式又增加了實(shí)現(xiàn)的難度?!?br/>發(fā)明內(nèi)容】[0004]因此,本發(fā)明提供監(jiān)控底層接口是否變化的方法及裝置,以快速、有效地檢測出底層接口的變化。[0005]具體地,本發(fā)明實(shí)施例提供的一種監(jiān)控底層接口是否變化的方法,其包括步驟:獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù);判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同;以及若第一版本與第二版本所有對應(yīng)接口的函數(shù)相同,則判斷為第一版本與第二版本的底層接口相同,若第一版本與第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為第一版本與第二版本的底層接口不相同。[0006]另外,本發(fā)明實(shí)施例提供的一種監(jiān)控底層接口是否變化的裝置,其包括:獲取單元、判斷單元以及監(jiān)控單元,其中,獲取單元,用于獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù);判斷單元,用于判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同;監(jiān)控單元,用于在第一版本與第二版本所有對應(yīng)接口的函數(shù)相同,則判斷為第一版本與第二版本的底層接口相同,若第一版本與第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為第一版本與第二版本的底層接口不相同。[0007]由上述實(shí)施例可知,本發(fā)明通過判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同,若相同,則判斷為第一版本與第二版本的底層接口相同,若不相同,則判斷為第一版本與第二版本的底層接口不相同。因本發(fā)明通過判斷所有對應(yīng)接口的函數(shù)是否變化而監(jiān)控底層接口是否變化。從而相較現(xiàn)有技術(shù)的源代碼比較方式,本發(fā)明可以快速、有效地檢測出底層接口的變化。[0008]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其他目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉較佳實(shí)施例,并配合附圖,詳細(xì)說明如下。【專利附圖】【附圖說明】[0009]圖1是本發(fā)明實(shí)施例提供的監(jiān)控底層接口是否變化的方法的步驟流程圖;[0010]圖2是本發(fā)明另一實(shí)施例提供的監(jiān)控底層接口是否變化的方法的步驟流程圖;[0011]圖3是本發(fā)明實(shí)施例提供的獲取Com接口、Com接口的成員函數(shù)、成員函數(shù)的返回值、函數(shù)名和參數(shù)的方法的步驟流程圖;[0012]圖4是本發(fā)明實(shí)施例提供的獲取動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)的方法的步驟流程圖;[0013]圖5是本發(fā)明實(shí)施例監(jiān)控底層接口是否變化的裝置的主要架構(gòu)框圖?!揪唧w實(shí)施方式】[0014]為更進(jìn)一步闡述本發(fā)明為達(dá)成預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實(shí)施例,對依據(jù)本發(fā)明提出的監(jiān)控底層接口是否變化的方法及裝置其【具體實(shí)施方式】、結(jié)構(gòu)、特征及功效,詳細(xì)說明如后。[0015]有關(guān)本發(fā)明的前述及其他技術(shù)內(nèi)容、特點(diǎn)及功效,在以下配合參考圖式的較佳實(shí)施例詳細(xì)說明中將可清楚的呈現(xiàn)。通過【具體實(shí)施方式】的說明,當(dāng)可對本發(fā)明為達(dá)成預(yù)定目的所采取的技術(shù)手段及功效得以更加深入且具體的了解,然而所附圖式僅是提供參考與說明之用,并非用來對本發(fā)明加以限制。[0016]圖1是本發(fā)明實(shí)施例提供的監(jiān)控底層接口是否變化的方法的步驟流程圖。請參閱圖1,本發(fā)明實(shí)施例的監(jiān)控底層接口是否變化的方法可包括以下步驟S101-S107:[0017]步驟S101,獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫(DynamicLinkLibrary,Dll),獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù)。[0018]本步驟中,此接口可以包括動(dòng)態(tài)鏈接庫接口或Com接口。若動(dòng)態(tài)鏈接庫符合Com(ComponentObjectModel,組件對象模型)規(guī)范,貝U接口可以包括Com接口,而函數(shù)則可以為動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)和Com接口的成員函數(shù)。[0019]步驟S103,判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同,若相同,則進(jìn)行步驟S105,若不相同,則進(jìn)行步驟S107。[0020]本步驟中,若接口為Com接口,則函數(shù)即為Com接口的成員函數(shù),若接口為動(dòng)態(tài)鏈接庫接口,則函數(shù)即為動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)。判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同即依次判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)的函數(shù)名、函數(shù)的返回值和函數(shù)參數(shù)是否相同。[0021]步驟S105,判斷為第一版本與第二版本的底層接口相同。[0022]本步驟中,第一版本與第二版本的底層接口相同即第二版本的底層接口相較于第一版本的底層接口無變化,或者第一版本的底層接口相較于第二版本的底層接口無變化。[0023]步驟S107,判斷為第一版本與第二版本的底層接口不相同。[0024]本步驟中,第一版本與第二版本的底層接口不相同即第二版本的底層接口相較于第一版本的底層接口有變化,或者第一版本的底層接口相較于第二版本的底層接口有變化。[0025]在本發(fā)明的實(shí)施例中,本發(fā)明通過判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同,若相同,則判斷為第一版本與第二版本的底層接口相同,若不相同,則判斷為第一版本與第二版本的底層接口不相同。因本發(fā)明通過判斷所有對應(yīng)接口的函數(shù)是否變化而監(jiān)控底層接口是否變化。從而相較現(xiàn)有技術(shù)的源代碼比較方式,本發(fā)明可以快速、有效地檢測出底層接口的變化。[0026]圖2是本發(fā)明實(shí)施例提供的監(jiān)控底層接口是否變化的方法的步驟流程圖。圖2是在圖1的基礎(chǔ)上改進(jìn)而來的。請參閱圖2,本發(fā)明實(shí)施例的監(jiān)控底層接口是否變化的方法可包括以下步驟S200-S217:[0027]步驟S200,獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫(DynamicLinkLibrary,Dll),獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù)。[0028]本步驟中,此接口可以包括動(dòng)態(tài)鏈接庫接口或Com接口。若動(dòng)態(tài)鏈接庫符合Com規(guī)范,貝1J接口可以包括Com(ComponentObjectModel,組件對象模型)接口,而函數(shù)則可以為動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)和Com接口的成員函數(shù)。其中,獲取Com接口可以通過微軟提供的DIA(DebugInterfaceAccess,調(diào)試界面訪問)接口讀取F1DB(programdatabase,程序數(shù)據(jù)庫)中的符號信息再加以判斷而獲取的(如圖3)。而對于動(dòng)態(tài)鏈接庫接口的獲取,可以通過掃描動(dòng)態(tài)鏈接庫文件,分析PE(PortableExecute,可執(zhí)行)文件的結(jié)構(gòu),提取導(dǎo)出表信息而獲得(如圖4)。[0029]步驟S201,判斷第一版本的所有接口與第二版本的所有接口中是否有相同名稱的接口,若是,則進(jìn)行步驟S203,若否,則進(jìn)行步驟S202。[0030]本步驟中,接口可以為Com接口、動(dòng)態(tài)鏈接庫接口。本實(shí)施方式中,第一版本與第二版本中的相同名稱的接口即為第一版本與第二版本中的對應(yīng)的接口。[0031]步驟S202,記錄第一版本的所有接口與第二版本的所有接口之間的差異。[0032]本步驟中,下面以動(dòng)態(tài)鏈接庫A.Dll(動(dòng)態(tài)鏈接庫)的Com接口的比較為例說明進(jìn)行接口比較的流程,其中動(dòng)態(tài)鏈接庫Al是A.Dll(動(dòng)態(tài)鏈接庫)的第二版本,而動(dòng)態(tài)鏈接庫A2是A.Dll(動(dòng)態(tài)鏈接庫)的第一版本。而動(dòng)態(tài)鏈接庫Al的Com接口的UDT(UserDefinedType,用戶定義類型)調(diào)試符號集合為N={all,al2,al3…aln},動(dòng)態(tài)鏈接庫A2的Com接口的UDT調(diào)試符號集合為M={a21,a22,a23…a2n}。對于Com接口的比較,首先是進(jìn)行Com接口的比較,然后進(jìn)行Com接口的成員函數(shù)的比較。由于每個(gè)Com接口都有一個(gè)UDT調(diào)試符號,因此對于Com接口的比較可以通過比較第一版本和第二版本Com接口的UDT調(diào)試符號集合中的元素(例如集合M中的元素all,al2,al3…aln,和集合N中的元素a21,a22,a23...a2n)是否相同以進(jìn)行Com接口的比較。即對于M中的每一個(gè)元素,在N中尋找是否有和這個(gè)元素名字相同的元素,如果有,則再進(jìn)行成員函數(shù)的比較。若無,則記錄兩者之間的差異。然后從M、N中刪除這個(gè)已經(jīng)比較過的相同名字的元素。這樣最后剩下的就是存在于N中但不存在于M中的接口,以及不存在于N但存在于M中的接口。對于存在于N中但不存在于M中的接口,若定義和動(dòng)態(tài)鏈接庫A2相比較,則為動(dòng)態(tài)鏈接庫Al的新增接口;對于不存在于N中但存在于M中的接口,若定義為和動(dòng)態(tài)鏈接庫A2相比較,則為動(dòng)態(tài)鏈接庫Al刪除的接口。對于成員函數(shù)的比較,其比較過程的原理和接口的比較類似。也是列出兩個(gè)版本需要比較的成員函數(shù)的集合。對于兩個(gè)集合名字相同的成員函數(shù),進(jìn)行函數(shù)的返回值和參數(shù)的比較,記錄差異并從集合中刪除兩個(gè)已經(jīng)比較過的成員函數(shù)。最后剩下的就是和動(dòng)態(tài)鏈接庫A2相比較,動(dòng)態(tài)鏈接庫Al中的某Com接口新增和刪除的成員函數(shù)。它和Com接口的比較有一個(gè)不同的地方在于函數(shù)的比較要處理重載函數(shù)的比較。[0033]步驟S201后具體還可包括步驟:[0034]步驟S203,判斷第一版本與第二版本的所有相同名稱的接口中是否有相同名稱的函數(shù),若判斷為是,則進(jìn)行步驟S206,若判斷為否,則進(jìn)行步驟S205。[0035]本步驟中,若接口為Com接口,則函數(shù)即為Com接口的成員函數(shù),若接口為動(dòng)態(tài)鏈接庫接口,則函數(shù)即為動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)。[0036]步驟S205,記錄第一版本與第二版本的相同名稱的接口的函數(shù)之間的差異。[0037]步驟S206,判斷第一版本與第二版本的此相同名稱的函數(shù)是否是重載函數(shù),若否,則進(jìn)行步驟S209,若是,則進(jìn)行步驟S215。[0038]本步驟中,第一版本與第二版本的此相同名稱的函數(shù)即第一版本與第二版本的對應(yīng)接口的相同名稱的函數(shù)。重載函數(shù)即兩個(gè)或者兩個(gè)以上的函數(shù),具有相同的函數(shù)名,但是形參的個(gè)數(shù)或者類型不同。比如在動(dòng)態(tài)鏈接庫Al中有3個(gè)函數(shù)名為XXX的函數(shù)X11,X12,X13,而在動(dòng)態(tài)鏈接庫A2中也有兩個(gè)函數(shù)名為XXX的函數(shù)X21,X22,則函數(shù)XII,X12,X13,X2LX22為重載函數(shù)。[0039]步驟S209,比較第一版本與第二版本的相同名稱的函數(shù)的返回值和參數(shù)是否相同,若是,則進(jìn)行步驟S211,若否,則進(jìn)行步驟S213。[0040]本步驟中,參數(shù)包括參數(shù)個(gè)數(shù)、參數(shù)類型等。[0041]步驟S211,判斷為第一版本與第二版本的相同名稱的函數(shù)為相同的函數(shù)。[0042]步驟S213,記錄函數(shù)之間的差異。[0043]步驟S215,確定第二版本中哪個(gè)重載函數(shù)與第一版本的相同名稱的重載函數(shù)進(jìn)行比較。[0044]本步驟中,假設(shè)在第一版本的動(dòng)態(tài)鏈接庫Al中有3個(gè)函數(shù)名為XXX的重載函數(shù)X11,X12,X13,而在第二版本動(dòng)態(tài)鏈接庫A2中也有兩個(gè)函數(shù)名為XXX的重載函數(shù)X21,X22,那么這里需要進(jìn)行定位函數(shù)Xll究竟是和函數(shù)X21、X22中的哪個(gè)函數(shù)進(jìn)行比較,X12究竟是和函數(shù)X21、X22中的哪個(gè)函數(shù)進(jìn)行比較,以及X13究竟是和函數(shù)X21、X22中的哪個(gè)函數(shù)進(jìn)行比較。即尋找差別最小,即最相似的兩個(gè)函數(shù)進(jìn)行差異化的比較。若進(jìn)行比較的兩個(gè)函數(shù)的返回值或者單個(gè)參數(shù)(例如參數(shù)個(gè)數(shù)、參數(shù)類型)不一樣,就算一個(gè)差別。然后按照以下方法計(jì)算差別(即計(jì)算出返回值的差別值、參數(shù)個(gè)數(shù)的差別值、參數(shù)類型的差別值等),與重載函數(shù)XI1、X12、X13差別最小的第二版本的那個(gè)重載函數(shù)則分別定義為與函數(shù)XI1、X12、X13最相似的函數(shù)。將第一版本的重載函數(shù)X11、X12、X13分別與第二版本的所有重載函數(shù)(X21、X22)進(jìn)行比較,以函數(shù)Xll為例進(jìn)行說明:[0045](I)若函數(shù)Xll(第一版本的重載函數(shù))與第二版本的某個(gè)重載函數(shù)(例如函數(shù)X21)的參數(shù)個(gè)數(shù)相同時(shí),計(jì)算函數(shù)Xll與第二版本的此重載函數(shù)的返回值和參數(shù)類型的第一差別值a,并找出第一差別值最小的第二版本中的那個(gè)函數(shù)(如果a值是O的話,就是沒差別,則認(rèn)為與函數(shù)Xll差別最小的函數(shù)即為與函數(shù)Xll最相似的函數(shù))。舉例說明,若函數(shù)Xll與第二版本的函數(shù)X21的參數(shù)個(gè)數(shù)相同,函數(shù)Xll的返回值與函數(shù)X21的返回值也相同,而函數(shù)Xll有三個(gè)參數(shù)的類型與函數(shù)X21不同,則第一差別值a=3。[0046](2)若函數(shù)Xll與第二版本的某個(gè)重載函數(shù)(例如函數(shù)X22)的參數(shù)個(gè)數(shù)不同時(shí),計(jì)算函數(shù)Xii與第二版本的此重載函數(shù)的參數(shù)個(gè)數(shù)的第二差別值b,并找出第二差別值最小的第二版本中的那個(gè)函數(shù)。舉例說明,若函數(shù)Xll與第二版本的函數(shù)X22的參數(shù)個(gè)數(shù)不同,函數(shù)Xll的參數(shù)個(gè)數(shù)為兩個(gè),而函數(shù)X22的參數(shù)個(gè)數(shù)為一個(gè),則第二差別值b=2。[0047](3)第二差別值b〈第一差別值a時(shí),則取最小b值對應(yīng)的第二版本中的那個(gè)函數(shù),否則,第二差別值b大于等于第一差別值a時(shí),則取最小a值對應(yīng)的第二版本中的那個(gè)函數(shù)作為與函數(shù)Xll差別最小的函數(shù)即為與函數(shù)Xll最相似的函數(shù)。[0048]若經(jīng)過計(jì)算,發(fā)現(xiàn)函數(shù)Xll和X22的差別最小,則對這兩個(gè)函數(shù)Xll和X22進(jìn)行差異化的比較,并記錄比較結(jié)果,然后從比較集合中刪除這兩個(gè)函數(shù)Xll和X22。再對X12、X13從第二版本的重載函數(shù)中尋找差別最小的函數(shù)并將兩者進(jìn)行比較,若兩者相同,則從第一版本的重載函數(shù)和第二版本的重載函數(shù)中分別刪除這個(gè)已經(jīng)比較過的相同的函數(shù),直到將某個(gè)比較集合中的函數(shù)(即第一版本的重載函數(shù)或第二版本的重載函數(shù))全部比較完。剩下的就是新增或者刪除的函數(shù)。[0049]由以上可以總結(jié)得出步驟S215中具體還可包括步驟:若第一版本與第二版本的相同名稱的函數(shù)是重載函數(shù),則依次將第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的所有重載函數(shù)的參數(shù)個(gè)數(shù)進(jìn)行比較,若第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)相同,則計(jì)算第二版本與第一版本的參數(shù)個(gè)數(shù)相同的重載函數(shù)的返回值和參數(shù)類型的第一差別值,并找出第一差別值最小的第二版本中的那個(gè)重載函數(shù);若第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)不相同,則計(jì)算第二版本與第一版本的參數(shù)個(gè)數(shù)不相同的重載函數(shù)的參數(shù)個(gè)數(shù)的第二差別值,并找出第二差別值最小的第二版本中的那個(gè)重載函數(shù);以及根據(jù)第一差別值最小的第二版本中的重載函數(shù)與第二差別值最小的第二版本的重載函數(shù),以確定第二版本中差別值最小的那個(gè)重載函數(shù)與第一版本的需比較的重載函數(shù)進(jìn)行比較。[0050]步驟S217,比較第二版本中所確定的函數(shù)與第一版本的相同名稱的函數(shù)的返回值和參數(shù)是否相同,若是,則進(jìn)行步驟S211,若否,則進(jìn)行步驟S213。[0051]在本發(fā)明的實(shí)施例中,本發(fā)明通過判斷第一版本的所有接口與第二版本的所有接口中是否有相同名稱的接口,再判斷第一版本與第二版本此相同名稱的接口的函數(shù)的返回值、函數(shù)名和參數(shù)是否相同,若相同,則判斷為第一版本與第二版本所有對應(yīng)接口的函數(shù)相同,若不同,則判斷為第一版本與第二版本所有對應(yīng)接口的函數(shù)不相同。還判斷第一版本與第二版本的相同名稱的函數(shù)是否是重載函數(shù),若是,則再確定第二版本中哪個(gè)重載函數(shù)與第一版本的相同名稱的重載函數(shù)進(jìn)行比較,以確定重載函數(shù)是否變化。因本發(fā)明通過判斷接口、接口的函數(shù)、函數(shù)名和參數(shù)是否變化而監(jiān)控底層接口是否變化。從而相較現(xiàn)有技術(shù)的源代碼比較方式,本發(fā)明可以快速、有效地檢測出底層接口的變化。[0052]圖3是本發(fā)明實(shí)施例提供的獲取Com接口、Com接口的成員函數(shù)、成員函數(shù)的返回值、函數(shù)名和參數(shù)的方法的步驟流程圖。請參閱圖3,本發(fā)明實(shí)施例的獲取Com接口、Com接口的成員函數(shù)、成員函數(shù)的返回值、函數(shù)名和參數(shù)的方法可包括以下步驟S301-S309:[0053]步驟S301:獲取各個(gè)動(dòng)態(tài)鏈接庫對應(yīng)的I3DB。[0054]本步驟中,可以通過存放PDB的服務(wù)器上查找到動(dòng)態(tài)鏈接庫對應(yīng)的H)B。PDB中保存著調(diào)試符號信息、項(xiàng)目狀態(tài)信息等。[0055]步驟S303:獲取各個(gè)TOB中的所有類型為UDT(UserDefinedType,用戶定義類型)的調(diào)試符號信息。[0056]本步驟中,獲取PDB中的類型為UDT的調(diào)試符號信息可以通過DIA接口進(jìn)行。調(diào)試符號是編譯程序在使用源代碼產(chǎn)生可執(zhí)行程序過程中,為支持調(diào)試而摘取的調(diào)試信息。它用于將二進(jìn)制信息和源代碼信息聯(lián)系起來。類型為UDT的調(diào)試符號信息中記錄了變量信息(變量的名稱、類型、地址、長度等)、函數(shù)等信息。[0057]步驟S305:判斷每個(gè)類型為UDT的調(diào)試符號信息是否為Com接口的調(diào)試符號信息。若是,則進(jìn)行S307。若否,則繼續(xù)進(jìn)行步驟S305。[0058]本步驟中,Com接口的判斷是從Com接口的定義出發(fā),包括從以下幾個(gè)方面進(jìn)行判斷:(1)最根部的基類是IUnknown。⑵只有成員函數(shù)而沒有成員變量。(3)成員函數(shù)全部為虛函數(shù)。(4)返回值是HRESULT。(5)調(diào)用約定為—stdcall。在類型為UDT的調(diào)試符號信息中,若一個(gè)類型為UDT的調(diào)試符號信息滿足以上5個(gè)條件,則判斷為此類型為UDT的調(diào)試符號信息是Com接口的調(diào)試符號信息,若不滿足以上5個(gè)條件,則判斷為此類型為UDT的調(diào)試符號信息不是Com接口的調(diào)試符號信息。[0059]步驟S307:獲取Com接口的成員函數(shù)的符號信息,從而獲取Com接口的成員函數(shù)的返回值、函數(shù)名和參數(shù)。[0060]本步驟中,成員函數(shù)的符號信息包括成員函數(shù)的返回值、函數(shù)名、參數(shù)等信息。獲取成員函數(shù)的返回值、函數(shù)名和參數(shù)都是通過DIA提供的接口進(jìn)行的。[0061]在本發(fā)明的實(shí)施例中,本發(fā)明通過獲取PDB中的所有類型為UDT的調(diào)試符號信息,判斷每個(gè)類型為UDT的調(diào)試符號信息是否為Com接口的調(diào)試符號信息,獲取Com接口的成員函數(shù)的符號信息,這樣,可以快速獲取Com接口的成員函數(shù)信息,以便于實(shí)現(xiàn)對Com接口是否變化的監(jiān)控。[0062]圖4是本發(fā)明實(shí)施例提供的獲取動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)的方法的步驟流程圖。請參閱圖4,本發(fā)明實(shí)施例的獲取動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)的方法可包括以下步驟S401-S405:[0063]步驟S401:獲取導(dǎo)出符號表。[0064]本步驟中,可以從PE文件中獲取導(dǎo)出符號表。[0065]步驟S403:從導(dǎo)出符號表中獲取各動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)。[0066]本步驟中,導(dǎo)出函數(shù)通常存放于導(dǎo)出符號表中。導(dǎo)出函數(shù)即為動(dòng)態(tài)鏈接庫接口的導(dǎo)出接口。[0067]步驟S405,獲取各導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)。[0068]在本發(fā)明的實(shí)施例中,本發(fā)明通過從導(dǎo)出符號表中獲取各動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù),再獲取各導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù),這樣,可以快速獲取各導(dǎo)出函數(shù)信息,以便于實(shí)現(xiàn)對各導(dǎo)出函數(shù)是否變化的監(jiān)控。[0069]圖5為本發(fā)明實(shí)施例提供的監(jiān)控底層接口是否變化的裝置的主要架構(gòu)框圖。請參閱圖5,本發(fā)明實(shí)施例提供的監(jiān)控底層接口是否變化的裝置包括:獲取單元500、判斷單元501以及監(jiān)控單元503。[0070]獲取單元500,用于獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù)。[0071]判斷單元501,用于判斷判斷第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同。[0072]監(jiān)控單元503,用于在第一版本與第二版本所有對應(yīng)接口的函數(shù)相同,則判斷為第一版本與第二版本的底層接口相同,若第一版本與第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為第一版本與第二版本的底層接口不相同。[0073]此外,判斷單元501,還用于判斷第一版本的所有接口與第二版本的所有接口中是否有相同名稱的接口;若有相同名稱的接口,則通過判斷第一版本與第二版本所有相同名稱的接口的函數(shù)是否相同以獲得第一版本與第二版本所有對應(yīng)接口的函數(shù)是否相同。[0074]此外,判斷單元501,還用于判斷第一版本與第二版本的所有對應(yīng)接口的相同名稱的函數(shù)是否是重載函數(shù);若是重載函數(shù),則確定第二版本中哪個(gè)重載函數(shù)與第一版本的相同名稱的重載函數(shù)進(jìn)行比較。[0075]此外,判斷單元501,還用于比較第二版本中所確定的重載函數(shù)與第一版本的相同名稱的重載函數(shù)的返回值和參數(shù)是否相同;若相同,則判斷判斷第二版本中所確定的重載函數(shù)與第一版本的相同名稱的重載函數(shù)為相同的函數(shù)。[0076]此外,判斷單元501,還用于判斷若第一版本與第二版本的相同名稱的函數(shù)是重載函數(shù),則依次將第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的所有重載函數(shù)的參數(shù)個(gè)數(shù)進(jìn)行比較,若第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)相同,則計(jì)算第二版本與第一版本的參數(shù)個(gè)數(shù)相同的重載函數(shù)的返回值和參數(shù)類型的第一差別值,并找出第一差別值最小的第二版本中的那個(gè)重載函數(shù);若第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)不相同,則計(jì)算第二版本與第一版本的參數(shù)個(gè)數(shù)不相同的重載函數(shù)的參數(shù)個(gè)數(shù)的第二差別值,并找出第二差別值最小的第二版本中的那個(gè)重載函數(shù);以及根據(jù)第一差別值最小的第二版本中的重載函數(shù)與第二差別值最小的第二版本的重載函數(shù),以確定第二版本中差別值最小的那個(gè)重載函數(shù)與第一版本的需比較的重載函數(shù)進(jìn)行比較。[0077]此外,獲取單元500,還用于獲取動(dòng)態(tài)鏈接庫對應(yīng)的TOB;獲取PDB中的所有類型為UDT的調(diào)試符號信息;判斷每個(gè)類型為UDT的調(diào)試符號信息是否為Com接口的調(diào)試符號信息;若是Com接口的調(diào)試符號信息,則獲取Com接口的成員函數(shù)的符號信息,以獲取Com接口的成員函數(shù)的返回值、函數(shù)名和參數(shù)。[0078]此外,獲取單兀500,還用于獲取導(dǎo)出符號表;從導(dǎo)出符號表中獲取各動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、各導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)。[0079]關(guān)于本發(fā)明提供的監(jiān)控底層接口是否變化的裝置的詳細(xì)的工作流程,請參閱上文針對監(jiān)控底層接口是否變化的方法的描述,此處不再贅述。[0080]在本發(fā)明的實(shí)施例中,本發(fā)明通過判斷第一版本的所有接口與第二版本的所有接口中是否有相同名稱的接口,再判斷第一版本與第二版本的此相同名稱的接口函數(shù)是否相同,若相同,則判斷為底層接口無變化,若不同,則判斷為底層接口有變化。還判斷第一版本與第二版本的相同名稱的函數(shù)是否是重載函數(shù),若是,則再確定第二版本中哪個(gè)重載函數(shù)與第一版本的相同名稱的重載函數(shù)進(jìn)行比較,以確定重載函數(shù)是否變化。因本發(fā)明通過判斷接口、接口的函數(shù)、函數(shù)名和參數(shù)是否變化而監(jiān)控底層接口是否變化。從而相較現(xiàn)有技術(shù)的源代碼比較方式,本發(fā)明可以快速、有效地檢測出底層接口的變化。[0081]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來控制相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-OnlyMemory,ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccessMemory,RAM)等。[0082]以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容作出些許更動(dòng)或修飾為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對以上實(shí)施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。【權(quán)利要求】1.一種監(jiān)控底層接口是否變化的方法,其特征在于,該監(jiān)控底層接口是否變化的方法包括步驟:獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù);判斷該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同;以及若該第一版本與該第二版本所有對應(yīng)接口的函數(shù)相同,則判斷為該第一版本與該第二版本的底層接口相同,若該第一版本與該第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為該第一版本與該第二版本的底層接口不相同。2.如權(quán)利要求1所述的監(jiān)控底層接口是否變化的方法,其特征在于,在執(zhí)行判斷該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同的步驟中,還包括步驟:判斷該第一版本的所有接口與該第二版本的所有接口中是否有相同名稱的接口;若有相同名稱的接口,則通過判斷該第一版本與該第二版本所有相同名稱的接口的函數(shù)是否相同以獲得該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同。3.如權(quán)利要求1所述的監(jiān)控底層接口是否變化的方法,其特征在于,在執(zhí)行判斷該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同的步驟中,還包括步驟:判斷該第一版本與該第二版本的所有對應(yīng)接口的相同名稱的函數(shù)是否是重載函數(shù);若是重載函數(shù),則確定該第二版本中哪個(gè)重載函數(shù)與該第一版本的相同名稱的重載函數(shù)進(jìn)行比較。4.如權(quán)利要求3所述的監(jiān)控底層接口是否變化的方法,其特征在于,還包括步驟:比較該第二版本中所確定的重載函數(shù)與該第一版本的相同名稱的重載函數(shù)的返回值和參數(shù)是否相同;若相同,則判斷該第二版本中所確定的重載函數(shù)與該第一版本的相同名稱的重載函數(shù)為相同的函數(shù)。5.如權(quán)利要求3所述的監(jiān)控底層接口是否變化的方法,其特征在于,還包括步驟:若該第一版本與該第二版本的該相同名稱的函數(shù)是重載函數(shù),則依次將該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的所有重載函數(shù)的參數(shù)個(gè)數(shù)進(jìn)行比較,若該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)相同,則計(jì)算該第二版本與該第一版本的參數(shù)個(gè)數(shù)相同的重載函數(shù)的返回值和參數(shù)類型的第一差別值,并找出該第一差別值最小的該第二版本中的那個(gè)重載函數(shù);若該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)不相同,則計(jì)算該第二版本與該第一版本的參數(shù)個(gè)數(shù)不相同的重載函數(shù)的參數(shù)個(gè)數(shù)的第二差別值,并找出該第二差別值最小的該第二版本中的那個(gè)重載函數(shù);以及根據(jù)該第一差別值最小的第二版本中的重載函數(shù)與該第二差別值最小的第二版本的重載函數(shù),以確定該第二版本中差別值最小的那個(gè)重載函數(shù)與該第一版本的需比較的重載函數(shù)進(jìn)行比較。6.如權(quán)利要求1所述的監(jiān)控底層接口是否變化的方法,其特征在于,在執(zhí)行獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù)的步驟中,還包括步驟:獲取各個(gè)動(dòng)態(tài)鏈接庫對應(yīng)的PDB;獲取各個(gè)PDB中的所有類型為UDT的調(diào)試符號信息;判斷每個(gè)類型為UDT的調(diào)試符號信息是否為Com接口的調(diào)試符號信息;若是Com接口的調(diào)試符號信息,則獲取Com接口的成員函數(shù)的符號信息,以獲取Com接口的成員函數(shù)的返回值、函數(shù)名和參數(shù)。7.如權(quán)利要求1所述的監(jiān)控底層接口是否變化的方法,其特征在于,在執(zhí)行獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù)的步驟中,還包括步驟:獲取導(dǎo)出符號表;以及從該導(dǎo)出符號表中獲取各動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、該各導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)。8.—種監(jiān)控底層接口是否變化的裝置,其特征在于,該監(jiān)控底層接口是否變化的裝置包括:獲取單元,用于獲取底層接口的第一版本與第二版本的所有動(dòng)態(tài)鏈接庫,獲取所有動(dòng)態(tài)鏈接庫的所有接口以及所有接口的函數(shù);判斷單元,用于判斷判斷該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同;以及監(jiān)控單元,用于在該第一版本與該第二版本所有對應(yīng)接口的函數(shù)相同時(shí),則判斷為該第一版本與該第二版本的底層接口相同,若該第一版本與該第二版本所有對應(yīng)接口的函數(shù)不相同,則判斷為該第一版本與該第二版本的底層接口不相同。9.如權(quán)利要求8所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該判斷單元,還用于判斷該第一版本的所有接口與該第二版本的所有接口中是否有相同名稱的接口;若有相同名稱的接口,則通過判斷該第一版本與該第二版本所有相同名稱的接口的函數(shù)是否相同以獲得該第一版本與該第二版本所有對應(yīng)接口的函數(shù)是否相同。10.如權(quán)利要求8所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該判斷單元,還用于判斷該第一版本與該第二版本的所有對應(yīng)接口的相同名稱的函數(shù)是否是重載函數(shù);若是重載函數(shù),則確定該第二版本中哪個(gè)重載函數(shù)與該第一版本的相同名稱的重載函數(shù)進(jìn)行比較。11.如權(quán)利要求10所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該判斷單元,還用于比較該第二版本中所確定的重載函數(shù)與該第一版本的相同名稱的重載函數(shù)的返回值和參數(shù)是否相同;若相同,則判斷該第二版本中所確定的重載函數(shù)與該第一版本的相同名稱的重載函數(shù)為相同的函數(shù)。12.如權(quán)利要求10所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該判斷單元,還用于判斷若該第一版本與該第二版本的該相同名稱的函數(shù)是重載函數(shù),則依次將該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的所有重載函數(shù)的參數(shù)個(gè)數(shù)進(jìn)行比較,若該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)相同,則計(jì)算該第二版本與該第一版本的參數(shù)個(gè)數(shù)相同的重載函數(shù)的返回值和參數(shù)類型的第一差別值,并找出該第一差別值最小的該第二版本中的那個(gè)重載函數(shù);若該第一版本需比較的重載函數(shù)的參數(shù)個(gè)數(shù)與該第二版本的一些重載函數(shù)的參數(shù)個(gè)數(shù)不相同,則計(jì)算該第二版本與該第一版本的參數(shù)個(gè)數(shù)不相同的重載函數(shù)的參數(shù)個(gè)數(shù)的第二差別值,并找出該第二差別值最小的該第二版本中的那個(gè)重載函數(shù);以及根據(jù)該第一差別值最小的第二版本中的重載函數(shù)與該第二差別值最小的第二版本的重載函數(shù),以確定該第二版本中差別值最小的那個(gè)重載函數(shù)與該第一版本的需比較的重載函數(shù)進(jìn)行比較。13.如權(quán)利要求8所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該獲取單元,還用于獲取各個(gè)動(dòng)態(tài)鏈接庫對應(yīng)的PDB;獲取各個(gè)PDB中的所有類型為UDT的調(diào)試符號信息;判斷每個(gè)類型為UDT的調(diào)試符號信息是否為Com接口的調(diào)試符號信息;若是Com接口的調(diào)試符號信息,則獲取Com接口的成員函數(shù)的符號信息以獲取Com接口的成員函數(shù)的返回值、函數(shù)名和參數(shù)。14.如權(quán)利要求8所述的監(jiān)控底層接口是否變化的裝置,其特征在于,該獲取單元,還用于獲取導(dǎo)出符號表;以及從該導(dǎo)出符號表中獲取各動(dòng)態(tài)鏈接庫接口的導(dǎo)出函數(shù)、該各導(dǎo)出函數(shù)的返回值、函數(shù)名和參數(shù)。【文檔編號】G06F11/30GK103942131SQ201310024949【公開日】2014年7月23日申請日期:2013年1月23日優(yōu)先權(quán)日:2013年1月23日【發(fā)明者】馬驍,陳祎,潘在亮申請人:騰訊科技(深圳)有限公司