一种栈溢出处理的方法及装置与流程

文档序号:16530878发布日期:2019-01-05 10:44阅读:416来源:国知局
一种栈溢出处理的方法及装置与流程

本申请涉及内存处理技术领域,特别是涉及一种栈溢出处理的方法以及一种栈溢出处理的装置。



背景技术:

在操作系统的运行过程中,栈溢出是导致操作系统不稳定的重要原因,由于栈溢出具有偶现的特点,往往很难找到导致问题的原因,导致产品研发周期的不确定性。

在现有技术中,通常采用如下方式进行栈溢出检测:

在进程的栈初始化的时候,按预设的字节对齐方式,用特定魔数(比如0x9527)将栈元素依次完成初始化;在系统运行的时候,通过守护进程,依次遍历各个进程的栈,检测栈元素的值是否等于初始化的魔数,求得被污染的元素个数所占栈大小的比例,即为栈使用量,根据栈使用量来判定是否发生栈溢出。

通过这种方法,虽然能检测到是否出现栈溢出,但由于需要在系统运行的时候通过检测魔数有没有改变来判定是否出现溢出,此时距离栈溢出已经有一段时间,因此,现有方案不能及时的检测出栈溢出,导致栈溢出的排查时间较长。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种栈溢出处理的方法和相应的一种栈溢出处理的装置。

为了解决上述问题,本申请实施例公开了一种栈溢出处理的方法,所述方法包括:

采用内存管理器件检测指定栈是否发生栈溢出;

当检测到所述指定栈发生栈溢出时,由所述内存管理器件触发内存访问中断。

优选地,在所述采用所述内存管理器件检测指定栈是否发生栈溢出的步骤之前,还包括:

获取所述指定栈的栈信息,所述栈信息包括所述指定栈的起始地址以及栈大小;

基于所述指定栈的起始地址以及栈大小,确定所述指定栈的栈底地址;

采用所述内存管理器件,设置所述栈底地址的访问权限。

优选地,所述指定栈包括任务栈,所述获取所述指定栈的栈信息的步骤包括:

当检测到所述任务栈进行任务切换时,获取所述任务栈的栈信息。

优选地,所述指定栈包括中断栈,所述获取所述指定栈的栈信息的步骤包括:

从编译链接脚本程序中获取所述中断栈的栈信息。

优选地,所述采用所述内存管理器件检测指定栈是否发生栈溢出的步骤包括:

当检测到对栈底的访问操作时,判定所述指定栈发生栈溢出。

优选地,所述方法还包括:

获取所述栈溢出对应的上下文信息;

基于所述上下文信息,进行栈溢出问题排查。

优选地,所述内存管理器件包括内存保护单元mpu或内存管理单元mmu。

本申请实施例还公开了一种栈溢出处理的装置,所述装置包括:

栈溢出检测模块,用于采用内存管理器件检测指定栈是否发生栈溢出;

中断处理模块,用于当检测到所述指定栈发生栈溢出时,由所述内存管理器件触发内存访问中断。

优选地,所述装置还包括:

栈信息获取模块,用于获取所述指定栈的栈信息,所述栈信息包括所述指定栈的起始地址以及栈大小;

栈底地址确定模块,用于基于所述指定栈的起始地址以及栈大小,确定所述指定栈的栈底地址;

访问权限设置模块,用于采用所述内存管理器件,设置所述栈底地址的访问权限。

优选地,所述指定栈包括任务栈,所述栈信息获取模块还用于:

当检测到所述任务栈进行任务切换时,获取所述任务栈的栈信息。

优选地,所述指定栈包括中断栈,所述栈信息获取模块还用于:

从编译链接脚本程序中获取所述中断栈的栈信息。

优选地,所述栈溢出检测模块还用于:

当检测到对栈底的访问操作时,判定所述指定栈发生栈溢出。

优选地,所述装置还包括:

上下文信息获取模块,用于获取所述栈溢出对应的上下文信息;

问题排查模块,用于基于所述上下文信息,进行栈溢出问题排查。

优选地,所述内存管理器件包括内存保护单元mpu或内存管理单元mmu。

本申请实施例还公开了一种装置,包括:

一个或多个处理器;和

其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行上述的方法。

本申请实施例还公开了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行上述的方法。

本申请实施例包括以下优点:

本申请实施例可以通过内存管理器件来检测任务栈或中断栈是否发生溢出。当内存管理器件检测到任务栈或中断栈发生溢出时,内存管理器件立刻触发内存访问中断,通过内存管理器件这种硬件的方式来检测栈溢出,可以有效提高栈溢出检测的时效性,及时发现栈溢出等偶现性问题,缩短栈溢出问题排查时间。

附图说明

图1是本申请的一种栈溢出处理的方法实施例一的步骤流程图;

图2是本申请的一种栈溢出处理的方法实施例二的步骤流程图;

图3是本申请的一种栈溢出处理的装置实施例的结构框图;

图4本申请一种智能终端实施例的结构框图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

本申请实施例可以应用于安装有操作系统的计算设备中,该计算设备可以包括终端或服务器,该计算设备中可以包括内存管理器件。具体的,该内存管理器件可以用于对计算设备的内存进行管理,例如设置内存的访问权限、检测内存是否溢出、触发内存访问异常中断、进行内存异常处理等。

在本申请实施例中,该内存管理器件可以包括硬件器件和/或软件程序。

例如,该内存管理器件可以包括mpu(memoryprotectionunit,内存保护单元),mpu中一个域就是一些属性值以及其对应的一片内存,这些属性包括:起始地址、长度、读写权限以及缓存等。

又如,该内存管理器件可以包括mmu(memorymanagementunit,内存管理单元),mmu是中央处理器cpu中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址、以及提供硬件机制的内存访问授权、多用户多进程操作系统。

在一种实施方式中,该内存管理可以包括栈的管理,其中,栈是操作系统中抽象出来的一种先进后出的内存区域,主要用于局部变量和接口调用参数的自动存取。作为一种示例,栈可以包括任务栈和中断栈。

任务栈可以用于在任务切换时保存上下文信息。

中断栈可以用于产生中断时保存上下文信息。

本申请实施例可以应用于互联网中的内存管理,也可以应用于物联网(internetofthings,简称iot)中的内存管理。

以下以物联网的内存管理为例,对本申请实施例进行详细说明:

参照图1,示出了本申请的一种栈溢出处理的方法实施例一的步骤流程图,本申请实施例具体可以包括如下步骤:

步骤101,采用内存管理器件检测指定栈是否发生栈溢出;

在本申请实施例中,计算设备所使用的操作系统可以包括rtos(realtimeoperatingsystem,实时操作系统)。

在一种实施方式中,本申请实施例所说的指定栈可以包括rtos系统中任务栈或中断栈。

步骤102,当检测到指定栈发生栈溢出时,由所述内存管理器件触发内存访问中断。

本申请实施例可以通过内存管理器件来检测任务栈或中断栈是否发生溢出。当内存管理器件检测到任务栈或中断栈发生溢出时,内存管理器件立刻触发内存访问中断,通过内存管理器件这种硬件的方式来检测栈溢出,可以有效提高栈溢出检测的时效性,及时发现栈溢出等偶现性问题,缩短栈溢出问题排查时间。

参照图2,示出了本申请的一种栈溢出处理的方法实施例二的步骤流程图,本申请实施例具体可以包括如下步骤:

步骤201,获取指定栈的栈信息;

在具体实现中,rtos系统可以获取指定栈的栈信息,作为一种示例,该栈信息可以包括但不限于:指定栈的起始地址、栈大小、栈名称、任务名称等。

在本申请实施例的一种优选实施例中,若指定栈为任务栈,则步骤201进一步可以包括如下子步骤:当检测到所述任务栈进行任务切换时,获取所述任务栈的栈信息。

具体的,由于任务栈随着任务的切换而切换,因此,可以在检测到任务栈进行切换时,获得任务栈的栈信息。在具体实现中,若检测到系统调度的任务的指针发生变化时,则可以判定此时任务栈发生切换,此时,可以根据切换后的任务的指针所指向的地址,获得切换后的任务的数据结构,从该数据结构中获得栈信息。

在本申请实施例的另一种优选实施例中,若指定栈为中断栈,则步骤201进一步可以包括如下子步骤:从编译链接脚本程序中获取所述中断栈的栈信息。

具体的,物联网系统中共用一个中断栈,栈信息在系统编译链接脚本中声明,因此可以在系统编译前从编译链接脚本程序中获取中断栈的栈信息。

步骤202,基于所述指定栈的起始地址以及栈大小,确定所述指定栈的栈底地址;

在具体实现中,可以从栈信息中获得对应的栈的起始地址以及栈大小,并根据“栈的起始地址+栈大小”得到该栈的栈底地址。

在实际中,该栈底地址可以为栈增长方向的边缘。

步骤203,采用内存管理器件,设置所述栈底地址的访问权限;

在本申请实施例中,得到栈底地址以后,可以采用内存管理器件,设置栈底地址的访问权限,以对栈增长方向的边缘进行保护。

在具体实现中,可以对栈底地址对应的内存空间设置mpu保护,在mpu中设定该栈底地址的访问权限,作为一种示例,该访问权限可以包括:禁止读和/或禁止写和/或禁止执行代码等。或者,该访问权限也可以设定为禁止一切访问操作。

步骤204,当检测到对栈底的访问操作时,判定所述指定栈发生栈溢出;

具体的,当检测到针对栈底地址的访问操作时,则可以判定该任务栈或中断栈发生栈溢出。在实现中,因为已经限制了栈底的访问权限,当对栈底进行读或写或执行等操作时,则可以判定栈溢出。

步骤205,由所述内存管理器件触发内存访问中断;

在本申请实施例中,当检测到针对任务栈或中断栈的栈底的访问操作时,可以立刻触发内存访问异常的中断。

步骤206,获取所述栈溢出对应的上下文信息,并基于所述上下文信息,进行栈溢出问题排查。

当内存管理器件触发内存访问中断以后,操作系统执行中断异常处理函数以进行内存访问异常处理。

在内存访问异常处理的过程中,可以打印上下文信息,并根据该上下文信息进行异常分析,以进行问题排查。

作为一种示例,该上下文信息可以包括但不限于触发中断的任务标识、中断执行状态、函数调用栈信息等。

在本申请实施例中,可以通过mpu对栈增长方向的边缘进行保护,禁止读和/或写和/或执行等操作,在系统代码出现栈溢出时立刻触发内存访问中断,通过硬件中断的方式有效提高栈溢出检测的时效性,及时发现栈溢出等偶现性问题,缩短栈溢出问题排查时间。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。

参照图3,示出了本申请的一种栈溢出处理的装置实施例的结构框图,所述装置具体可以包括如下模块:

栈溢出检测模块301,用于采用内存管理器件检测指定栈是否发生栈溢出;

中断处理模块302,用于当检测到所述指定栈发生栈溢出时,由所述内存管理器件触发内存访问中断。

在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:

栈信息获取模块,用于获取所述指定栈的栈信息,所述栈信息包括所述指定栈的起始地址以及栈大小;

栈底地址确定模块,用于基于所述指定栈的起始地址以及栈大小,确定所述指定栈的栈底地址;

访问权限设置模块,用于采用所述内存管理器件,设置所述栈底地址的访问权限。

在本申请实施例的一种优选实施例中,所述指定栈包括任务栈,所述栈信息获取模块还用于:

当检测到所述任务栈进行任务切换时,获取所述任务栈的栈信息。

在本申请实施例的一种优选实施例中,所述指定栈包括中断栈,所述栈信息获取模块还用于:

从编译链接脚本程序中获取所述中断栈的栈信息。

在本申请实施例的一种优选实施例中,所述栈溢出检测模块301还用于:

当检测到对栈底的访问操作时,判定所述指定栈发生栈溢出。

在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:

上下文信息获取模块,用于获取所述栈溢出对应的上下文信息;

问题排查模块,用于基于所述上下文信息,进行栈溢出问题排查。

在本申请实施例的一种优选实施例中,所述内存管理器件包括内存保护单元mpu或内存管理单元mmu。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的系统。图4示意性地示出了可被用于实现本公开中所述的各个实施例的示例性系统(或装置)400。

对于一个实施例,图4示出了示例性系统400,该系统具有一个或多个处理器402、被耦合到(一个或多个)处理器402中的至少一个的系统控制模块(芯片组)404、被耦合到系统控制模块404的系统存储器406、被耦合到系统控制模块404的非易失性存储器(nvm)/存储设备408、被耦合到系统控制模块404的一个或多个输入/输出设备410,以及被耦合到系统控制模块406的网络接口412。

处理器402可包括一个或多个单核或多核处理器,处理器402可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,系统400能够作为本申请实施例中所述的浏览器。

在一些实施例中,系统400可包括具有指令的一个或多个计算机可读介质(例如,系统存储器406或nvm/存储设备408)以及与该一个或多个计算机可读介质相合并被配置为执行指令以实现模块从而执行本公开中所述的动作的一个或多个处理器402。

对于一个实施例,系统控制模块404可包括任意适当的接口控制器,以向(一个或多个)处理器402中的至少一个和/或与系统控制模块404通信的任意适当的设备或组件提供任意适当的接口。

系统控制模块404可包括存储器控制器模块,以向系统存储器406提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。

系统存储器406可被用于例如为系统400加载和存储数据和/或指令。对于一个实施例,系统存储器406可包括任意适当的易失性存储器,例如,适当的dram。在一些实施例中,系统存储器406可包括双倍数据速率类型四同步动态随机存取存储器(ddr4sdram)。

对于一个实施例,系统控制模块404可包括一个或多个输入/输出控制器,以向nvm/存储设备408及(一个或多个)输入/输出设备410提供接口。

例如,nvm/存储设备408可被用于存储数据和/或指令。nvm/存储设备408可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(hdd)、一个或多个光盘(cd)驱动器和/或一个或多个数字通用光盘(dvd)驱动器)。

nvm/存储设备408可包括在物理上作为系统400被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,nvm/存储设备408可通过网络经由(一个或多个)输入/输出设备410进行访问。

nvm/存储设备408还可以包括内存管理器件,该内存管理器件可以包括mpu或mmu等,用于对终端的内存进行管理,例如设置内存的访问权限、检测内存是否溢出、触发内存访问异常中断、进行内存异常处理等。

(一个或多个)输入/输出设备410可为系统400提供接口以与任意其他适当的设备通信,输入/输出设备410可以包括通信组件、音频组件、传感器组件等。网络接口412可为系统400提供接口以通过一个或多个网络通信,系统400可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合进行无线通信。

对于一个实施例,(一个或多个)处理器402中的至少一个可与系统控制模块404的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器402中的至少一个可与系统控制模块404的一个或多个控制器的逻辑封装在一起以形成系统级封装(sip)。对于一个实施例,(一个或多个)处理器402中的至少一个可与系统控制模块404的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器402中的至少一个可与系统控制模块404的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(soc)。

在各个实施例中,系统400可以但不限于是:浏览器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)。在各个实施例中,系统400可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统400包括一个或多个摄像机、键盘、液晶显示器(lcd)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(asic)和扬声器。

其中,如果显示器包括触摸面板,显示屏可以被实现为触屏显示器,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。

本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在终端设备时,可以使得该终端设备执行本申请实施例中各方法步骤的指令(instructions)。

在一个示例中提供了一种装置,包括:一个或多个处理器;和,其上存储的有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行如本申请实施例中的方法。

在一个示例中还提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行如本申请实施例中的方法。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本申请所提供的栈溢出的处理方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1