1.一種函數(shù)調(diào)用信息的獲取方法,其特征在于,包括:
在運(yùn)行待測試的程序的過程中,對(duì)所述程序中待調(diào)用的托管函數(shù)進(jìn)行編譯,得到非托管函數(shù),其中,所述非托管函數(shù)被允許直接運(yùn)行在中央處理器CPU上;
對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作,得到第一函數(shù)調(diào)用信息,其中,所述hook操作用于監(jiān)控所述非托管函數(shù)在運(yùn)行時(shí)的參數(shù)和返回值,所述第一函數(shù)調(diào)用信息至少包括:函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值;
根據(jù)所述第一函數(shù)調(diào)用信息和所述托管函數(shù)的函數(shù)名生成第二函數(shù)調(diào)用信息,其中,所述第二函數(shù)調(diào)用信息中包括具有對(duì)應(yīng)關(guān)系的所述托管函數(shù)的函數(shù)名、函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值;
輸出所述第二函數(shù)調(diào)用信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作之后,且在根據(jù)所述第一函數(shù)調(diào)用信息和所述托管函數(shù)的函數(shù)名生成第二函數(shù)調(diào)用信息之前,還包括:
根據(jù)預(yù)先建立的對(duì)應(yīng)關(guān)系獲取與所述非托管函數(shù)的第一函數(shù)指針對(duì)應(yīng)的所述托管函數(shù)的第二函數(shù)指針;
通過所述第二函數(shù)指針查找到所述托管函數(shù)的所述函數(shù)名。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,在對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作之后,且在根據(jù)預(yù)先建立的對(duì)應(yīng)關(guān)系獲取與所述非托管函數(shù)的第一函數(shù)指針對(duì)應(yīng)的所述托管函數(shù)的第二函數(shù)指針之前,還包括:
通過執(zhí)行所述hook操作得到的返回地址獲取所述非托管函數(shù)的匯編代碼;
根據(jù)所述匯編代碼獲取所述非托管函數(shù)的第一函數(shù)指針。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,在對(duì)所述程序中待調(diào)用的托管函數(shù)進(jìn)行編譯之后,且在根據(jù)預(yù)先建立的對(duì)應(yīng)關(guān)系獲取與所述非托管函數(shù)的第一函數(shù)指針對(duì)應(yīng)的所述托管函數(shù)的第二函數(shù)指針之前,還包括:
建立所述非托管函數(shù)的第一函數(shù)指針與所述托管函數(shù)的第二函數(shù)指針之間的所述對(duì)應(yīng)關(guān)系,其中,進(jìn)行所述編譯所需的參數(shù)包括所述托管函數(shù)的第二函數(shù)指針,進(jìn)行所述編譯之后所得到的返回值包括所述非托管函數(shù)的第一函數(shù)指針。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作,得到第一函數(shù)調(diào)用信息包括:
使用預(yù)先定義的hook函數(shù)對(duì)非托管函數(shù)進(jìn)行所述hook操作,其中,所述預(yù)先定義的hook函數(shù)輸入?yún)?shù)包括:需要被hook操作的參數(shù),所述預(yù)先定義的hook函數(shù)輸出參數(shù)包括:所述托管函數(shù)運(yùn)行時(shí)的參數(shù)和返回值,所述預(yù)先定義的hook函數(shù),用于監(jiān)控所述非托管函數(shù)在運(yùn)行時(shí)的參數(shù)和返回值。
6.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,對(duì)所述程序中待調(diào)用的托管函數(shù)進(jìn)行編譯,得到非托管函數(shù)包括:
對(duì)所述程序中所有待調(diào)用的托管函數(shù)進(jìn)行編譯,得到對(duì)應(yīng)的非托管函數(shù)。
7.一種函數(shù)調(diào)用信息的獲取裝置,其特征在于,包括:
編譯單元,用于在運(yùn)行待測試的程序的過程中,對(duì)所述程序中待調(diào)用的托管函數(shù)進(jìn)行編譯;
第一確定單元,用于對(duì)所述托管函數(shù)編譯后得到非托管函數(shù),其中,所述非托管函數(shù)被允許直接運(yùn)行在中央處理器CPU上;
第二確定單元,用于對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作,得到第一函數(shù)調(diào)用信息,其中,所述hook操作用于監(jiān)控所述非托管函數(shù)在運(yùn)行時(shí)的參數(shù)和返回值,所述第一函數(shù)調(diào)用信息至少包括:函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值;
生成單元,用于根據(jù)所述第一函數(shù)調(diào)用信息和所述托管函數(shù)的函數(shù)名生成第二函數(shù)調(diào)用信息,其中,所述第二函數(shù)調(diào)用信息中包括具有對(duì)應(yīng)關(guān)系的所述托管函數(shù)的函數(shù)名、函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值;
輸出單元,用于輸出所述第二函數(shù)調(diào)用信息。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括:
第一獲取單元,用于根據(jù)預(yù)先建立的對(duì)應(yīng)關(guān)系獲取與所述非托管函數(shù)的第一函數(shù)指針對(duì)應(yīng)的所述托管函數(shù)的第二函數(shù)指針;
查找單元,用于通過所述第二函數(shù)指針查找到所述托管函數(shù)的所述函數(shù)名。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括:
第二獲取單元,用于通過執(zhí)行所述hook操作得到的返回地址獲取所述非托管函數(shù)的匯編代碼;
第三獲取單元,用于根據(jù)所述匯編代碼獲取所述非托管函數(shù)的第一函數(shù)指針。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括:
建立單元,用于建立所述非托管函數(shù)的第一函數(shù)指針與所述托管函數(shù)的第二函數(shù)指針之間的所述對(duì)應(yīng)關(guān)系,其中,進(jìn)行所述編譯所需的參數(shù)包括所述托管函數(shù)的第二函數(shù)指針,進(jìn)行所述編譯之后所得到的返回值包括所述非托管函數(shù)的第一函數(shù)指針。
11.根據(jù)權(quán)利要求7至10中任一項(xiàng)所述的裝置,其特征在于,所述第一確定單元包括:
操作模塊,用于使用預(yù)先定義的hook函數(shù)對(duì)非托管函數(shù)進(jìn)行所述hook操作,其中,所述預(yù)先定義的hook函數(shù)輸入?yún)?shù)包括:需要被hook操作的參數(shù),所述預(yù)先定義的hook函數(shù)輸出參數(shù)包括:所述托管函數(shù)運(yùn)行時(shí)的參數(shù)和返回值,所述預(yù)先定義的hook函數(shù),用于監(jiān)控所述非托管函數(shù)在運(yùn)行時(shí)的參數(shù)和返回值。
12.根據(jù)權(quán)利要求7至10中任一項(xiàng)所述的裝置,其特征在于,所述編譯單元,還用于對(duì)所述程序中所有待調(diào)用的托管函數(shù)進(jìn)行編譯,得到對(duì)應(yīng)的非托管函數(shù)。
13.一種測試設(shè)備,其特征在于,包括:
處理器;
用于存儲(chǔ)處理器可執(zhí)行指令的存儲(chǔ)器;
其中,所述處理器,用于在運(yùn)行待測試的程序的過程中,對(duì)所述程序中待調(diào)用的托管函數(shù)進(jìn)行編譯,得到非托管函數(shù),對(duì)所述非托管函數(shù)進(jìn)行鉤子hook操作,得到第一函數(shù)調(diào)用信息,根據(jù)所述第一函數(shù)調(diào)用信息和所述托管函數(shù)的函數(shù)名生成第二函數(shù)調(diào)用信息,進(jìn)而輸出所述第二函數(shù)調(diào)用信息,其中,所述非托管函數(shù)被允許直接運(yùn)行在中央處理器CPU上,所述hook操作用于監(jiān)控所述非托管函數(shù)在運(yùn)行時(shí)的參數(shù)和返回值,所述第一函數(shù)調(diào)用信息至少包括:函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值,所述第二函數(shù)調(diào)用信息中包括具有對(duì)應(yīng)關(guān)系的所述托管函數(shù)的函數(shù)名、函數(shù)進(jìn)入時(shí)間、函數(shù)退出時(shí)間,函數(shù)返回值。