一种任务栈溢出检测方法、装置、设备及存储介质制造方法及图纸

技术编号:39417184 阅读:15 留言:0更新日期:2023-11-19 16:07
本发明专利技术实施例提供了一种任务栈溢出检测方法、装置、设备及存储介质,所述方法包括:根据当前任务的任务栈的起始地址和栈空间大小获得所述任务栈的至少一个栈顶保护地址和至少一个栈底保护地址;把所述栈顶保护地址和所述栈底保护地址设置到当前的硬件观察点寄存器中,并把相应的硬件观察点设置为读写观察点;当所述任务栈地址溢出时,所述硬件观察点触发观察点读或写异常。本发明专利技术实施例的技术方案采用硬件观察点检测任务栈是否发生栈溢出,有效提高读栈或写栈溢出检测的时效性,缩短栈溢出问题排查时间,并且结合栈回溯能准确的定位产生栈溢出的程序位置。位产生栈溢出的程序位置。位产生栈溢出的程序位置。

【技术实现步骤摘要】
一种任务栈溢出检测方法、装置、设备及存储介质


[0001]本专利技术涉及操作系统领域,尤其涉及一种任务栈溢出检测方法、装置、设备及存储介质。

技术介绍

[0002]在操作系统的运行过程中,栈溢出是导致操作系统不稳定的重要原因。因为堆栈溢出可能不会立即导致程序崩溃,导致栈溢出具有偶现的特点,往往很难找到导致问题的具体原因,导致系统的不稳定性。
[0003]在现有技术中,通常采用如下两种方式进行栈溢出检测:
[0004]●
软件预设检测
[0005]软件预设检测法就是在堆栈的末端规定一段内存区域,然后在程序运行前先采用特殊的魔数值对该部分内存区域进行填充,系统软件定时或者定期的比对这一部分规定的内存区域与所设置的特殊值是否一致来判定是否发生栈溢出。
[0006]通过这种方法,虽然能检测到是否出现栈溢出,但由于需要在系统运行的时候通过检测魔数有没有改变来判定是否出现溢出,此时距离栈溢出已经有一段时间,有时候由于较严重的堆栈溢出直接会导致程序卡死而来不及检测,甚至大数组局部变量直接跳过预设值区域,因此,现有方案不能及时的检测出栈溢出,导致栈溢出的排查时间较长。
[0007]·
MMU检测法
[0008]采用内存管理单元来检测任务栈或中断栈是否发生溢出。当内存管理器件检测到任务栈或中断栈发生溢出时,内存管理器件立刻触发内存访问异常,通过内存管理器件这种硬件的方式来检测栈溢出。
[0009]但是该方案无法检测栈上溢,且严重浪费堆栈区域,因为需要一个单独的页来设置属性为只读,当访问该区域时触发内存访问异常。

技术实现思路

[0010]有鉴于此,本专利技术实施例提供了一种任务栈溢出检测方法、装置、设备及存储介质,所述方法包括:根据当前任务的任务栈的起始地址和栈空间大小获得所述任务栈的至少一个栈顶保护地址和至少一个栈底保护地址;把所述栈顶保护地址和所述栈底保护地址设置到当前的硬件观察点寄存器中,并把相应的硬件观察点设置为读写观察点;当所述任务栈地址溢出时,所述硬件观察点触发观察点读或写异常。本专利技术实施例的技术方案采用硬件观察点检测任务栈是否发生栈溢出,有效提高读栈或写栈溢出检测的时效性,缩短栈溢出问题排查时间,并且结合栈回溯能准确的定位产生栈溢出的程序位置。
[0011]第一方面,本专利技术实施例提供了一种任务栈溢出检测方法,包括:根据当前任务的任务栈的起始地址和栈空间大小获得所述任务栈的至少一个栈顶保护地址和至少一个栈底保护地址;把所述栈顶保护地址和所述栈底保护地址设置到当前的硬件观察点寄存器中,并把相应的硬件观察点设置为读写观察点;当所述任务栈地址溢出时,所述硬件观察点
触发观察点读或写异常。
[0012]由上,采用硬件观察点检测任务栈是否发生栈溢出,有效提高读栈或写栈溢出检测的时效性,缩短栈溢出问题排查时间,并且结合栈回溯能准确的定位产生栈溢出的程序位置。
[0013]在第一方面的一种可能实施方式中,所述当前任务运行在物理CPU核上时,所述当前的硬件观察点寄存器为该物理CPU核的硬件观察点寄存器;所述当前任务运行在虚拟CPU核上时,所述当前的硬件观察点寄存器为该虚拟CPU核的硬件观察点寄存器。
[0014]由上,硬件观察点可以为物理CPU核或虚拟CPU核,从而支持多种场景的栈溢出,包括运行在物理CPU核上任务或分区、运行在分区的虚拟CPU核上的任务。
[0015]在第一方面的一种可能实施方式中,还包括:当所述硬件观察点触发观测点异常时,通过栈回溯定位栈溢出的指令位置。
[0016]由上,通过栈回溯调用函数栈,从而以准确定位任务栈溢出的指令位置。
[0017]在第一方面的一种可能实施方式中,还包括:当创建所述当前任务时,分配其所述任务栈的起始地址和栈空间大小,并保存在其任务控制块中;当所述当前任务为通过切换运行时,从其任务控制块中获得所述任务栈的起始地址和栈空间大小。
[0018]由上,通过在任务控制块中保存任务栈的起始地址和栈空间大小,支持在切换时设置任务栈的栈顶保护地址和栈底保护地址。
[0019]在第一方面的一种可能实施方式中,所述栈顶保护地址的最小值为所述起始地址与第一设定值的差,所述栈底保护地址的最大值为栈底地址与第一设定值的和,所述栈底地址为所述起始地址减去所述栈空间大小。
[0020]由上,任务栈的栈顶保护地址小于任务栈的起始地址,栈底保护地址大于栈底地址之间,从而保护任何任务栈的溢出。
[0021]在第一方面的一种可能实施方式中,第一设定值根据当前任务运行的操作系统的位数确定。
[0022]由上,根据操作系统的位数确定第一设定值,使栈顶保护地址和栈底保护地址与操作系统寻址的粒度匹配。
[0023]在第一方面的一种可能实施方式中,当包括多个栈顶保护地址时,相邻的栈顶保护地址的间隔根据任务栈的栈元素大小设置;当包括多个栈底保护地址时,相邻的栈底保护地址的间隔根据任务栈的栈元素大小设置。
[0024]由上,根据设置相邻保护地址的间隔,从而使用最小的保护地址资源实现栈溢出保护。
[0025]第二方面,本专利技术实施例提供了一种任务栈溢出检测装置,包括:保护地址获得模块,用于根据当前任务的任务栈的起始地址和栈空间大小获得所述任务栈的至少一个栈顶保护地址和至少一个栈底保护地址;观察点设置模块,用于把所述栈顶保护地址和所述栈底保护地址设置到当前的硬件观察点寄存器中,并把相应的硬件观察点设置为读写观察点;栈溢出检测模块,用于当所述任务栈地址溢出时,所述硬件观察点触发观察点读或写异常。
[0026]由上,采用硬件观察点检测任务栈是否发生栈溢出,有效提高读栈或写栈溢出检测的时效性,缩短栈溢出问题排查时间,并且结合栈回溯能准确的定位产生栈溢出的程序
位置。
[0027]在第二方面的一种可能实施方式中,所述当前任务运行在物理CPU核上时,所述当前的硬件观察点寄存器为该物理CPU核的硬件观察点寄存器;所述当前任务运行在虚拟CPU核上时,所述当前的硬件观察点寄存器为该虚拟CPU核的硬件观察点寄存器。
[0028]由上,硬件观察点可以为物理CPU核或虚拟CPU核,从而支持多种场景的栈溢出,包括运行在物理CPU核上任务或分区、运行在分区的虚拟CPU核上的任务。
[0029]在第二方面的一种可能实施方式中,还包括栈溢出定位模块,用于当所述硬件观察点触发观测点异常时,通过栈回溯定位栈溢出的指令位置。
[0030]由上,通过栈回溯调用函数栈,从而以准确定位任务栈溢出的指令位置。
[0031]在第二方面的一种可能实施方式中,还包括栈地址分配模块,用于当创建所述当前任务时,分配其所述任务栈的起始地址和栈空间大小,并保存在其任务控制块中;栈地址分配模块还用于当所述当前任务为通过切换运行时,从其任务控制块中获得所述任务栈的起始地址和栈空间大小。
[0032]由上,通过在任务控制块中保存任务栈的起始地址和栈空间大小,支持在切换时设置任本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种任务栈溢出检测方法,其特征在于,包括:根据当前任务的任务栈的起始地址和栈空间大小获得所述任务栈的至少一个栈顶保护地址和至少一个栈底保护地址;把所述栈顶保护地址和所述栈底保护地址设置到当前的硬件观察点寄存器中,并把相应的硬件观察点设置为读写观察点;当所述任务栈地址溢出时,所述硬件观察点触发观察点读或写异常。2.根据权利要求1所述方法,其特征在于,所述当前任务运行在物理CPU核上时,所述当前的硬件观察点寄存器为该物理CPU核的硬件观察点寄存器;所述当前任务运行在虚拟CPU核上时,所述当前的硬件观察点寄存器为该虚拟CPU核的硬件观察点寄存器。3.根据权利要求1所述方法,其特征在于,还包括:当所述硬件观察点触发观测点异常时,通过栈回溯定位栈溢出的指令位置。4.根据权利要求1所述方法,其特征在于,还包括:当创建所述当前任务时,分配其所述任务栈的起始地址和栈空间大小,并保存在其任务控制块中;当所述当前任务为通过切换运行时,从其任务控制块中获得所述任务栈的起始地址和栈空间大小。5.根据权利要求1所述方法,其特征在于,所述栈顶保护地址的最小值为所述起始地址与第一设定值的差,所述栈底保护地址的最大值为栈底地址与第...

【专利技术属性】
技术研发人员:彭元志
申请(专利权)人:科东广州软件科技有限公司
类型:发明
国别省市:

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

1