野指针处理方法、装置、设备及存储介质与流程

文档序号:33898179发布日期:2023-04-21 06:22阅读:53来源:国知局
野指针处理方法、装置、设备及存储介质与流程

本申请涉及计算机,具体而言,本申请涉及一种野指针处理方法、装置、设备及存储介质。


背景技术:

1、在i os系统中,常规的崩溃(crash)数量是很少的,一般情况下发生崩溃主要是因为不能稳定复现或缺乏有效信息,根据统计发现目前剩余的无法定位和解决的崩溃有60%以上都是由于野指针引起的。野指针是指向一个已删除的对象或者受限内存区域的指针,较为常见的是这个指针指向的内存在其他地方被回收了,但是这个指针不知道,因此依然还指向这块内存。

2、目前的i os系统可通过ma l l oc scr i bb l e和zomb i e objects两种方式探测野指针,ma l l oc scr i bb l e是申请内存后在申请的内存上填0xaa,内存释放后在释放的内存上填0x55,如果内存未被初始化就被访问,或者释放后被访问,就会抛出异常,并打印出相应的信息,调试者可以很轻松的找到异常发生位置;zomb i e是用生成僵尸对象来替换内存释放的实现,当对象引用计数为0的时候,将需要内存释放的对象转化为僵尸对象。如果之后再给这个僵尸对象发消息,则抛出异常,并打印出相应的信息,调试者可以很轻松的找到异常发生位置,但这两种方式只适用于编译器调试,适用范围小,对线上的野指针也无法探测。


技术实现思路

1、本申请的主要目的为提供一种野指针处理方法、装置、设备及存储介质,以适用于编译器调试,并实现对线上的野指针探测。

2、为了实现上述发明目的,本申请提供一种野指针处理方法,包括:

3、创建第一free函数及第二free函数,调用钩子函数将所述第一free函数绑定所述第二free函数的free符号,以使所述第一free函数指向所述第二free函数;其中,所述第一free函数管理的内存空间为指向目标对象占用的内存段对应的内存空间;

4、当监测到所述目标对象所指向的内存空间需要被释放,并调用所述第二free函数时,则确定指向所述目标对象的指针为野指针,判断是否开启野指针探测功能;

5、当判定开启野指针探测功能时,获取所述目标对象的类名,判断所述目标对象的类名是否在预设的白名单中;其中,所述白名单用于记录所需探测的野指针的名单;

6、当判定所述目标对象的类名不在预设的白名单时,调用所述第一free函数释放所述目标对象所指向的内存空间。

7、进一步地,所述判断所述目标对象的类名是否在预设的白名单中之后,还包括:

8、当判定所述目标对象的类名在预设的白名单时,将所述目标对象所指向的内存空间的数据填充为用于标识所述内存空间无法访问的数据,并为所述目标对象设置指定的消息转发类,同时将所述目标对象的类添加至预先创建的队列中。

9、进一步地,所述将所述目标对象的类添加至预设的队列中之后,还包括:

10、判断所述队列所保留类的内存空间或指针数量是否大于阈值;

11、若是,选取最先加入到所述队列中的内存块;

12、调用所述第一free函数释放所述内存块。

13、进一步地,所述判断是否开启野指针探测功能之后,还包括:

14、当判定未开启野指针探测功能时,则确定所述目标对象为已加入所述队列的对象;

15、调用所述第一free函数释放所述目标对象所指向的内存空间。

16、进一步地,所述为所述目标对象设置指定的消息转发类之后,还包括:

17、当监测到运行中的程序访问了所述目标对象所指向的内存空间时,通过所述消息转发类捕获所述目标对象的错误堆栈信息;其中,所述错误堆栈信息包括所述目标对象的类名、方法名;

18、将所述错误堆栈信息进行打包压缩后上传至日志系统。

19、进一步地,所述将所述错误堆栈信息进行打包压缩后上传至日志系统之后,还包括:

20、将所述目标对象的类名从所述白名单中移除,并调用所述第一free函数释放所述目标对象指向的内存空间,以使程序继续运行。

21、进一步地,所述判断所述目标对象的类名是否在预设的白名单中之前,还包括:

22、加载野指针自定义类,生成野指针探测的白名单及黑名单;其中,所述黑名单用于记录无需探测的野指针的名单。

23、本申请还提供一种野指针处理装置,所述装置包括:

24、创建模块,用于创建第一free函数及第二free函数,调用钩子函数将所述第一free函数绑定所述第二free函数的free符号,以使所述第一free函数指向所述第二free函数;其中,所述第一free函数管理的内存空间为指向目标对象占用的内存段对应的内存空间;

25、监测模块,用于当监测到所述目标对象所指向的内存空间需要被释放,并调用所述第二free函数时,则确定指向所述目标对象的指针为野指针,判断是否开启野指针探测功能;

26、判定模块,用于当判定开启野指针探测功能时,获取所述目标对象的类名,判断所述目标对象的类名是否在预设的白名单中;其中,所述白名单用于记录所需探测的野指针的名单;

27、调用模块,用于当判定所述目标对象的类名不在预设的白名单时,调用所述第一free函数释放所述目标对象所指向的内存空间。

28、本申请还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。

29、本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述任一项所述方法的步骤。

30、本申请所提供的一种野指针处理方法、装置、设备及存储介质,通过创建第一free函数及第二free函数,调用钩子函数将所述第一free函数绑定第二free函数的free符号,以使第一free函数指向第二free函数;当监测到目标对象所指向的内存空间需要被释放,并调用第二free函数时,则确定指向目标对象的指针为野指针,判断是否开启野指针探测功能;当判定开启野指针探测功能时,获取目标对象的类名,判断目标对象的类名是否在预设的白名单中,当判定目标对象的类名不在预设的白名单时,调用第一free函数释放目标对象所指向的内存空间,以在不连接编译器调试的情况下,也可以探测野指针;同时通过白名单设置,可以精确探测野指针的范围,降低线上探测对应用程序的影响,从而适用于编译器调试,并实现对线上的野指针探测。



技术特征:

1.一种野指针处理方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述判断所述目标对象的类名是否在预设的白名单中之后,还包括:

3.根据权利要求2所述的方法,其特征在于,所述将所述目标对象的类添加至预设的队列中之后,还包括:

4.根据权利要求2所述的方法,其特征在于,所述判断是否开启野指针探测功能之后,还包括:

5.根据权利要求2所述的方法,其特征在于,所述为所述目标对象设置指定的消息转发类之后,还包括:

6.根据权利要求5所述的方法,其特征在于,所述将所述错误堆栈信息进行打包压缩后上传至日志系统之后,还包括:

7.根据权利要求1所述的方法,其特征在于,所述判断所述目标对象的类名是否在预设的白名单中之前,还包括:

8.一种野指针处理装置,其特征在于,包括:

9.一种计算机设备,其特征在于,包括:

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现权利要求1-7任一项所述的野指针处理方法。


技术总结
本申请为计算机技术领域,本申请提供了一种野指针处理方法、装置、设备及存储介质,其中,该方法包括:创建第一free函数及第二free函数,调用钩子函数将所述第一free函数绑定第二free函数的free符号,以使第一free函数指向第二free函数;当监测到目标对象所指向的内存空间需要被释放,调用第二free函数时,确定指向目标对象的指针为野指针,判断是否开启野指针探测功能;当判定开启野指针探测功能时,获取目标对象的类名,判断目标对象的类名是否在预设的白名单中,当判定目标对象的类名不在预设的白名单时,调用第一free函数释放目标对象所指向的内存空间,以适用于编译器调试,实现对线上的野指针探测。

技术研发人员:王恺靖,马克
受保护的技术使用者:深圳依时货拉拉科技有限公司
技术研发日:
技术公布日:2024/1/11
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1