[发明专利]一种IOS运行异常的保护方法、装置、终端设备及存储介质有效
申请号: | 201811143337.2 | 申请日: | 2018-09-28 |
公开(公告)号: | CN109408265B | 公开(公告)日: | 2022-05-10 |
发明(设计)人: | 陈俊城 | 申请(专利权)人: | 广州虎牙信息科技有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07;G06F11/30 |
代理公司: | 北京博思佳知识产权代理有限公司 11415 | 代理人: | 林祥 |
地址: | 511446 广东省广州市番禺区南村镇万博二*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 ios 运行 异常 保护 方法 装置 终端设备 存储 介质 | ||
1.一种IOS运行异常的保护方法,其特征在于,包括:
接收指令,判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、执行指令的方法名称和当前页面的类名。
2.根据权利要求1所述的方法,其特征在于,所述判断是否存在执行指令的方法,具体包括:
调用Objc_msgSend方法在目标类的方法列表中查找与所述指令对应的所述执行指令的方法;
若存在所述执行指令的方法,则使用所述执行指令的方法执行指令。
3.根据权利要求2所述的方法,其特征在于,所述调用Objc_msgSend方法在所述方法列表中查找与所述指令对应的所述执行指令的方法,包括:
若存在所述执行指令的方法,将存放所述指令的入口地址与所述执行指令的方法进行动态绑定;
objc_msgSend将其在目标类中查找到的所述执行指令的方法缓存在映射表中,所述映射表用来存放所述执行指令的方法和所述指令的入口地址的映射关系;
当再次接收到所述指令时,从所述映射表中调用所述执行指令的方法。
4.根据权利要求1所述的方法,其特征在于,若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器,具体包括:
若所述目标类中不存在所述执行指令的方法,沿着继承体系在当前目标类的父类中继续查找,所述目标类继承于所述父类;
若在所述父类中找到与所述指令对应的所述执行指令的方法,则使用所述执行指令的方法执行指令并停止查找所述执行指令的方法;
若所述父类中仍不存在所述执行指令的方法,则在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器。
5.根据权利要求1所述的方法,其特征在于,所述获取并保存执行指令时所有线程的方法调用栈,具体包括:
通过task_threads函数获取所述所有线程;
通过帧指针和栈指针获取所述所有线程的方法调用栈;
将获取到的所述所有线程的方法调用栈保存在记录表中。
6.一种IOS运行异常的保护装置,其特征在于,包括:
判断模块,被配置为判断是否存在执行指令的方法;
转发模块,被配置为若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
匹配模块,被配置为在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取模块,被配置为获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
发送模块,被配置为将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、执行指令的方法名称和当前页面的类名。
7.根据权利要求6所述的装置,其特征在于,所述判断是否存在执行指令的方法,具体包括:
接收指令,调用Objc_msgSend方法在目标类的方法列表中查找与所述指令对应的所述执行指令的方法;
若存在所述执行指令的方法,则使用所述执行指令的方法执行指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州虎牙信息科技有限公司,未经广州虎牙信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811143337.2/1.html,转载请声明来源钻瓜专利网。