[发明专利]程序调用的优化方法及装置有效
申请号: | 201711160146.2 | 申请日: | 2017-11-20 |
公开(公告)号: | CN107908391B | 公开(公告)日: | 2021-06-04 |
发明(设计)人: | 任太胜;易新;王浩 | 申请(专利权)人: | 北京奇虎科技有限公司 |
主分类号: | G06F8/20 | 分类号: | G06F8/20;G06F8/41;G06F9/455 |
代理公司: | 北京律诚同业知识产权代理有限公司 11006 | 代理人: | 王玉双 |
地址: | 100088 北京市西城区新*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序 调用 优化 方法 装置 | ||
本发明公开了一种程序调用的优化方法及装置,涉及一种应用开发技术领域,主要目的在于解决现有在函数调用时,会出现已格式优化的本地函数调用未格式优化的解释函数,通过桥接函数进行调用时产生一级一级的栈,使得Hook函数钩取时,已格式优化的本地函数与未格式优化的解释函数无法实现调用的问题。主要技术方案:当触发调用目标函数操作时,判断原函数是否执行挂钩操作;若所述原函数执行所述挂钩操作,则通过跳转模板以及结合桥接函数调用所述目标函数,所述跳转模板用于对所述目标函数进行格式优化。主要用于程序调用的优化。
技术领域
本发明涉及一种应用开发技术领域,特别是涉及一种程序调用的优化方法及装置。
背景技术
随着操作系统应用开发技术的快速发展,使用虚拟化技术对操作系统底层进行处理、开发以及成为主流手段。其中,安卓运行时(Android runtime,ART)虚拟机区别于传统的Dalvik虚拟机,使用预编译技术取代Dalvik中的及时编译技术,加快了应用程序的启动和执行。
目前,由于安卓4.4之后的版本中,ART虚拟机在使用函数调用来处理多开应用的业务时,采用本地函数执行及解释函数执行并存的方式,ART虚拟机采用桥接函数来实现本地函数调用解释函数以及解释函数调用本地函数,但是,在函数调用时,会出现已格式优化的本地函数调用未格式优化的解释函数,如Art虚拟机中的native层Method1,调用解释器中的.dex格式的Method2,通过桥接函数进行调用时产生一级一级的栈,使得Hook函数钩取时,已格式优化的本地函数与未格式优化的解释函数无法实现调用,因此,对程序调用的优化已经成为亟待解决的问题。
发明内容
有鉴于此,本发明提供一种程序调用的优化方法及装置,主要目的在于解决现有在函数调用时,会出现已格式优化的本地函数调用未格式优化的解释函数,通过桥接函数进行调用时产生一级一级的栈,使得Hook函数钩取时,已格式优化的本地函数与未格式优化的解释函数无法实现调用的问题。
依据本发明一个方面,提供了一种程序调用的优化方法,包括:
当触发调用目标函数操作时,判断原函数是否执行挂钩操作;
若所述原函数执行所述挂钩操作,则通过跳转模板以及结合桥接函数调用所述目标函数,所述跳转模板用于对所述目标函数进行格式优化。
进一步地,所述方法还包括:
若所述原函数没有执行钩取操作,则直接通过桥接函数调用所述目标函数。
进一步地,所述若所述原函数执行所述挂钩操作,则通过跳转模板以及结合桥接函数调用所述目标函数包括:
当所述原函数通过Hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识;
若存在跳转标识,则解析所述目标函数中的参数;
若所述参数的转换格式标识小于预设转换条件,则通过预置指向指令跳转至替换函数进行处理;
当所述替换函数执行完毕后,根据所述原函数的业务需求判断是否执行第一跳转指令,若所述业务需求确定为执行原函数,则执行所述第一跳转指令,所述第一跳转指令用于跳转至所述原函数;
通过结合桥接函数使得所述原函数调用所述目标函数。
进一步地,所述方法还包括:
若所述参数的转换合适标识大于预设转换条件,则执行第二跳转指令,所述第二跳转指令用于跳转至所述目标函数。
进一步地,所述当所述原函数通过Hook函数钩取目标函数时,判断所述目标函数中是否存在跳转标识包括:
当所述原函数通过Hook函数钩取目标函数时,判断所述目标函数中的头字节是否为占用特定字节的JMP指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇虎科技有限公司,未经北京奇虎科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711160146.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:睡眠监控
- 下一篇:监测婴幼儿情绪状态并确定与婴幼儿相关联的生理测量值