欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種函數(shù)調(diào)用關(guān)系的獲取方法和裝置制造方法

文檔序號:6492496閱讀:159來源:國知局
一種函數(shù)調(diào)用關(guān)系的獲取方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種函數(shù)調(diào)用關(guān)系的獲取方法和裝置,屬于計(jì)算機(jī)領(lǐng)域。所述方法包括:當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址;獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。所述裝置包括:第一獲取模塊、第二獲取模塊和構(gòu)造模塊。本發(fā)明通過程序運(yùn)行過程中調(diào)用的函數(shù)的函數(shù)信息以及用于運(yùn)行該函數(shù)的執(zhí)行單元構(gòu)造該執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)調(diào)用關(guān)系圖,從而解決了現(xiàn)有技術(shù)中存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,構(gòu)造出來的函數(shù)調(diào)用關(guān)系圖與程序?qū)嶋H執(zhí)行流不符的問題。
【專利說明】—種函數(shù)調(diào)用關(guān)系的獲取方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種函數(shù)調(diào)用關(guān)系的獲取方法和裝置。
【背景技術(shù)】
[0002]在大型軟件開發(fā)過程中,特別是在多人協(xié)作的開發(fā)場景中,經(jīng)常需要構(gòu)造程序執(zhí)行過程中函數(shù)調(diào)用關(guān)系圖,以使開發(fā)者根據(jù)函數(shù)調(diào)用關(guān)系圖理解程序或者程序片段在實(shí)際執(zhí)行時的動態(tài)行為。
[0003]目前現(xiàn)有技術(shù)存在獲取函數(shù)調(diào)用關(guān)系的方法,可以通過該方法獲取程序運(yùn)行過程中調(diào)用函數(shù)的函數(shù)調(diào)用關(guān)系圖;但是在程序執(zhí)行的過程中,如果存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,通過現(xiàn)有技術(shù)只獲取到一個函數(shù)調(diào)用關(guān)系圖,而這與程序?qū)嶋H執(zhí)行流不符。

【發(fā)明內(nèi)容】

[0004]為了在程序運(yùn)行的過程中,如果存在多個進(jìn)程或多個線程同時運(yùn)行相同函數(shù)時,構(gòu)造出與程序?qū)嶋H執(zhí)行流相符的函數(shù)調(diào)用關(guān)系圖,本發(fā)明提供了一種函數(shù)調(diào)用關(guān)系的獲取方法和裝置。所述技術(shù)方案如下:
[0005]一種函數(shù)調(diào)用關(guān)系的獲取方法,所述方法包括:
[0006]當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址;
[0007]獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;
[0008]根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
[0009]所述函數(shù)的函數(shù)信息還包括所述函數(shù)所在文件的文件信息在信息列表中的序號,所述信息列表用于存儲文件的文件信息;
[0010]所述獲取所述函數(shù)的函數(shù)信息,包括:
[0011]獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0012]所述獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號,包括:
[0013]根據(jù)所述函數(shù)的入口地址,判斷所述函數(shù)是否為程序中包含的函數(shù);
[0014]如果所述函數(shù)是所述程序中包含的函數(shù),判斷序號空間中是否包括所述程序所在文件的文件信息在信息列表中的序號,如果所述序號空間中包括所述程序所在文件的文件信息在所述信息列表中的序號,則將所述序號空間包括的所述程序所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0015]所述方法還包括:
[0016]如果所述序號空間為空,則獲取所述函數(shù)所在文件的文件信息,將所述函數(shù)所在文件的文件信息存儲在所述信息列表中,設(shè)置所述函數(shù)所在文件的文件信息在所述信息列表中的序號,將所述函數(shù)所在文件的文件信息在所述信息列表中的序號存儲在所述序號空間中。
[0017]所述方法還包括:
[0018]如果所述函數(shù)不是所述程序中包含的函數(shù),則判斷出所述函數(shù)為動態(tài)鏈接庫包含的函數(shù),根據(jù)所述函數(shù)的入口地址查找所述信息列表,當(dāng)查找出所述信息列表中存在所述動態(tài)鏈接庫所在文件的文件信息,則將所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0019]所述方法還包括:
[0020]當(dāng)查找出所述信息列表中不存在所述動態(tài)鏈接庫所在文件的文件信息,獲取所述動態(tài)鏈接庫所在文件的文件信息,將所述動態(tài)鏈接庫所在文件的文件信息存儲在所述信息列表中,設(shè)置所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號。
[0021]所述根據(jù)所述執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖之后,還包括:
[0022]從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系。
[0023]所述從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)的調(diào)用關(guān)系,包括:
[0024]計(jì)算所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,所述函數(shù)的入度為調(diào)用所述函數(shù)的函數(shù)的個數(shù),所述函數(shù)的出度為所述函數(shù)調(diào)用的函數(shù)的個數(shù);
[0025]過濾出度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,減少調(diào)用所述系統(tǒng)函數(shù)的函數(shù)的出度;
[0026]過濾入度為I且出度為I的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,增加調(diào)用所述系統(tǒng)函數(shù)的函數(shù)和所述系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系;
[0027]根據(jù)所述函數(shù)調(diào)用關(guān)系圖中包括的剩下函數(shù)的函數(shù)信息重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,計(jì)算所述函數(shù)調(diào)用關(guān)系圖包括的函數(shù)的出度和入度;
[0028]過濾入度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,以及減少所述系統(tǒng)調(diào)用的函數(shù)的入度。
[0029]所述獲取所述函數(shù)的函數(shù)信息之前,還包括:
[0030]接收開始時間和結(jié)束時間,在所述開始時間和所述結(jié)束時間之間設(shè)置記錄標(biāo)識為真;
[0031]所述獲取所述函數(shù)的函數(shù)信息,包括:
[0032]當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,對所述記錄標(biāo)識進(jìn)行判斷,如果所述記錄標(biāo)識為真,則獲取所述函數(shù)的函數(shù)信息。
[0033]一種函數(shù)調(diào)用關(guān)系的獲取裝置,所述裝置包括:
[0034]第一獲取模塊,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址;
[0035]第二獲取模塊,用于獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;
[0036]構(gòu)造模塊,用于根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
[0037]所述函數(shù)的函數(shù)信息還包括所述函數(shù)所在文件的文件信息在信息列表中的序號,所述信息列表用于存儲文件的文件信息;
[0038]所述第一獲取模塊,還用于獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0039]所述第一獲取模塊包括:
[0040]判斷單元,用于根據(jù)所述函數(shù)的入口地址,判斷所述函數(shù)是否為程序中包含的函數(shù);
[0041]第一獲取單元,用于如果所述函數(shù)是所述程序中包含的函數(shù),判斷序號空間中是否包括所述程序所在文件的文件信息在信息列表中的序號,如果所述序號空間中包括所述程序所在文件的文件信息在所述信息列表中的序號,則將所述序號空間包括的所述程序所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0042]所述第一獲取模塊還包括:
[0043]第二獲取單元,用于如果所述序號空間為空,則獲取所述函數(shù)所在文件的文件信息,將所述函數(shù)所在文件的文件信息存儲在所述信息列表中,設(shè)置所述函數(shù)所在文件的文件信息在所述信息列表中的序號,將所述函數(shù)所在文件的文件信息在所述信息列表中的序號存儲在所述序號空間中。
[0044]所述第一獲取模塊還包括:
[0045]第三獲取單元,用于如果所述函數(shù)不是所述程序中包含的函數(shù),則判斷出所述函數(shù)為動態(tài)鏈接庫包含的函數(shù),根據(jù)所述函數(shù)的入口地址查找所述信息列表,當(dāng)查找出所述信息列表中存在所述動態(tài)鏈接庫所在文件的文件信息,則將所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0046]所述第一獲取模塊還包括:
[0047]第四獲取單元,用于當(dāng)查找出所述信息列表中不存在所述動態(tài)鏈接庫所在文件的文件信息,獲取所述動態(tài)鏈接庫所在文件的文件信息,將所述動態(tài)鏈接庫所在文件的文件信息存儲在所述信息列表中,設(shè)置所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號。
[0048]所述裝置還包括:
[0049]過濾模塊,用于根據(jù)所述執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖之后,從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系。
[0050]所述過濾模塊包括:
[0051]第一計(jì)算單元,用于計(jì)算所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,所述函數(shù)的入度為調(diào)用所述函數(shù)的函數(shù)的個數(shù),所述函數(shù)的出度為所述函數(shù)調(diào)用的函數(shù)的個數(shù);
[0052]第一過濾單元,用于過濾出度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,減少調(diào)用所述系統(tǒng)函數(shù)的函數(shù)的出度;
[0053]第二過濾單元,用于過濾入度為I且出度為I的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,增加調(diào)用所述系統(tǒng)函數(shù)的函數(shù)和所述系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系;[0054]第二計(jì)算單元,用于根據(jù)所述函數(shù)調(diào)用關(guān)系圖中包括的剩下函數(shù)的函數(shù)信息重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,計(jì)算所述函數(shù)調(diào)用關(guān)系圖包括的函數(shù)的出度和入度;
[0055]第三過濾單元,用于過濾入度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,以及減少所述系統(tǒng)調(diào)用的函數(shù)的入度。
[0056]所述裝置還包括:
[0057]接收模塊,用于接收開始時間和結(jié)束時間,在所述開始時間和所述結(jié)束時間之間設(shè)置記錄標(biāo)識為真;
[0058]所述第一獲取模塊,包括:
[0059]第五獲取單元,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,對所述記錄標(biāo)識進(jìn)行判斷,如果所述記錄標(biāo)識為真,則獲取所述函數(shù)的函數(shù)信息。
[0060]本發(fā)明提供的技術(shù)方案的有益效果是:
[0061]在本發(fā)明實(shí)施例中,當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取該函數(shù)的函數(shù)信息以及用于運(yùn)行該函數(shù)的執(zhí)行單元,該執(zhí)行單元包括線程或進(jìn)程,通過執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造出該執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)調(diào)用關(guān)系圖。其中,由于在獲取函數(shù)的函數(shù)信息時,同時獲取運(yùn)行該函數(shù)的進(jìn)程或線程,因而可以根據(jù)每個進(jìn)程或線程所運(yùn)行函數(shù)的函數(shù)信息獲取到每個進(jìn)程或線程對應(yīng)的函數(shù)調(diào)用關(guān)系圖,從而解決了現(xiàn)有技術(shù)中如果存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,構(gòu)造出來的函數(shù)調(diào)用關(guān)系圖與程序?qū)嶋H執(zhí)行流不符的問題。
【專利附圖】

【附圖說明】
[0062]圖1是本發(fā)明實(shí)施例1提供的一種函數(shù)調(diào)用關(guān)系的獲取方法;
[0063]圖2是本發(fā)明實(shí)施例2提供的一種函數(shù)調(diào)用關(guān)系的獲取方法;
[0064]圖3是本發(fā)明實(shí)施例2提供的一種獲取函數(shù)所在文件信息在信息列表中的序號的流程圖;
[0065]圖4是本發(fā)明實(shí)施例2提供的一種過濾系統(tǒng)函數(shù)及其調(diào)用關(guān)系的流程圖;
[0066]圖5是本發(fā)明實(shí)施例2提供的一種函數(shù)調(diào)用關(guān)系圖;
[0067]圖6是本發(fā)明實(shí)施例2提供的一種函數(shù)調(diào)用關(guān)系圖;
[0068]圖7是本發(fā)明實(shí)施例2提供的一種函數(shù)調(diào)用關(guān)系圖;
[0069]圖8是本發(fā)明實(shí)施例2提供的一種函數(shù)調(diào)用關(guān)系圖;
[0070]圖9是本發(fā)明實(shí)施例3提供的一種函數(shù)調(diào)用關(guān)系的獲取裝置;。
【具體實(shí)施方式】
[0071]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0072]實(shí)施例1
[0073]本發(fā)明實(shí)施例提供了一種函數(shù)調(diào)用關(guān)系的獲取方法,參見圖1,該方法包括:
[0074]步驟101:當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址;
[0075]步驟102:獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;[0076]步驟103:根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
[0077]在本發(fā)明實(shí)施例中,當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取該函數(shù)的函數(shù)信息以及用于運(yùn)行該函數(shù)的執(zhí)行單元,該執(zhí)行單元包括線程或進(jìn)程,通過執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造出該執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)調(diào)用關(guān)系圖,由于每個進(jìn)程或線程對應(yīng)該進(jìn)程或線程所運(yùn)行函數(shù)的函數(shù)調(diào)用關(guān)系圖,從而解決了現(xiàn)有技術(shù)中如果存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,構(gòu)造出來的函數(shù)調(diào)用關(guān)系圖與程序?qū)嶋H執(zhí)行流不符的問題。
[0078]實(shí)施例2
[0079]本發(fā)明實(shí)施例提供了一種函數(shù)調(diào)用關(guān)系的獲取方法,參見圖2,該方法包括:
[0080]步驟201:在程序運(yùn)行的過程中,當(dāng)程序調(diào)用函數(shù)時,獲取該函數(shù)的函數(shù)信息,該函數(shù)信息至少包括該函數(shù)的入口地址和出口地址;
[0081]具體地,在程序運(yùn)行的過程中,當(dāng)程序調(diào)用函數(shù)時,通過該函數(shù)內(nèi)包括的插裝代碼來獲取該函數(shù)的函數(shù)信息。
[0082]其中,在程序運(yùn)行之前,先對程序的源代碼包括的每行語句進(jìn)行分析,當(dāng)分析出調(diào)用函數(shù)的語句時,獲取該語句需要調(diào)用的函數(shù),在該函數(shù)中插入插裝代碼,該插裝代碼至少用于獲取該函數(shù)的入口地址、該函數(shù)的出口地址以及運(yùn)行該函數(shù)的執(zhí)行單元。
[0083]其中,可以將該插裝代碼插入到該函數(shù)包括的第一行語句之前,最后一行語句之后或者第一行語句和最后一行語句之間;優(yōu)選地,可以將該插裝代碼插入在該函數(shù)包括的第一行語句之前。
[0084]其中,該函數(shù)的函數(shù)信息還可以包括該函數(shù)所在文件的文件信息在信息列表中的序號,該信息列表用于存儲文件的文件信息與序號的對應(yīng)關(guān)系。
[0085]進(jìn)一步地,在本步驟中,除了獲取該函數(shù)的入口地址和出口地址之外,還可以獲取該函數(shù)所在文件的文件信息在信息列表中的序號。
[0086]其中,文件的文件信息至少包括該文件的基地址、該文件的結(jié)束地址以及該文件的文件名。
[0087]參見圖3,獲取該函數(shù)所在文件的文件信息在信息列表中的序號,可以包括如下步驟(I)至(7),分別為:
[0088](I):根據(jù)該函數(shù)的入口地址,判斷該函數(shù)是否為程序中包含的函數(shù),如果該函數(shù)是程序中包含的函數(shù),執(zhí)行步驟(2),如果該函數(shù)不是程序中包含的函數(shù),執(zhí)行步驟(5);
[0089]具體地,獲取程序所在文件的基地址和結(jié)束地址,根據(jù)該函數(shù)的入口地址,判斷該函數(shù)的入口地址是否在程序所在文件的基地址和結(jié)束地址之間,如果該函數(shù)的入口地址在程序所在文件的基地址和結(jié)束地址之間,則判斷出該函數(shù)為程序中包含的函數(shù),如果該函數(shù)的入口地址不在程序所在文件的基地址和結(jié)束地址之間,則判斷出該函數(shù)不是程序中包含的函數(shù)。
[0090]其中,磁盤中包括程序所在的文件,當(dāng)需要運(yùn)行程序時,在內(nèi)存中分配一個內(nèi)存空間,將程序從磁盤中加載到該內(nèi)存空間中,該內(nèi)存空間的起始地址為程序所在文件的基地址,以及,該內(nèi)存空間的結(jié)束地址為程序所在文件的結(jié)束地址。
[0091](2):判斷序號空間中是否包括程序所在文件的文件信息在信息列表中的序號,如果該序號空間中包括程序所在文件的文件信息在信息列表中的序號,執(zhí)行步驟(3),如果該序號空間為空,執(zhí)行步驟(4);
[0092]其中,該序號空間用于存儲程序所在文件的文件信息在信息列表中的序號,該序號空間事先為空,當(dāng)?shù)谝淮潍@取到程序所在文件的文件信息在信息列表中的序號時,便將獲取到的程序所在文件的文件信息在信息列表中的序號存儲在該序號空間中。
[0093]( 3):將序號空間包括的程序所在文件的文件信息在信息列表中的序號確定為該函數(shù)所在文件的文件信息在信息列表中的序號,結(jié)束返回;
[0094](4):獲取函數(shù)所在文件的文件信息,將函數(shù)所在文件的文件信息存儲在信息列表中,設(shè)置函數(shù)所在文件的文件信息在信息列表中的序號,如此得到該函數(shù)所在文件的文件信息在信息列表中的序號,結(jié)束返回;
[0095]進(jìn)一步地,將獲取到的函數(shù)所在文件的文件信息在信息列表中的序號存儲在該序號空間中。
[0096]其中,獲取到函數(shù)所在文件的文件信息后,如果在將該文件信息存儲到信息列表之前該信息列表為空,則將該文件信息存儲到信息列表中,設(shè)置該文件信息的序號的初值,如果在將該文件信息存儲到信息列表之前該信息列表不為空,則獲取該信息列表中包括的最末尾的一個文件信息的序號,將該文件信息插入到信息列表的末尾,增加獲取的序號,將增加的序號確定為該文件信息的序號。
[0097]其中,設(shè)置該文件信息的序號的初值的操作,可以為:將該文件信息的序號的初值設(shè)置為O或I等;以及,增加獲取的序號的操作,可以為:將獲取的序號增加I或2等。
[0098](5):確定出該函數(shù)為動態(tài)鏈接庫中包含的函數(shù),根據(jù)該函數(shù)的入口地址查找信息列表中是否存在該動態(tài)鏈接庫所在文件的文件信息,如果信息列表中存在該動態(tài)鏈接庫所在文件的文件信息,執(zhí)行步驟(6),如果信息列表中不存在該動態(tài)鏈接庫所在文件的文件信息,執(zhí)行步驟(7);
[0099]具體地,遍歷信息列表中包含的所有文件信息,根據(jù)該函數(shù)的入口地址以及文件信息中所包含的文件的基地址和結(jié)束地址,判斷該函數(shù)的入口地址是否在某一文件的文件信息包含的基地址和結(jié)束地址之間,如果該函數(shù)的入口地址在某一文件的文件信息中包含的基地址和結(jié)束地址之間,則該文件信息為該函數(shù)所在動態(tài)鏈接庫的文件信息即判斷出信息列表中存在該動態(tài)鏈接庫所在文件的文件信息。
[0100](6):將動態(tài)鏈接庫所在文件的文件信息在信息列表中的序號確定為該函數(shù)所在文件的文件信息在信息列表中的序號,結(jié)束返回;
[0101]具體地,根據(jù)該動態(tài)鏈接庫所在文件的文件信息,從該信息列表中獲取該動態(tài)鏈接庫所在文件的文件信息在信息列表中的序號,將動態(tài)鏈接庫所在文件的文件信息在信息列表中的序號確定為該函數(shù)所在文件的文件信息在信息列表中的序號。
[0102](7):獲取該動態(tài)鏈接庫所在文件的文件信息,將該動態(tài)鏈接庫所在文件的文件信息存儲在信息列表中,設(shè)置該動態(tài)鏈接庫所在文件的文件信息在信息列表中的序號。
[0103]其中,當(dāng)函數(shù)為動態(tài)鏈接庫包括的函數(shù)時,該函數(shù)所在文件的文件信息包括該函數(shù)所在動態(tài)鏈接庫的基地址、結(jié)束地址和文件名。
[0104]其中,磁盤中包括動態(tài)鏈接庫所在的文件,當(dāng)需要加載動態(tài)鏈接庫時,在內(nèi)存中分配一個內(nèi)存空間,將動態(tài)鏈接庫從磁盤中加載到該內(nèi)存空間中,該內(nèi)存空間的起始地址為動態(tài)鏈接庫所在文件的基地址,以及,該內(nèi)存空間的結(jié)束地址為動態(tài)鏈接庫所在文件的結(jié)束地址。
[0105]其中,獲取到動態(tài)鏈接庫所在文件的文件信息后,如果在將該文件信息存儲到信息列表之前該信息列表為空,則將該文件信息存儲到信息列表中,設(shè)置該文件信息的序號的初值,如果在將該文件信息存儲到信息列表之前該信息列表不為空,則獲取該信息列表中包括的最末尾的一個文件信息的序號,將該文件信息插入到信息列表的末尾,增加獲取的序號,將增加的序號確定為該文件信息的序號。
[0106]其中,設(shè)置該文件信息的序號的初值的操作,可以為:將該文件信息的序號的初值設(shè)置為O或I等;以及,增加獲取的序號的操作,可以為:將獲取的序號增加I或2等。
[0107]其中,通過獲取該函數(shù)所在文件的文件信息在信息列表中的序號,可以區(qū)分出被調(diào)用的函數(shù)是程序包括的函數(shù)還是動態(tài)鏈接庫包括的函數(shù),解決了當(dāng)被調(diào)用函數(shù)是動態(tài)鏈接庫包括的函數(shù)時,將函數(shù)地址轉(zhuǎn)換為函數(shù)名時找不到函數(shù)名而報錯的問題。
[0108]步驟202:獲取用于運(yùn)行該函數(shù)的執(zhí)行單元,該執(zhí)行單元包括進(jìn)程或線程;
[0109]具體地,調(diào)用用于獲取執(zhí)行單元的系統(tǒng)函數(shù),通過該系統(tǒng)函數(shù)獲取當(dāng)前執(zhí)行點(diǎn)所在的執(zhí)行單元,將獲取的執(zhí)行單元確定為用于執(zhí)行該函數(shù)的執(zhí)行單元。
[0110]其中,當(dāng)調(diào)用該函數(shù)時,為該函數(shù)分配一個執(zhí)行單元,通過該執(zhí)行單元來運(yùn)行該函數(shù),在運(yùn)行該函數(shù)的過程,當(dāng)前的執(zhí)行點(diǎn)位于該函數(shù)中,所以獲取到的當(dāng)前執(zhí)行點(diǎn)所在執(zhí)行單元即為用于運(yùn)行該函數(shù)的執(zhí)行單元。
[0111]步驟203:將該函數(shù)的函數(shù)信息存儲在用于運(yùn)行該函數(shù)的執(zhí)行單元對應(yīng)的存儲空間中;
[0112]其中,用于運(yùn)行該函數(shù)的執(zhí)行單元對應(yīng)的存儲空間可以為文件等。
[0113]其中,對于程序運(yùn)行過程中調(diào)用的每一個函數(shù),都執(zhí)行步驟201至步驟203的操作,得到每個函數(shù)對應(yīng)的函數(shù)信息,并將每一個函數(shù)的函數(shù)信息存儲在用于運(yùn)行該函數(shù)的執(zhí)行單元對應(yīng)的存儲空間中。
[0114]當(dāng)程序運(yùn)行結(jié)束時,每一個執(zhí)行單元對應(yīng)的存儲空間中存儲有該執(zhí)行單元中調(diào)用的所有函數(shù)的函數(shù)信息,具體表現(xiàn)為一系列有序的帶有入口標(biāo)識的入口地址、帶有退出標(biāo)識的出口地址以及該函數(shù)所在文件的文件信息在信息列表中的序號。
[0115]其中,對于程序運(yùn)行過程中調(diào)用的每一個函數(shù),該函數(shù)所在文件的文件信息在信息列表中的序號,可以存儲到該函數(shù)的入口地址之后或者該函數(shù)的出口地址之后。
[0116]步驟204:根據(jù)執(zhí)行單元對應(yīng)的存儲空間中存儲的函數(shù)信息構(gòu)造該執(zhí)行單元所對應(yīng)的函數(shù)調(diào)用關(guān)系圖;
[0117]具體地,根據(jù)執(zhí)行單元對應(yīng)的存儲空間中存儲的有序的帶有進(jìn)入標(biāo)識的入口地址、帶有退出標(biāo)識的出口地址以及該函數(shù)所在文件的文件信息在信息列表中的序號得到函數(shù)的函數(shù)名及函數(shù)的調(diào)用關(guān)系,進(jìn)而將函數(shù)的函數(shù)名和函數(shù)的調(diào)用關(guān)系構(gòu)造為函數(shù)的調(diào)用關(guān)系圖。
[0118]例如,如果在某一執(zhí)行單元對應(yīng)的存儲空間中存儲的函數(shù)信息中,函數(shù)A的入口地址在函數(shù)B的入口地址之前,而函數(shù)A的出口地址在函數(shù)B的出口地址之后,則判斷出函數(shù)A—定調(diào)用了函數(shù)B。利用這種特性以及收集到的有序的帶有進(jìn)入標(biāo)識的入口地址、帶有退出標(biāo)識的出口地址,就可以構(gòu)造出完整的該執(zhí)行單元所對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
[0119]步驟205:從執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及系統(tǒng)函數(shù)的調(diào)用關(guān)系;
[0120]具體地,參見圖4,從執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)的調(diào)用關(guān)系包括以下幾個步驟:
[0121](I):標(biāo)記出需要過濾的系統(tǒng)函數(shù),計(jì)算執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度;
[0122]其中,可以根據(jù)系統(tǒng)函數(shù)的函數(shù)名標(biāo)記出需要過濾的系統(tǒng)函數(shù)。
[0123]其中,函數(shù)的入度為調(diào)用該函數(shù)的函數(shù)的個數(shù),函數(shù)的出度為該函數(shù)調(diào)用的函數(shù)的個數(shù)。
[0124]例如,如圖5所示的函數(shù)調(diào)用關(guān)系圖,以函數(shù)A_2為例,函數(shù)A_1被函數(shù)B_1調(diào)用,函數(shù)A_2調(diào)用了函數(shù)A_3和函數(shù)B_2,所以函數(shù)八_2的入度為I,出度為2。
[0125](2):設(shè)置外層循環(huán)標(biāo)記為真;
[0126](3):判斷外層循環(huán)標(biāo)記,如果外層循環(huán)標(biāo)記為真,執(zhí)行步驟(4),如果外層循環(huán)標(biāo)記為假,結(jié)束;
[0127](4):設(shè)置外層循環(huán)標(biāo)記為假;
[0128](5):查找執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中是否存在出度為零的系統(tǒng)函數(shù),如果存在函數(shù)出度為零的系統(tǒng)函數(shù),則執(zhí)行步驟(6),如果不存在函數(shù)出度為零的函數(shù),執(zhí)行步驟(7);
[0129](6):選取出度為零的系統(tǒng)函數(shù),去除選取的出度為零的系統(tǒng)函數(shù)及其調(diào)用關(guān)系,并減少所有調(diào)用該出度為零的系統(tǒng)函數(shù)的函數(shù)的出度,返回步驟(5);
[0130]例如,在如圖5所示的函數(shù)調(diào)用關(guān)系圖中,假設(shè)以八_為開頭的函數(shù)均為系統(tǒng)函數(shù),由于函數(shù)八_3出度為零,函數(shù)A_3被函數(shù)A_2調(diào)用,則去除函數(shù)A_3以及函數(shù)八_3和函數(shù)A_2之間的調(diào)用關(guān)系,并減少函數(shù)A_2的出度,此時函數(shù)A_2只調(diào)用了函數(shù)B_2,函數(shù)A_2的出度為1,去除出度為零的系統(tǒng)函數(shù)后,函數(shù)的調(diào)用關(guān)系圖如圖6。
[0131](7):查找執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中是否存在出度為I且入度為I的系統(tǒng)函數(shù),如果存在出度為I且入度為I的系統(tǒng)函數(shù),執(zhí)行步驟(8),如果不存在出度為I且入度為I的系統(tǒng)函數(shù),執(zhí)行步驟(9);
[0132](8):去除該出度為I且入度為I的系統(tǒng)函數(shù)及其調(diào)用關(guān)系,增加調(diào)用該系統(tǒng)函數(shù)和被該系統(tǒng)函數(shù)調(diào)用的函數(shù)的調(diào)用關(guān)系,重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,設(shè)置外層循環(huán)標(biāo)記為真并返回步驟(7);
[0133]具體地,選取出度為I且入度為I的系統(tǒng)函數(shù),去除該出度為I且入度為I的系統(tǒng)函數(shù)的調(diào)用關(guān)系,并增加調(diào)用該出度為I且入度為I的系統(tǒng)函數(shù)的函數(shù)和該出度為I且入度為I的系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系,重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,重新計(jì)算該執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,并將外層循環(huán)標(biāo)記設(shè)置為真。
[0134]例如,在如圖6所示的函數(shù)調(diào)用關(guān)系圖中,函數(shù)A_2出度為I且入度為1,函數(shù)A_2被函數(shù)B_1調(diào)用且函數(shù)A_2調(diào)用函數(shù)B_2,所以,此時,去除函數(shù)A_2、函數(shù)A_2和函數(shù)B_1以及函數(shù)A_2和函數(shù)B_2之間的調(diào)用關(guān)系,并增加函數(shù)B_1和函數(shù)B_2的調(diào)用關(guān)系,重新構(gòu)建后的函數(shù)調(diào)用關(guān)系圖如圖7。
[0135](9):查找執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中是否存在入度為零的系統(tǒng)函數(shù),如果存在入度為零的系統(tǒng)函數(shù),執(zhí)行步驟(10),如果不存在入度為零的系統(tǒng)函數(shù),執(zhí)行步驟(3);
[0136](10):選取入度為零的系統(tǒng)函數(shù),去除該入度為零的函數(shù)及其調(diào)用關(guān)系,將所有調(diào)用該入度為零的系統(tǒng)函數(shù)的函數(shù)的入度減1,設(shè)置外層循環(huán)標(biāo)記為真并返回步驟(9)。
[0137]例如,在如圖7所示的函數(shù)調(diào)用關(guān)系圖中,函數(shù)A_1的入度為零,函數(shù)A_1調(diào)用函數(shù)[1,則去除函數(shù)A_1以及函數(shù)八_1和函數(shù)B_1之間的調(diào)用關(guān)系,并將函數(shù)B_1的入度減少,此時B_1的入度為零。
[0138]其中,在本步驟中過濾掉系統(tǒng)函數(shù)及系統(tǒng)函數(shù)的調(diào)用關(guān)系后,重新構(gòu)建的函數(shù)調(diào)用關(guān)系圖如圖8,過濾掉系統(tǒng)函數(shù)及系統(tǒng)函數(shù)的調(diào)用關(guān)系以后的函數(shù)調(diào)用關(guān)系圖更加突出了用戶所關(guān)心的函數(shù)之間的調(diào)用關(guān)系。
[0139]步驟206:將執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖顯示給用戶。
[0140]其中,用戶可以選擇該執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中的任一個函數(shù),系統(tǒng)獲取該函數(shù)的調(diào)用的第一函數(shù)以及調(diào)用該函數(shù)的第二函數(shù),并顯示該函數(shù)、第一函數(shù)以及第二函數(shù)之間的函數(shù)調(diào)用關(guān)系,隱藏該執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中其余的函數(shù)及其調(diào)用關(guān)系。
[0141]其中,可以獲取該執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中所有的函數(shù),并將所有的函數(shù)存儲到一個列表中,用戶可以選擇該列表中存儲的任一個函數(shù),系統(tǒng)獲取該函數(shù)的調(diào)用的第一函數(shù)以及調(diào)用該函數(shù)的第二函數(shù),并顯示該函數(shù)、第一函數(shù)以及第二函數(shù)之間的函數(shù)調(diào)用關(guān)系。
[0142]其中,用戶可以通過選擇函數(shù)調(diào)用關(guān)系圖或者列表中包括的任一個函數(shù),來查看該函數(shù)的調(diào)用關(guān)系,從而展現(xiàn)用戶所關(guān)注的重要函數(shù)的調(diào)用關(guān)系,隱藏用戶所不關(guān)心的細(xì)節(jié),如此可動態(tài)控制最終展示給·用戶的圖像,最大化的滿足用戶的需求。
[0143]其中,本發(fā)明實(shí)施例中,可以在獲取函數(shù)信息之前接收用戶輸入的開始時間和結(jié)束時間,選擇性的獲取用戶想要得到的函數(shù)信息。
[0144]具體地,接收用戶輸入的開始時間和結(jié)束時間,該開始時間和結(jié)束時間為用戶關(guān)心的程序開始執(zhí)行的時間和結(jié)束執(zhí)行的時間,并在該開始時間和結(jié)束時間之間設(shè)置記錄標(biāo)識為真,當(dāng)程序運(yùn)行時,對該記錄標(biāo)識進(jìn)行判斷,如果該記錄標(biāo)識為真,則執(zhí)行步驟201至步驟206。
[0145]其中,在獲取函數(shù)的函數(shù)信息之前接收開始時間和結(jié)束時間,并設(shè)置記錄標(biāo)識,能夠選擇性的獲取用戶想要得到的函數(shù)信息,尤其是對于系統(tǒng)中循環(huán)執(zhí)行的服務(wù)性程序,通過控制開始時間和結(jié)束時間能夠有效的減少由于其他無關(guān)的函數(shù)調(diào)用而導(dǎo)致的數(shù)據(jù)量,解決了在構(gòu)造函數(shù)調(diào)用關(guān)系圖時由于信息量大而導(dǎo)致處理效率低的問題,以及生成的函數(shù)調(diào)用關(guān)系圖模糊無法辨認(rèn)的問題。
[0146]其中,本發(fā)明實(shí)施例中,步驟205為一優(yōu)選的步驟,該步驟可以過濾掉系統(tǒng)函數(shù)及系統(tǒng)函數(shù)的調(diào)用關(guān)系,從而更加突出用戶所關(guān)心的函數(shù)之間的調(diào)用關(guān)系,也可以跳過該步驟,在從執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及系統(tǒng)函數(shù)的調(diào)用關(guān)系之后直接將執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖顯示給用戶。
[0147]在本發(fā)明實(shí)施例中,當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取該函數(shù)的函數(shù)信息以及用于運(yùn)行該函數(shù)的執(zhí)行單元,該執(zhí)行單元包括線程或進(jìn)程,通過執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造出該執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)調(diào)用關(guān)系圖,由于每個進(jìn)程或線程對應(yīng)該進(jìn)程或線程所運(yùn)行函數(shù)的函數(shù)調(diào)用關(guān)系圖,從而解決了現(xiàn)有技術(shù)中如果存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,構(gòu)造出來的函數(shù)調(diào)用關(guān)系圖與程序?qū)嶋H執(zhí)行流不符的問題。
[0148]實(shí)施例3
[0149]本發(fā)明實(shí)施例提供了一種函數(shù)調(diào)用關(guān)系的獲取方法,參見圖2,該裝置包括:
[0150]第一獲取模塊301,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址;
[0151]第二獲取模塊302,用于獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;
[0152]構(gòu)造模塊303,用于根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
[0153]其中,所述函數(shù)的函數(shù)信息還包括所述函數(shù)所在文件的文件信息在信息列表中的序號,所述信息列表用于存儲文件的文件信息;
[0154]其中,第一獲取模塊301,還用于獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0155]其中,第一獲取模塊301包括:
[0156]判斷單元3011,用于根據(jù)所述函數(shù)的入口地址,判斷所述函數(shù)是否為程序中包含的函數(shù);
[0157]第一獲取單元3012,用于如果所述函數(shù)是所述程序中包含的函數(shù),判斷序號空間中是否包括所述程序所在文件的文件信息在信息列表中的序號,如果所述序號空間中包括所述程序所在文件的文件信息在所述信息列表中的序號,則將所述序號空間包括的所述程序所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0158]其中,第一獲取模塊301還包括:
[0159]第二獲取單元3013,用于如果所述序號空間為空,則獲取所述函數(shù)所在文件的文件信息,將所述函數(shù)所在文件的文件信息存儲在所述信息列表中,設(shè)置所述函數(shù)所在文件的文件信息在所述信息列表中的序號,將所述函數(shù)所在文件的文件信息在所述信息列表中的序號存儲在所述序號空間中。
[0160]其中,第一獲取模塊301還包括:
[0161]第三獲取單元3014,用于如果所述函數(shù)不是所述程序中包含的函數(shù),則判斷出所述函數(shù)為動態(tài)鏈接庫包含的函數(shù),根據(jù)所述函數(shù)的入口地址查找所述信息列表,當(dāng)查找出所述信息列表中存在所述動態(tài)鏈接庫所在文件的文件信息,則將所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
[0162]其中,第一獲取模塊301還包括:
[0163]第四獲取單元3015,用于當(dāng)查找出所述信息列表中不存在所述動態(tài)鏈接庫所在文件的文件信息,獲取所述動態(tài)鏈接庫所在文件的文件信息,將所述動態(tài)鏈接庫所在文件的文件信息存儲在所述信息列表中,設(shè)置所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號。
[0164]進(jìn)一步地,該裝置還包括:[0165]過濾模塊304,用于根據(jù)所述執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖之后,從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系。
[0166]其中,過濾模塊304包括:
[0167]第一計(jì)算單元3041,用于計(jì)算所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,所述函數(shù)的入度為調(diào)用所述函數(shù)的函數(shù)的個數(shù),所述函數(shù)的出度為所述函數(shù)調(diào)用的函數(shù)的個數(shù);
[0168]第一過濾單元3042,用于過濾出度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,減少調(diào)用所述系統(tǒng)函數(shù)的函數(shù)的出度;
[0169]第二過濾單元3043,用于過濾入度為I且出度為I的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,增加調(diào)用所述系統(tǒng)函數(shù)的函數(shù)和所述系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系;
[0170]第二計(jì)算單元3044,用于根據(jù)所述函數(shù)調(diào)用關(guān)系圖中包括的剩下函數(shù)的函數(shù)信息重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,計(jì)算所述函數(shù)調(diào)用關(guān)系圖包括的函數(shù)的出度和入度;
[0171]第三過濾單元3045,用于過濾入度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,以及減少所述系統(tǒng)調(diào)用的函數(shù)的入度。
[0172]進(jìn)一步地,該裝置還包括:
[0173]接收模塊305,用于接收開始時間和結(jié)束時間,在所述開始時間和所述結(jié)束時間之間設(shè)置記錄標(biāo)識為真;
[0174]其中,第一獲取模塊301,包括:
[0175]第五獲取單元3016,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,對所述記錄標(biāo)識進(jìn)行判斷,如果所述記錄標(biāo)識為真,則獲取所述函數(shù)的函數(shù)信息。
[0176]在本發(fā)明實(shí)施例中,當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取該函數(shù)的函數(shù)信息以及用于運(yùn)行該函數(shù)的執(zhí)行單元,該執(zhí)行單元包括線程或進(jìn)程,通過執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造出該執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)調(diào)用關(guān)系圖,由于每個進(jìn)程或線程對應(yīng)該進(jìn)程或線程所運(yùn)行函數(shù)的函數(shù)調(diào)用關(guān)系圖,從而解決了現(xiàn)有技術(shù)中如果存在多個進(jìn)程或多個線程同時執(zhí)行相同函數(shù)時,構(gòu)造出來的函數(shù)調(diào)用關(guān)系圖與程序?qū)嶋H執(zhí)行流不符的問題。
[0177]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計(jì)算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0178]以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種函數(shù)調(diào)用關(guān)系的獲取方法,其特征在于,所述方法包括: 當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址; 獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程; 根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
2.如權(quán)利要求1所述的方法,其特征在于, 所述函數(shù)的函數(shù)信息還包括所述函數(shù)所在文件的文件信息在信息列表中的序號,所述信息列表用于存儲文件的文件信息; 所述獲取所述函數(shù)的函數(shù)信息,包括: 獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
3.如權(quán)利要求2所述的方法,其特征在于,所述獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號,包括: 根據(jù)所述函數(shù)的入口地址,判斷所述函數(shù)是否為程序中包含的函數(shù); 如果所述函數(shù)是所述程序中包含的函數(shù),判斷序號空間中是否包括所述程序所在文件的文件信息在信息列表中的序號,如果所述序號空間中包括所述程序所在文件的文件信息在所述信息列表中的序號,則將所述序號空間包括的所述程序所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
4.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括: 如果所述序號空間為空,則獲取所述函數(shù)所在文件的文件信息,將所述函數(shù)所在文件的文件信息存儲在所述信息列表中,設(shè)置所述函數(shù)所在文件的文件信息在所述信息列表中的序號,將所述函數(shù)所在文件的文件信息在所述信息列表中的序號存儲在所述序號空間中。
5.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括: 如果所述函數(shù)不是所述程序中包含的函數(shù),則判斷出所述函數(shù)為動態(tài)鏈接庫包含的函數(shù),根據(jù)所述函數(shù)的入口地址查找所述信息列表,當(dāng)查找出所述信息列表中存在所述動態(tài)鏈接庫所在文件的文件信息,則將所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
6.如權(quán)利要求5所述的方法,其特征在于,所述方法還包括: 當(dāng)查找出所述信息列表中不存在所述動態(tài)鏈接庫所在文件的文件信息,獲取所述動態(tài)鏈接庫所在文件的文件信息,將所述動態(tài)鏈接庫所在文件的文件信息存儲在所述信息列表中,設(shè)置所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號。
7.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖之后,還包括: 從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系。
8.如權(quán)利要求7所述的方法,其特征在于,所述從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)的調(diào)用關(guān)系,包括: 計(jì)算所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,所述函數(shù)的入度為調(diào)用所述函數(shù)的函數(shù)的個數(shù),所述函數(shù)的出度為所述函數(shù)調(diào)用的函數(shù)的個數(shù); 過濾出度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,減少調(diào)用所述系統(tǒng)函數(shù)的函數(shù)的出度; 過濾入度為I且出度為I的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,增加調(diào)用所述系統(tǒng)函數(shù)的函數(shù)和所述系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系; 根據(jù)所述函數(shù)調(diào)用關(guān)系圖中包括的剩下函數(shù)的函數(shù)信息重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,計(jì)算所述函數(shù)調(diào)用關(guān)系圖包括的函數(shù)的出度和入度; 過濾入度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,以及減少所述系統(tǒng)調(diào)用的函數(shù)的入度。
9.如權(quán)利要求1所述的方法,其特征在于,所述獲取所述函數(shù)的函數(shù)信息之前,還包括: 接收開始時間和結(jié)束時間,在所述開始時間和所述結(jié)束時間之間設(shè)置記錄標(biāo)識為真; 所述獲取所述函數(shù)的函數(shù)信息,包括: 當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,對所述記錄標(biāo)識進(jìn)行判斷,如果所述記錄標(biāo)識為真,則獲取所述函數(shù)的函數(shù)信息。
10.一種函數(shù)調(diào)用關(guān)系的獲取裝置,其特征在于,所述裝置包括: 第一獲取模塊,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,獲取所述函數(shù)的函數(shù)信息,所述函數(shù)信息至少包括所述函數(shù)的入口地址和出口地址; 第二獲取模塊,用于獲取用于運(yùn)行所述函數(shù)的執(zhí)行單元,所述執(zhí)行單元包括進(jìn)程或線程;· 構(gòu)造模塊,用于根據(jù)所述執(zhí)行單元運(yùn)行的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖。
11.如權(quán)利要求10所述的裝置,其特征在于, 所述函數(shù)的函數(shù)信息還包括所述函數(shù)所在文件的文件信息在信息列表中的序號,所述信息列表用于存儲文件的文件信息; 所述第一獲取模塊,還用于獲取所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
12.如權(quán)利要求11所述的裝置,其特征在于,所述第一獲取模塊包括: 判斷單元,用于根據(jù)所述函數(shù)的入口地址,判斷所述函數(shù)是否為程序中包含的函數(shù);第一獲取單元,用于如果所述函數(shù)是所述程序中包含的函數(shù),判斷序號空間中是否包括所述程序所在文件的文件信息在信息列表中的序號,如果所述序號空間中包括所述程序所在文件的文件信息在所述信息列表中的序號,則將所述序號空間包括的所述程序所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
13.如權(quán)利要求12所述的裝置,其特征在于,所述第一獲取模塊還包括: 第二獲取單元,用于如果所述序號空間為空,則獲取所述函數(shù)所在文件的文件信息,將所述函數(shù)所在文件的文件信息存儲在所述信息列表中,設(shè)置所述函數(shù)所在文件的文件信息在所述信息列表中的序號,將所述函數(shù)所在文件的文件信息在所述信息列表中的序號存儲在所述序號空間中。
14.如權(quán)利要求12所述的裝置,其特征在于,所述第一獲取模塊還包括: 第三獲取單元,用于如果所述函數(shù)不是所述程序中包含的函數(shù),則判斷出所述函數(shù)為動態(tài)鏈接庫包含的函數(shù),根據(jù)所述函數(shù)的入口地址查找所述信息列表,當(dāng)查找出所述信息列表中存在所述動態(tài)鏈接庫所在文件的文件信息,則將所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號確定為所述函數(shù)所在文件的文件信息在所述信息列表中的序號。
15.如權(quán)利要求14所述的裝置,其特征在于,所述第一獲取模塊還包括: 第四獲取單元,用于當(dāng)查找出所述信息列表中不存在所述動態(tài)鏈接庫所在文件的文件信息,獲取所述動態(tài)鏈接庫所在文件的文件信息,將所述動態(tài)鏈接庫所在文件的文件信息存儲在所述信息列表中,設(shè)置所述動態(tài)鏈接庫所在文件的文件信息在所述信息列表中的序號。
16.如權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括: 過濾模塊,用于根據(jù)所述執(zhí)行單元對應(yīng)的函數(shù)的函數(shù)信息構(gòu)造所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖之后,從所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中過濾系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系。
17.如權(quán)利要求16所述的裝置,其特征在于,所述過濾模塊包括: 第一計(jì)算單元,用于計(jì)算所述執(zhí)行單元對應(yīng)的函數(shù)調(diào)用關(guān)系圖中包括的函數(shù)的入度和出度,所述函數(shù)的入度為調(diào)用所述函數(shù)的函數(shù)的個數(shù),所述函數(shù)的出度為所述函數(shù)調(diào)用的函數(shù)的個數(shù); 第一過濾單元,用于過濾出度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,減少調(diào)用所述系統(tǒng)函數(shù)的函數(shù)的出度; 第二過濾單元,用于過濾入度為I且出度為I的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,增加調(diào)用所述系統(tǒng)函數(shù)的函數(shù)和所述系統(tǒng)函數(shù)調(diào)用的函數(shù)之間的調(diào)用關(guān)系; 第二計(jì)算單元,用于根據(jù)所述函數(shù)調(diào)用關(guān)系圖中包括的剩下函數(shù)的函數(shù)信息重新構(gòu)建函數(shù)調(diào)用關(guān)系圖,計(jì)算所述函數(shù)調(diào)用關(guān)系圖包括的函數(shù)的出度和入度; 第三過濾單元,用于過濾入度為零的系統(tǒng)函數(shù)及所述系統(tǒng)函數(shù)的調(diào)用關(guān)系,以及減少所述系統(tǒng)調(diào)用的函數(shù)的入度。
18.如權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括: 接收模塊,用于接收開始時間和結(jié)束時間,在所述開始時間和所述結(jié)束時間之間設(shè)置記錄標(biāo)識為真; 所述第一獲取模塊,包括: 第五獲取單元,用于當(dāng)程序運(yùn)行過程中調(diào)用函數(shù)時,對所述記錄標(biāo)識進(jìn)行判斷,如果所述記錄標(biāo)識為真,則獲取所述函數(shù)的函數(shù)信息。
【文檔編號】G06F9/46GK103853603SQ201210523735
【公開日】2014年6月11日 申請日期:2012年12月7日 優(yōu)先權(quán)日:2012年12月7日
【發(fā)明者】阮輝, 郭朝楠, 謝平 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
正蓝旗| 凤翔县| 封丘县| 裕民县| 铜山县| 双城市| 梁平县| 黑龙江省| 弋阳县| 嵊州市| 合水县| 房山区| 巴东县| 大足县| 桃园市| 金塔县| 黄陵县| 黔南| 印江| 永吉县| 千阳县| 吉木萨尔县| 醴陵市| 西丰县| 关岭| 高阳县| 漯河市| 车致| 鹤峰县| 长泰县| 东明县| 义马市| 广宗县| 黔西县| 康定县| 葵青区| 锡林郭勒盟| 宽城| 阿巴嘎旗| 凤山县| 青冈县|