一种野指针的检测定位方法和装置制造方法及图纸

技术编号:33204282 阅读:87 留言:0更新日期:2022-04-24 00:47
本发明专利技术公开了一种野指针的检测定位方法和装置,方法包括:创建并初始化野指针信息表;释放内存后,解除虚拟内存与物理内存之间的映射关系,将已解除映射关系的虚拟内存页面属性上设置禁止页面映射的标记;野指针信息表中存入带有禁止页面映射标记的虚拟内存页面和虚拟内存页面对应的虚拟内存地址;若访问未映射到物理内存的虚拟内存页面,虚拟内存页面的虚拟内存地址存在于野指针信息表中且用户访问的虚拟内存页面属性带有禁止页面映射的标记,则存在野指针,并通过虚拟内存页面对应的虚拟内存地址对野指针进行定位和处理。在不修改软件代码的前提下,实现对操作系统中是否存在野指针的检测以及快速定位出野指针出现的位置。指针的检测以及快速定位出野指针出现的位置。指针的检测以及快速定位出野指针出现的位置。

【技术实现步骤摘要】
一种野指针的检测定位方法和装置


[0001]本专利技术属于网络通信
,更具体地,涉及一种野指针的检测定位方法和装置。

技术介绍

[0002]内存作为操作系统的一种重要的基础资源,在程序的运行过程中,内存的申请释放是必不可少的流程之一,操作系统中用户申请使用的内存主要分为堆内存和栈内存,堆内存主要是动态申请的内存,栈内存主要是局部变量或者寄存器在线程栈上使用的内存,例如通过mallocap向操作系统申请内存,通过free/munmap向操作系统释放内存,这个流程属于堆内存的申请和释放流程,本专利主要涉及这个流程。
[0003]随着技术的发展,软件操作系统越来越庞大,对内存的申请、操作、释放等操作亦变得越来越复杂。正常的内存操作流程为内存申请

内存读写

内存释放,当用户由于程序执行顺序的原因,如果在内存释放之后继续读写内存的情况,就会出现野指针。野指针的情况可能对程序带来灾难性的问题,会导致用户数据不一致,访问非法指针导致程序崩溃等,这种问题往往隐蔽性比较强。由于现在的软件代码量大,而且流程复杂,简单的通过走读代码很难发现问题。
[0004]目前使用的内存检测工具中,Asan(Address sanitizer)是一个效率非常高的内存检测工具,能够检测堆内存越界,栈越界,野指针等内存问题。主要是根据用户访问的内存和影子内存进行比较,如果访问的内存和影子内存属性一致,则继续,否则抛出异常。Asan检测方法无法检测到,例如用户A申请了内存,然后用户A释放该内存地址,然后又被用户B申请了内存,之后用户A又使用了已经释放的地址,这种情况Asan无法检测到A用户存在野指针的情况。(野指针:在内存释放之后由于程序流程的原因继续读写内存)
[0005]由于应用进程在操作内存后,会进行内存的释放操作,如果应用进程在释放内存后继续操作内存,操作系统中会出现野指针,同时导致其他用户的数据异常或者操作系统崩溃,操作系统崩溃后将很难对野指针进行定位;而且在软件开发的后期或者软件维护阶段,针对如何定位并解决操作系统中存在的野指针问题,将会费时费力,如何在不修改软件代码的情况下,能够快速地定位此类原因,成为亟待需要解决的问题。
[0006]鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。

技术实现思路

[0007]针对现有技术的以上缺陷或改进需求,本专利技术提供了一种野指针的检测定位方法和装置,其目的在于判断操作系统中是否存在的野指针并对野指针进行定位和处理,由此解决操作系统中会发生野指针的技术问题。
[0008]为实现上述目的,按照本专利技术的一个方面,提供了一种野指针的检测定位方法,方法包括:
[0009]创建并初始化野指针信息表;
[0010]释放内存后,解除虚拟内存与物理内存之间的映射关系,将已解除映射关系的虚拟内存页面属性上设置禁止页面映射的标记;
[0011]所述野指针信息表中存入带有禁止页面映射标记的所述虚拟内存页面和所述虚拟内存页面对应的虚拟内存地址;
[0012]若访问未映射到物理内存的虚拟内存页面,所述虚拟内存页面的虚拟内存地址存在于所述野指针信息表中且用户访问的虚拟内存页面属性带有禁止页面映射的标记,则存在野指针,并通过所述虚拟内存页面对应的虚拟内存地址对野指针进行定位和处理。
[0013]优选地,所述创建并初始化野指针信息表,具体方法包括:
[0014]创建TCB控制块,在所述TCB控制块中创建野指针信息表,所述野指针信息表信息包括虚拟内存地址,虚拟内存地址长度和虚拟内存页面属性中的一种或多种;
[0015]创建完成所述野指针信息表后,初始化所述野指针信息表。
[0016]优选地,所述释放内存后,解除虚拟内存与物理内存之间的映射关系,具体过程包括:
[0017]释放内存时,操作系统调用内存申请接口进行内存释放,所述操作系统从用户态地址空间切换到内核态地址空间;
[0018]所述操作系统在内核态地址空间中解除虚拟内存和物理内存的映射关系,所述物理内存释放给所述操作系统,所述虚拟内存留在进程空间中。
[0019]优选地,所述野指针信息表中存入带有禁止页面映射标记的所述虚拟内存页面和所述虚拟内存页面对应的虚拟内存地址,具体方法包括:
[0020]将所述虚拟内存页面的所述虚拟内存地址以及所述虚拟内存地址长度保存于所述野指针信息表中;
[0021]在所述野指针信息表中,将与物理内存已解除映射关系的虚拟内存页面属性设置为禁止页面与物理内存进行映射。
[0022]优选地,所述若访问未映射到物理内存的虚拟内存页面,判断是否存在野指针的方法包括:
[0023]判断访问的虚拟内存地址是否已存在于所述野指针信息表中;
[0024]若所述虚拟内存地址不存在于所述野指针信息表中,判断为正常操作流程;
[0025]若所述虚拟内存地址存在于所述野指针信息表中,判断所述用户访问的虚拟内存页面属性是否带有禁止页面与物理内存进行映射的标记;
[0026]若所述用户访问的虚拟内存页面属性不带有禁止页面与物理内存进行映射的标记,判断为正常操作流程;
[0027]若所述用户访问的虚拟内存页面属性带有禁止页面与物理内存进行映射的标记,判断存在野指针,并且将得到的所述野指针的函数栈信息记录到崩溃日志中。
[0028]优选地,若访问未映射到物理内存的虚拟内存页面,判断是否存在野指针的方法还包括:
[0029]所述用户访问的虚拟内存页面与物理内存不存在映射关系,且所述虚拟内存地址不存在于所述野指针信息表中,判断为正常操作流程。
[0030]优选地,所述将得到的所述野指针的函数栈信息记录到崩溃日志中,具体方法包括:
[0031]所述野指针的函数栈信息包括:野指针所指向的内存区域的内存分配函数的栈信息和内存释放函数的栈信息;
[0032]在崩溃日志中将野指针的函数栈信息作为线程,以设定名字命名所述线程,在所述线程下记录野指针所指向内存区域的内存分配函数的栈信息,和内存释放函数的栈信息。
[0033]优选地,所述通过所述虚拟内存页面对应的虚拟内存地址对野指针进行定位和处理,具体方法包括:
[0034]用户向所述操作系统申请信号,判断存在野指针后,所述操作系统向应用进程发送所述信号且附带所述应用进程的寄存器信息;
[0035]所述应用进程根据所述野指针信息表中对应的虚拟内存地址对野指针进行定位;
[0036]通过所述应用进程的寄存器信息,所述应用进程获取出线野指针的数据信息,发送给工程师处理。
[0037]优选地,方法还包括:
[0038]若所述用户访问的虚拟内存页面与物理内存若存在映射关系,判断为正常操作流程。
[0039]按照本专利技术的另一方面,提供了一种野指针的检测定位装置,装置包括:
[0040]至少一个处理器;以及,与所述至少一个处理器通信连接的存储器本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种野指针的检测定位方法,其特征在于,方法包括:创建并初始化野指针信息表;释放内存后,解除虚拟内存与物理内存之间的映射关系,将已解除映射关系的虚拟内存页面属性上设置禁止页面映射的标记;所述野指针信息表中存入带有禁止页面映射标记的所述虚拟内存页面和所述虚拟内存页面对应的虚拟内存地址;若访问未映射到物理内存的虚拟内存页面,所述虚拟内存页面的虚拟内存地址存在于所述野指针信息表中且用户访问的虚拟内存页面属性带有禁止页面映射的标记,则存在野指针,并通过所述虚拟内存页面对应的虚拟内存地址对野指针进行定位和处理。2.如权利要求1所述的野指针的检测定位方法,其特征在于,所述创建并初始化野指针信息表,具体方法包括:创建TCB控制块,在所述TCB控制块中创建野指针信息表,所述野指针信息表信息包括虚拟内存地址,虚拟内存地址长度和虚拟内存页面属性中的一种或多种;创建完成所述野指针信息表后,初始化所述野指针信息表。3.如权利要求1所述的野指针的检测定位方法,其特征在于,所述释放内存后,解除虚拟内存与物理内存之间的映射关系,具体过程包括:释放内存时,操作系统调用内存申请接口进行内存释放,所述操作系统从用户态地址空间切换到内核态地址空间;所述操作系统在内核态地址空间中解除虚拟内存和物理内存的映射关系,所述物理内存释放给所述操作系统,所述虚拟内存留在进程空间中。4.如权利要求1所述的野指针的检测定位方法,其特征在于,所述野指针信息表中存入带有禁止页面映射标记的所述虚拟内存页面和所述虚拟内存页面对应的虚拟内存地址,具体方法包括:将所述虚拟内存页面的所述虚拟内存地址以及所述虚拟内存地址长度保存于所述野指针信息表中;在所述野指针信息表中,将与物理内存已解除映射关系的虚拟内存页面属性设置为禁止页面与物理内存进行映射。5.如权利要求1所述的野指针的检测定位方法,其特征在于,所述若访问未映射到物理内存的虚拟内存页面,判断是否存在野指针的方法包括:判断访问的虚拟内存地址是否已存在于所述野指针信息表中;若所述虚拟内存地址不存在于所述野指针信息表中,判断为正常操作流程;若所述虚拟内存地址存在于所述...

【专利技术属性】
技术研发人员:石红伟杨红霞刘普昌陈彪
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1