The invention discloses a function compiling method and a device. The method comprises the following steps: to get the function call to get second hook function pointer compiler to custom proxy function of the first function, the first function is to use the first programming language by hook function, function pointer is used to call the second function; the function calling pointer register to allow the calling code written in the first programming language the use of; after the registration of the function call to third pointer function to be compiled fourth functions, third functions including for the first call to the function of the code, the third function is to use the first programming language custom hook function, second function code and fourth function code allows direct execution by CPU. The invention solves the technical problem that the user-defined Hook function must be written with C/C++ when the function is Hook, which leads to the higher development cost of the custom Hook function.
【技术实现步骤摘要】
函数编译方法和装置
本专利技术涉及计算机领域,具体而言,涉及一种函数编译方法和装置。
技术介绍
Hook技术可以指利用一个自定义的函数替换某个函数的过程,其中,该过程可以涉及到三个函数,一个是被Hook函数,一个是自定义Hook函数,Hook之后可以返回一个函数指针,该函数指针可以完成被Hook函数的功能,也即该函数指针可以指示被Hook函数的调用。Hook技术可以应用于测试等领域中,例如,图1是现有技术在手机游戏协议测试工具中使用的示意图,如图1所示,具体包括如下步骤:1.注册JIT完成事件:用Mono提供的接口mono_profiler_install_jit_end向Mono注册全局的JIT完成事件的回调函数。其中,Mono可以是一个可以运行.Net程序的开源项目,JIT可以指Mono运行时将IL代码动态编译成Native代码的过程,其中,IL代码为.Net语言编译后的字节码,Native代码为可以直接被CPU执行的代码。2.设置JIT完成通知事件:用Mono提供的接口mono_profiler_set_events向设置在有JIT完成的时候通知用户自定义的JIT完成事件的回调函数。3.监听所有被JIT的函数:在自定义的JIT完成事件回调函数中检查所有函数是不是现在需要Hook的函数,如果是,则实施Hook,否则什么也不做。4.实施HOOK:对需要Hook的函数进行Hook。其中,Hook函数可以由开发人员根据实际需求用C/C++语言编写。现有技术方案在上述使用过程中存在以下不足:第一点不足:注册机制导致在注册前就JIT的函数永远都不会通知到JIT完 ...
【技术保护点】
一种函数编译方法,其特征在于,包括:将对第一函数进行编译得到的第二函数挂钩到自定义代理函数中,得到函数调用指针,其中,所述第一函数为使用第一编程语言编写的被挂钩函数,所述第二函数中的代码允许直接被CPU执行,所述函数调用指针用于调用所述第二函数;将所述函数调用指针进行注册,以使得所述函数调用指针被允许用所述第一编程语言编写的代码调用;利用经过注册的所述函数调用指针对第三函数进行编译,得到第四函数,其中,所述第三函数中包括用于调用所述第一函数的代码,所述第三函数为使用所述第一编程语言编写的自定义挂钩函数,所述第四函数中的代码允许直接被CPU执行。
【技术特征摘要】
1.一种函数编译方法,其特征在于,包括:将对第一函数进行编译得到的第二函数挂钩到自定义代理函数中,得到函数调用指针,其中,所述第一函数为使用第一编程语言编写的被挂钩函数,所述第二函数中的代码允许直接被CPU执行,所述函数调用指针用于调用所述第二函数;将所述函数调用指针进行注册,以使得所述函数调用指针被允许用所述第一编程语言编写的代码调用;利用经过注册的所述函数调用指针对第三函数进行编译,得到第四函数,其中,所述第三函数中包括用于调用所述第一函数的代码,所述第三函数为使用所述第一编程语言编写的自定义挂钩函数,所述第四函数中的代码允许直接被CPU执行。2.根据权利要求1所述的方法,其特征在于,在所述利用经过注册的所述函数调用指针对第三函数进行编译之后,所述方法还包括:接收到操作请求,其中,所述操作请求用于请求对目标应用进行预定操作,所述目标应用使用所述第一编程语言进行编写得到;在响应所述操作请求对所述目标应用进行所述预定操作的过程中,当所述第一函数被请求执行时,跳转到所述第四函数,以执行所述第四函数。3.根据权利要求1所述的方法,其特征在于,在所述将对第一函数进行编译得到的第二函数挂钩到自定义代理函数中之前,所述方法还包括:根据所述第一函数的标识在预定的程序集中获取所述第一函数。4.根据权利要求3所述的方法,其特征在于,所述根据所述第一函数的标识在预定的程序集中获取所述第一函数包括:对每个程序集执行以下操作,其中,所述程序集在执行以下操作时被标记为当前程序集:在所述当前程序集的标识与预定标识相匹配的情况下,从所述当前程序集中确定预定的类,并从所述预定的类中确定所述第一函数。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述第一编程语言为C#,所述第二函数中的代码和所述第四函数中的代码为Native代码。6.一种函数编译方法,其特征在于,包括:对第一函数进行编译得到第二函数,其中,所述第一函数为使用第一编程语言编写的被挂钩函数,所述第二函数中的代码允许直接被CPU执行;对第三函数进行编译得到第四函数,其中,所述第三函数中包括用于调用所述第一函数的第一代码,所述第三函数为使用所述第一编程语言编写的自定义挂钩函数,所述第四函数中的代码允许直接被CPU执行;将所述第一代码进行编译得到第二代码,其中,所述第二代码允许直接被CPU执行;将所述第二函数挂钩到所述第四函数,得到函数调用指针,其中,所述函数调用指针用于调用所述第二函数;将所述第二代码挂钩到所述函数调用指针所指示的所述第二函数。7.根据权利要求6所述的方法,其特征在于,在所述将所述第二代...
【专利技术属性】
技术研发人员:黄柳优,李源纯,周江,王鹏,魏学峰,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。