程序调用的优化方法及装置与流程

文档序号:14418914阅读:170来源:国知局
程序调用的优化方法及装置与流程

本发明涉及一种应用开发技术领域,特别是涉及一种程序调用的优化方法及装置。



背景技术:

随着操作系统应用开发技术的快速发展,使用虚拟化技术对操作系统底层进行处理、开发以及成为主流手段。安卓运行时(androidruntime,art)虚拟机区别于传统的dalvik虚拟机,使用预编译技术取代dalvik中的及时编译技术,加快了应用程序的启动和执行。

目前,传统的dalvik虚拟机中在多开应用时,使用hook函数实现钩取目标函数来完成多开应用的技术已经发展成熟,但是,安卓系统在使用art虚拟机调用第三方应用之后,系统程序变为复杂,art虚拟机运行时是翻译dex字节码后得到的机器码指令,art虚拟机主要应用的一种android私有elf文件格式,即oat文件,其中包含从传统dalvik的dex文件翻译过来的机器码指令,但是由于art虚拟机运行时提供了java接口,而实现java接口不得不依赖于dex文件,所以oat文件又包含原始的dex文件内容,即art虚拟机在利用hook函数实现钩取目标函数时,无法保证原函数与目标函数之间的elf文件与dex文件的转换格式一致,因此,对程序调用的优化已经成为亟待解决的问题。



技术实现要素:

有鉴于此,本发明提供一种程序调用的优化方法及装置,主要目的在于解决现有art虚拟机在利用hook函数实现钩取目标函数时,无法保证原函数与目标函数之间的elf文件与dex文件的转换格式一致的问题。

依据本发明一个方面,提供了一种程序调用的优化方法,包括:

当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

若存在跳转标识,则解析所述目标函数中的参数;

若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

进一步地,所述方法还包括:

若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令,所述第一跳转指令用于跳转至所述目标函数。

进一步地,所述若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理之后,所述方法还包括:

当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令,所述第二跳转指令用于跳转至所述原函数。

进一步地,所述当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识包括:

当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

进一步地,所述若存在跳转标识,则解析所述目标函数中的参数之后,所述方法还包括:

将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息。

进一步地,所述当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令包括:

根据所述数据类型指针检测所述原函数中是否存在与所述业务需求对应的标识,若存在,则执行所述第二跳转指令。

进一步地,所述若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理之后,所述方法还包括:

将所述转换格式标识进行重置。

依据本发明一个方面,提供了一种程序调用的优化装置,包括:

判断单元,用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

解析单元,用于若存在跳转标识,则解析所述目标函数中的参数;

处理单元,用于若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

进一步地,所述装置还包括:

第一执行单元,用于若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令,所述第一跳转指令用于跳转至所述目标函数。

进一步地,所述装置还包括:

第二执行单元,用于当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令,所述第二跳转指令用于跳转至所述原函数。

进一步地,所述判断单元,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

进一步地,所述装置还包括:

存储单元,用于将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息。

进一步地,所述第二执行单元,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

进一步地,所述装置还包括:

重置单元,用于将所述转换格式标识进行重置。

根据本发明的又一方面,提供了一种存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述程序调用的优化方法对应的操作。

根据本发明的再一方面,提供了一种终端,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述程序调用的优化方法对应的操作。

借由上述技术方案,本发明实施例提供的技术方案至少具有下列优点:

本发明提供了一种程序调用的优化方法及装置,首先当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识,若存在跳转标识,则解析所述目标函数中的参数,若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。与现有art虚拟机在利用hook函数实现钩取目标函数时,无法保证原函数与目标函数之间的elf文件与dex文件的转换格式一致相比,本发明实施例通过在原函数调用目标函数时,根据参数判断出是否需要格式转换,若需要,则通过跳转至替换函数进行处理,实现原函数与目标函数在调用过程中保持格式的一致性,从而提高函数调用的效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明实施例提供的一种程序调用的优化方法流程图;

图2示出了本发明实施例提供的另一种程序调用的优化方法流程图;

图3示出了本发明实施例提供的一种基于跳转模板转换的流程图;

图4示出了本发明实施例提供的一种程序调用的优化装置框图;

图5示出了本发明实施例提供的另一种程序调用的优化装置框图;

图6示出了本发明实施例提供的一种终端示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明实施例提供了一种程序调用的优化方法,如图1所示,所述方法包括:

101、当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识。

其中,原函数可以为执行业务需求的dex格式的程序,如获取链接地址的dex格式程序、计时的dex格式程序等,目标函数可以为根据原函数执行业务需求的elf格式的程序,如需要获取链接地址对象的elf格式程序、需要计时的elf格式程序等,本发明实施例不做具体限定。目标函数在进行被钩取之前,目标函数的头字节中配置了用于判断是否进行跳转的标识,即在目标函数被运行之前,需要判断目标函数中是否存在跳转标识,一般的,为了对需要优化的目标函数进行优化,在这些的目标函数中都会配置出跳转标识,以便直接跳转至模板中进行优化操作。

需要说明的是,art虚拟机在运行时,内部运行是通过class的类描述以及method的类方法描述而执行的。其中,每一个java函数都会对应一个method结构体,method结构体成员变量包括方法所在的类对象指针、方法的属性、方法在dex文件中的index,方法的机器码指针以及方法native代码的指针等,在native层调用java函数得到目标函数的method结构体。

102、若存在跳转标识,则解析所述目标函数中的参数。

其中,所述参数为目标函数中是否进行空间转换的参数,对应的空间转换包括了函数之间的java层到native层,或者native层java层之间的转换,具体的参数包括用于体现函数格式的参数、用于体现函数是否进行转换的参数等,本发明实施例不做具体限定。

需要说明的是,一般的,对于参数的解析,具体可以预先设定一些需要进行转换的转换格式标识,根据转换格式标识与预设转换条件进行匹配,若不一致,则说明需要进行转换。尤其是,在art虚拟机中的分身应用函数进行调用时,进一步地对待调用的函数确定是否需要进行转换格式。例如,游戏分身应用的dex格式的获取广告链接地址的程序调用位于art虚拟机底层中的elf格式的链接地址程序时,就会出现原函数与目标函数的格式不一致的情况。

103、若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

其中,所述转换格式标识为用于体现是否进行转换格式的参数,对于本发明实施例,一般通过设置转换格式标识为特定的f,若f小于0,则设定为需要进行转换,并通过预置指向指令跳转至替换函数中进行转换处理,替换函数为可以进行格式转换的函数,即在跳转至格式转换的函数时,首先运行替换函数中的转换代码,然后将目标函数的elf格式的函数转换为dex格式的函数,然后判断是否进行回调原函数,本发明实施例不做具体限定。预置指向指令为用于将机器指令的替换函数中第一个执行指令的地址赋给pc寄存器中的指令,使得将当前执行的进程跳转至替换函数中,pc寄存器存储下一条要执行的指令地址,指示下一条要执行的指令,即实现跳转。

需要说明的是,由于原函数在调用目标函数时,针对art虚拟机的运行特点,不同的函数之间的格式转换即可以通过跳转至替换函数进行格式转换。另外,由于各个函数之间通过hook操作进行调用时,会存在不同的格式转换,因此,预置指向指令可以根据目标函数及原函数,动态配置替换函数的第一个指向指令的地址赋给pc寄存器,从而实现不同格式之间的动态转换。

本发明提供了一种程序调用的优化方法,与现有art虚拟机在利用hook函数实现钩取目标函数时,无法保证原函数与目标函数之间的elf文件与dex文件的转换格式一致相比,本发明实施例通过在原函数调用目标函数时,根据参数判断出是否需要格式转换,若需要,则通过跳转至替换函数进行处理,实现原函数与目标函数在调用过程中保持格式的一致性,从而提高函数调用的效率。

本发明实施例提供了另一种程序调用的优化方法,如图2所示,所述方法包括:

201、当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

需要说明的是,为了在目标函数中的指令执行之前就对需要进行格式转换的目标函数进行格式转换,需要在目标函数的头字节中配置用于进行跳转的jmp指令,配置的jmp指令可以占用目标函数中的8个字节。因此,当前的步骤中,直接判断目标函数的头8个字节是否为jmp指令。

针对art虚拟机中格式之间的转换,需要针对的是本地函数与本地函数之间调用时的优化,因此,本发明实施例中的原函数与目标函数均为本地函数时,才可以进行格式之间的转换。

202、若存在跳转标识,则解析所述目标函数中的参数。

本步骤与图1所示的步骤102方法相同,在此不再赘述。

对于本发明实施例,步骤202之后还可以包括:将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层。

其中,所述预置线程为可以支持全局变量存储的容器,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息等,转换格式包括了java层到native层,或者native层java层之间的转换,例如,elf格式与dex文件等,本发明实施例不做具体限定。所述局部变量为预置线程中用于存储参数的限制局部变量,并且,由于从汇编层跳转至java层进行调用函数时,会涉及到函数参数类型及空间转换等问题,因此art虚拟机根据参数传递协议需要从寄存器及栈中解析参数,然后作为格式转换的依据。具体的,可以为将汇编对应的参数,以数组形式顺序存储至预置线程的局部变量中,并根据参数传递顺序及参数类型,将预置线程的局部变量对应的元素转换为对应的数据类型指针,传递至java层。

对于本发明实施例,步骤202之后的步骤203a、若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

本步骤与图1所示的步骤103方法相同,在此不再赘述。

需要说明的是,一般的,对于预设转换条件直接配置为0,然后可以根据参数解析的结果配置参数的转换格式标识,如,若需要进行转换,则将f配置为小于1的任意数值,若不需要进行转换,则将f配置为大于1的任意数值,本发明实施例不做具体限定。另外,预置指向指令可以为用于将将机器指令的替换函数中第一个执行指令的地址赋给pc寄存器中的ldr指令,从而实现将当前的执行进程跳转至替换函数中,根据替换函数进行格式的转换,并且,ldr是根据需要进行转换的替换函数的地址动态生成的,在一个跳转模板中,ldr指令中可以将不同的替换函数的指令地址存储至pc寄存器中。

对于本发明实施例,步骤203a之后的步骤204、当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令。

对于本发明实施例,所述第二跳转指令用于跳转至所述原函数。

由于在执行完替换函数后,会出现需要进行返回原函数执行的格式转换后的目标函数,以及不需要返回原函数执行的格式转换后的目标函数,具体返回原函数执行的判断是根据系统的业务需求来确定,所述业务需求为调用函数的执行目的,包括通知类、链接类、统计类的函数需要返回原函数执行,例如,activity启动耗时的时间统计。第二跳转指令即为可以是当前执行线程跳转至原函数的jmp跳转指令,如图3所示,当替换函数执行完毕后,若原函数为通知类、链接类、统计类则利用jmp回调原函数。

对于本发明实施例,步骤204具体可以为:根据所述数据类型指针检测所述原函数中是否存在与所述业务需求对应的标识,若存在,则执行所述第二跳转指令。

一般的,由于原函数所需要执行的业务需求可以通过函数中的标识来体现,因此,通过数据类型指针来逐一检测原函数中是否存在与业务需求对应的标识,从而确定是否需要进行回调原函数。

对于本发明实施例,步骤204之后的步骤205、将所述转换格式标识进行重置。

为了避免在进行了回调原函数之后,通过如图3所示的跳转模板,再次跳转至替换函数中,形成死循环,因此,需要在执行过一次回调原函数后,将小于0的f重置为大于0的任意数值,以便使得当前执行进程跳转至目标函数中执行目标函数的内容。

对于本发明实施例,步骤203a并列的步骤203b、若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令。

如图3所示,当转换格式标识f大于0时,直接通过第一跳转指令jmp跳转至目标函数中,所述第一跳转指令用于跳转至所述目标函数,且第一跳转指令中动态配置有目标函数中的头8个字节,以便直接执行不需要进行格式转换的目标函数。

本发明实施例中,跳转模板是指可以执行当前实施例中步骤的空间内存,一般的,在一个原函数调用目标函数时即可以在art虚拟机系统中请求一个空间内存,用以执行本发明实施例中程序调用的优化方法。其中,对于步骤202与步骤203a为预先在模板中设定的执行程序,而由于ldr指令与在f大于0时跳转回原函数的步骤是需要根据目标函数及替换函数的地址而变化的,因此,如图3所示,模板中对于的ldr及调回原函数是动态生成。

对于本发明实施例,具体的应用场景可以如下所示,但不限于此,包括:如图3所示,对于art虚拟机系统中需要调取分身应用,当原函数通过hook函数钩取目标函数时,判断目标函数的头8个字节为jmp指令,则通过jmp跳转至跳转模板中,通过解析目标函数中的参数确定目标函数中的转换格式标识f小于0,则根据预置指向指令ldr跳转至替换函数中进行处理,当替换函数执行完毕后,根据原函数中业务需求,即统计类参数确定执行回调原函数指令,回调至原函数,并将f重置为大于0的数值,当重新判断出f大于0时,通过写有目标函数中的头8个字节地址的第一jmp跳转指令,跳转至目标函数。

本发明提供了另一种程序调用的优化方法,本发明实施例通过在原函数调用目标函数时,目标函数中头字节中的jmp指令跳转至跳转模板中进行参数解析,当解析到转换格式标识f小于0时,通过ldr调用替换函数进行格式转换,然后根据不同目的的业务需求来判断是否进行回调原函数,若业务需求的目的为通知类、链接类、统计类,需要回调原函数时,重置转换格式标识,避免art虚拟机中dex格式的本地函数在调用elf格式的函数时的调用失败,无需进行人工格式转换,实现dex格式与elf格式之间的自动格式转换,确保调用过程中保持格式的一致性,从而提高函数调用的效率。

进一步的,作为对上述图1所示方法的实现,本发明实施例提供了一种程序调用的优化装置,如图4所示,该装置包括:判断单元31、解析单元32、处理单元33。

判断单元31,用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;所述判断单元31为程序调用的优化装置执行当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识的程序模块。

解析单元32,用于若存在跳转标识,则解析所述目标函数中的参数;所述解析单元32为程序调用的优化装置执行若存在跳转标识,则解析所述目标函数中的参数的程序模块。

处理单元33,用于若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。所述处理单元33为程序调用的优化装置执行若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理的程序模块。

本发明提供了一种程序调用的优化装置,与现有art虚拟机在利用hook函数实现钩取目标函数时,无法保证原函数与目标函数之间的elf文件与dex文件的转换格式一致相比,本发明实施例通过在原函数调用目标函数时,根据参数判断出是否需要格式转换,若需要,则通过跳转至替换函数进行处理,实现原函数与目标函数在调用过程中保持格式的一致性,从而提高函数调用的效率。

进一步的,作为对上述图2所示方法的实现,本发明实施例提供了另一种程序调用的优化装置,如图5所示,该装置包括:判断单元41、解析单元42、处理单元43、第一执行单元44、第二执行单元45、存储单元46、重置单元47。

判断单元41,用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

解析单元42,用于若存在跳转标识,则解析所述目标函数中的参数;

处理单元43,用于若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

进一步地,所述装置还包括:

第一执行单元44,用于若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令,所述第一跳转指令用于跳转至所述目标函数。

进一步地,所述装置还包括:

第二执行单元45,用于当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令,所述第二跳转指令用于跳转至所述原函数。

进一步地,所述判断单元41,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

进一步地,所述装置还包括:

存储单元46,用于将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息。

进一步地,所述第二执行单元45,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

进一步地,所述装置还包括:

重置单元47,用于将所述转换格式标识进行重置。

本发明提供了另一种程序调用的优化装置,本发明实施例通过在原函数调用目标函数时,目标函数中头字节中的jmp指令跳转至跳转模板中进行参数解析,当解析到转换格式标识f小于0时,通过ldr调用替换函数进行格式转换,然后根据不同目的的业务需求来判断是否进行回调原函数,若业务需求的目的为通知类、链接类、统计类,需要回调原函数时,重置转换格式标识,避免art虚拟机中dex格式的本地函数在调用elf格式的函数时的调用失败,无需进行人工格式转换,实现dex格式与elf格式之间的自动格式转换,确保调用过程中保持格式的一致性,从而提高函数调用的效率。

根据本发明一个实施例提供了一种存储介质,所述存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的程序调用的优化方法。

图6示出了根据本发明一个实施例提供的一种终端的结构示意图,本发明具体实施例并不对终端的具体实现做限定。

如图6所示,该终端可以包括:处理器(processor)502、通信接口(communicationsinterface)504、存储器(memory)506、以及通信总线508。

其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。

通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。

处理器502,用于执行程序510,具体可以执行上述程序调用的优化方法实施例中的相关步骤。

具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。

处理器502可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。终端包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。

存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

程序510具体可以用于使得处理器502执行以下操作:

当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

若存在跳转标识,则解析所述目标函数中的参数;

若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的程序调用的优化方法及装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明的实施例公开了:

a1、一种程序调用的优化方法,包括:

当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

若存在跳转标识,则解析所述目标函数中的参数;

若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

a2、根据a1所述的方法,所述方法还包括:

若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令,所述第一跳转指令用于跳转至所述目标函数。

a3、根据a1或a2所述的方法,所述若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理之后,所述方法还包括:

当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令,所述第二跳转指令用于跳转至所述原函数。

a4、根据a3所述的方法,所述当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识包括:

当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

a5、根据a4所述的方法,所述若存在跳转标识,则解析所述目标函数中的参数之后,所述方法还包括:

将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息。

a6、根据a5所述的方法,所述当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令包括:

根据所述数据类型指针检测所述原函数中是否存在与所述业务需求对应的标识,若存在,则执行所述第二跳转指令。

a7、根据a1-a6任一项所述的方法,所述若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理之后,所述方法还包括:

将所述转换格式标识进行重置。

b8、一种程序调用的优化装置,包括:

判断单元,用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;

解析单元,用于若存在跳转标识,则解析所述目标函数中的参数;

处理单元,用于若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理。

b9、根据b8所述的装置,所述装置还包括:

第一执行单元,用于若所述参数的转换格式标识大于预设转换条件,则执行第一跳转指令,所述第一跳转指令用于跳转至所述目标函数。

b10、根据b8或b9所述的装置,所述装置还包括:

第二执行单元,用于当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第二跳转指令,若所述业务需求确定为执行原函数,则执行所述第二跳转指令,所述第二跳转指令用于跳转至所述原函数。

b11、根据b10所述的装置,

所述判断单元,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

b12、根据b11所述的装置,所述装置还包括:

存储单元,用于将解析后的参数存储在预置线程对应的局部变量中,并根据所述参数将所述局部变量中的元素转换为对应的数据类型指针,传递至java层,所述参数包括转换格式信息、参数传递顺序信息、参数类型信息。

b13、根据b12所述的装置,

所述第二执行单元,具体用于当原函数通过hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的jmp指令。

b14、根据b8-b13任一项所述的装置,所述装置还包括:

重置单元,用于将所述转换格式标识进行重置。

c15、一种存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如a1-a7中任一项所述的程序调用的优化方法对应的操作。

d16、一种终端,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如a1-a7中任一项所述的程序调用的优化方法对应的操作。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1