1.一种基于高级程序设计语言实现钩子函数的方法,其特征在于,包括:创建目标函数的拷贝函数;
将钩子函数引入到所述目标函数的程序集中,其中,所述钩子函数包括钩子输入函数和钩子输出函数,所述钩子输入函数和所述钩子输出函数是基于高级程序设计语言编写的;
基于所述拷贝函数,重写所述目标函数,从而将所述目标函数的参数传入到所述钩子输入函数中,将所述目标函数的返回值传入到所述钩子输出函数中。
2.如权利要求1所述的基于高级程序设计语言实现钩子函数的方法,其特征在于,所述创建目标函数的拷贝函数,包括:获取所述目标函数的全部元数据信息,并基于所述全部元数据信息,创建新函数的声明信息,所述新函数与所述目标函数的元数据信息相同;
保存所述目标函数的函数体,并将所述目标函数的函数体载入到所述新函数中,以使得调用所述新函数与调用所述目标函数相同,其中,所述新函数即为所述目标函数的拷贝函数。
3.如权利要求1所述的基于高级程序设计语言实现钩子函数的方法,其特征在于,所述将钩子函数引入到所述目标函数的程序集中,包括:基于IMetaDataImport接口,将所述钩子输入函数和所述钩子输出函数引入到所述目标函数的程序集中。
4.如权利要求1所述的基于高级程序设计语言实现钩子函数的方法,其特征在于,所述高级程序设计语言,具体为:C#语言。
5.如权利要求1~4任一所述的基于高级程序设计语言实现钩子函数的方法,其特征在于,所述基于所述拷贝函数,重写所述目标函数,包括:创建profiler实例;
对所述拷贝函数进行反编译,获得所述拷贝函数的源代码;
在所述目标函数被CProfilerCallback::JITCompilationStarted函数回调时,将所述拷贝函数的源代码注入到所述高级程序设计语言的运行时中。
6.如权利要求5所述的基于高级程序设计语言实现钩子函数的方法,其特征在于,所述将所述钩子函数的源代码注入到所述高级程序设计语言的运行时中,包括:基于ICorProfilerInfo接口和ICorProfilerCallback接口,将所述钩子函数的源代码注入到所述高级程序设计语言的运行时中。
7.一种基于高级程序设计语言实现钩子函数的装置,其特征在于,包括:创建单元,用于创建目标函数的拷贝函数;
引入单元,用于将钩子函数引入到所述目标函数的程序集中,其中,所述钩子函数包括钩子输入函数和钩子输出函数,所述钩子输入函数和所述钩子输出函数是基于高级程序设计语言编写的;
重写单元,用于基于所述拷贝函数,重写所述目标函数,从而将所述目标函数的参数传入到所述钩子输入函数中,将所述目标函数的返回值传入到所述钩子输出函数中。
8.如权利要求7所述的基于高级程序设计语言实现钩子函数的装置,其特征在于,所述创建单元,具体用于:获取所述目标函数的全部元数据信息,并基于所述全部元数据信息,创建新函数的声明信息,所述新函数与所述目标函数的元数据信息相同;保存所述目标函数的函数体,并将所述目标函数的函数体载入到所述新函数中,以使得调用所述新函数与调用所述目标函数相同,其中,所述新函数即为所述目标函数的拷贝函数。
9.一种基于高级程序设计语言实现钩子函数的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:创建目标函数的拷贝函数;将钩子函数引入到所述目标函数的程序集中,其中,所述钩子函数包括钩子输入函数和钩子输出函数,所述钩子输入函数和所述钩子输出函数是基于高级程序设计语言编写的;基于所述拷贝函数,重写所述目标函数,从而将所述目标函数的参数传入到所述钩子输入函数中,将所述目标函数的返回值传入到所述钩子输出函数中。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:创建目标函数的拷贝函数;将钩子函数引入到所述目标函数的程序集中,其中,所述钩子函数包括钩子输入函数和钩子输出函数,所述钩子输入函数和所述钩子输出函数是基于高级程序设计语言编写的;基于所述拷贝函数,重写所述目标函数,从而将所述目标函数的参数传入到所述钩子输入函数中,将所述目标函数的返回值传入到所述钩子输出函数中。