[发明专利]一种函数挂钩实现方法、装置和存储介质有效
申请号: | 201810041219.4 | 申请日: | 2018-01-16 |
公开(公告)号: | CN110046497B | 公开(公告)日: | 2023-06-20 |
发明(设计)人: | 刘华星 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F21/54 | 分类号: | G06F21/54 |
代理公司: | 深圳翼盛智成知识产权事务所(普通合伙) 44300 | 代理人: | 黄威 |
地址: | 518057 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 函数 挂钩 实现 方法 装置 存储 介质 | ||
1.一种函数挂钩实现方法,其特征在于,所述方法包括:
在ART系统中创建空的方法对象,并将被挂钩函数的函数信息备份至所述方法对象中,所述函数信息包括所述被挂钩函数的头两条指令,所述ART系统为安卓应用运行系统;
将所述被挂钩函数中的头两条指令修改为跳转指令,所述跳转指令用于指示跳转至执行自定义挂钩函数;
在所述方法对象中设置回调指令,所述回调指令位于所述头两条指令之后,用于指示跳转执行所述被挂钩函数中所述头两条指令的后续指令;
获取所述被挂钩函数的函数位置属性相对于所述被挂钩函数头的第一地址偏移;
根据所述第一地址偏移、以及所述被挂钩函数的调用地址属性相对于所述函数位置属性的第二偏移值,获取所述被挂钩函数的调用地址属性相对于所述被挂钩函数头的第三地址偏移;
根据所述第三地址偏移获取所述被挂钩函数的调用地址属性;
将所述被挂钩函数的调用地址属性修改为所述自定义挂钩函数的调用地址属性,所述被挂钩函数的调用地址属性保存有所述被挂钩函数的函数入口地址;
当调用所述被挂钩函数时,根据所述跳转指令跳转至执行所述自定义挂钩函数;
在所述自定义挂钩函数执行完成时,跳转至执行所述方法对象中的所述头两条指令,并根据所述回调指令跳转至执行所述被挂钩函数中的所述后续指令。
2.如权利要求1所述的函数挂钩实现方法,其特征在于,所述函数信息还包括所述被挂钩函数的函数头信息,所述方法对象的函数头信息为所述被挂钩函数的函数头信息;
在将被挂钩函数的函数信息备份至所述方法对象中之后,所述函数挂钩实现方法还包括:
根据所述被挂钩函数的函数入口地址和所述方法对象的函数入口地址,对所述方法对象的函数头信息中的函数符号表偏移进行修正。
3.如权利要求1所述的函数挂钩实现方法,其特征在于,在ART系统中创建空的方法对象,包括:
在ART系统创建一个类,并在所述类中创建两个空的测试方法对象;
获取所述测试方法对象之间的地址差;
根据所述地址差在所述ART系统中创建空的方法对象。
4.如权利要求1所述的函数挂钩实现方法,其特征在于,所述函数挂钩实现方法还包括:
在处理堆栈信息时,判断寄存器参数值是否落入所述被挂钩函数的指令地址范围内;
若是,则根据所述方法对象与被挂钩函数之间的入口地址差,对所述寄存器参数值进行修正。
5.如权利要求1所述的函数挂钩实现方法,其特征在于,所述ART系统包括本地层和应用层;所述在ART系统中创建空的方法对象,并将被挂钩函数的函数信息备份至所述方法对象中,包括:
在ART系统的本地层创建空的方法对象;
将所述被挂钩函数的函数信息备份至本地层的所述方法对象;
将所述方法对象对应的指针信息保存在所述应用层。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810041219.4/1.html,转载请声明来源钻瓜专利网。