CN116627852B - 堆栈溢出的检测方法、装置和计算设备 - Google Patents

堆栈溢出的检测方法、装置和计算设备 Download PDF

Info

Publication number
CN116627852B
CN116627852B CN202310910815.2A CN202310910815A CN116627852B CN 116627852 B CN116627852 B CN 116627852B CN 202310910815 A CN202310910815 A CN 202310910815A CN 116627852 B CN116627852 B CN 116627852B
Authority
CN
China
Prior art keywords
detection area
stack
detection
data
overflow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310910815.2A
Other languages
English (en)
Other versions
CN116627852A (zh
Inventor
张恩勤
程雯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hefei Smart Chip Semiconductor Co ltd
Shanghai Sasha Mai Semiconductor Co ltd
Tianjin Smart Core Semiconductor Technology Co ltd
Suzhou Sasama Semiconductor Co ltd
Original Assignee
Hefei Smart Chip Semiconductor Co ltd
Shanghai Sasha Mai Semiconductor Co ltd
Tianjin Smart Core Semiconductor Technology Co ltd
Suzhou Sasama Semiconductor Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hefei Smart Chip Semiconductor Co ltd, Shanghai Sasha Mai Semiconductor Co ltd, Tianjin Smart Core Semiconductor Technology Co ltd, Suzhou Sasama Semiconductor Co ltd filed Critical Hefei Smart Chip Semiconductor Co ltd
Priority to CN202310910815.2A priority Critical patent/CN116627852B/zh
Publication of CN116627852A publication Critical patent/CN116627852A/zh
Application granted granted Critical
Publication of CN116627852B publication Critical patent/CN116627852B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明公开了堆栈溢出的检测方法、装置和计算设备。该堆栈溢出的检测方法包括:在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,该目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;基于目标检测区域对应的溢出风险等级对堆栈进行处理。通过上述方法只需检测少数检测区域的风险,不用每次对所有检测区域都做一次风险检测,便能确定堆栈溢出的风险,能够提高堆栈溢出的检测效率。并且,根据目标检测区域对应的溢出风险等级对堆栈进行处理,则在堆栈溢出风险不同的情况下,可以对堆栈采取不同的处理,提高了堆栈溢出处理的灵活性。

Description

堆栈溢出的检测方法、装置和计算设备
技术领域
本发明涉及软件测试技术领域,尤其涉及一种堆栈溢出的检测方法、装置和计算设备。
背景技术
检测堆栈是否溢出是软件测试中比较常见的问题。最简单的处理方式是通过软件的静态分析得到一个大概的软件运行过程中堆栈使用的估计值,然后对估计值乘以1.5或者2倍作为最终设定的堆栈空间大小,如果在试运行阶段发生程序异常,再做相应的调整。如果为了稳妥并且资源允许,可以设置更高倍数的堆栈空间以保证程序实际运行的安全,但通常情况下硬件资源是非常有限的,实际情况并不允许过多的分配堆栈空间。
针对这一问题,目前已有三种常见的处理方式,分别为堆栈限制寄存器方法、内存保护方法和软件预设检测方法,且软件预设检测方法较为常用。现有的软件预设检测方法主要是在堆栈的顶部设置一定的检测区域,在程序初始化时,对检测区域写入多个特定特征值,并定期将检测区域内的数据与特定特征值进行比对,在特定特征值的数量小于一定阈值时采取一定措施。
但上述方法在每次检查时都需要将多个特定特征值与检测区域内存储的数据一一比对,不仅浪费处理器的资源,而且需要消耗较长的时间,导致堆栈溢出的检测效率降低。
发明内容
为此,本发明提出了一种堆栈溢出的检测方法,还提出了一种堆栈溢出的检测装置、一种计算设备和一种计算机可读存储介质,旨在至少在一定程度上解决相关技术中堆栈溢出的检测效率降低的技术问题。
为达到上述目的,本发明第一方面实施例提出了一种堆栈溢出的检测方法,该方法包括:
在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;
基于目标检测区域对应的溢出风险等级,对堆栈进行处理。
根据本发明的一个实施例,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,包括:
以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据;
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域的上一个检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,确定第一检测区域是目标检测区域,其中,第一检测区域先于第一检测区域的上一个检测区域被写入数据。
根据本发明的一个实施例,在以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据之后,方法还包括:
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域与末位检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,其中,第一检测区域先于第一检测区域的下一个检测区域和末位检测区域被写入数据;
以第一检测区域的下一个检测区域为第二检测区域,获取第二检测区域当前存储的第二数据;
在第二数据与第二检测区域预先存储的特征数据相同的情况下,重新以上一个第一检测区域与当前的第一检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第二数据与第二检测区域预先存储的特征数据不同,确定第一检测区域是目标检测区域。
根据本发明的一个实施例,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之前,还包括:
在每个检测区域预先存储特征数据,其中,特征数据用于表征检测区域对应的溢出风险等级。
根据本发明的一个实施例,每个检测区域存储的特征数据包括深度值和特征值,深度值用于表征检测区域对应的溢出风险等级,特征数据的数据大小基于堆栈的存储空间确定。
根据本发明的一个实施例,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之后,还包括:
在多个检测区域中不存在特征未改变的检测区域的情况下,确定堆栈存在数据溢出。
根据本发明的一个实施例,方法还包括:
检测动态内存区域当前存储的数据与动态内存区域预先存储的特征数据是否相同,其中,动态内存区域设置在堆栈外部且与堆栈顶部相邻;
若是,将堆栈溢出的数据备份至动态内存区域;若否,采取相应的堆栈管理策略对堆栈进行管理。
为达到上述目的,本发明第二方面实施例提出了一种堆栈溢出的检测装置,该装置包括:
风险检测模块,被配置为在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;
风险处理模块,被配置为基于目标检测区域对应的溢出风险等级,对堆栈进行处理。
为达到上述目的,本发明第三方面实施例提出了一种计算设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时,实现上述第一方面所述的堆栈溢出的检测方法。
为达到上述目的,本发明第四方面实施例提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面所述的堆栈溢出的检测方法。
本发明实施例提供的堆栈溢出的检测方法,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;基于目标检测区域对应的溢出风险等级,对堆栈进行处理。通过上述方法在堆栈顶部划分了多个检测区域,并从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,则只需检测少数检测区域的风险,不用每次对所有检测区域都做一次风险检测,便能确定堆栈溢出的风险,能够提高堆栈溢出的检测效率。并且,根据目标检测区域对应的溢出风险等级对堆栈进行处理,则在堆栈溢出风险不同的情况下,可以对堆栈采取不同的处理,提高了堆栈溢出处理的灵活性。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
图1是根据现有技术提供的第一种堆栈溢出的检测方法的示意图;
图2是根据现有技术提供的第二种堆栈溢出的检测方法的示意图;
图3是根据现有技术提供的第三种堆栈溢出的检测方法的示意图;
图4是根据本发明实施例提供的一种堆栈溢出的检测方法的流程图;
图5是根据本发明实施例提供的一种内存区域划分示意图;
图6是根据本发明实施例提供的一种目标检测区域确定方法的流程图;
图7是根据本发明实施例提供的一种检测区域的示意图;
图8是根据本发明实施例提供的另一种目标检测区域确定方法的流程图;
图9是根据本发明实施例提供的另一种内存区域划分示意图;
图10是根据本发明实施例提供的一种堆栈溢出的检测装置的结构示意图;
图11是根据本发明实施例提供的一种计算设备的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
堆栈溢出是向一个有限的内存空间中写入了过长的数据,会破坏系统的内存空间,导致系统运行异常、死机或重启,即堆栈溢出可能是因为预先设置的内存空间不足造成的,因此需要检测堆栈是否存在溢出风险。
堆栈一般是用来存储一些临时数据,如局部变量,函数传递参数,函数返回值等,这些函数调用或者任务切换时需要保存的现场数据。一般应用中,堆栈里的数据会频繁有压进(push)和弹出(pop)的切换操作,在这个过程中,堆栈是一种软件运行过程中的共享内存资源。基于堆栈使用上的特点,一般情况下无法在软件设计初期准确设定堆栈空间大小,主要原因在于实际堆栈空间在程序运行过程中是动态变化的,除了局部变量可以在软件开发完成时事先获知,对于可变参数的函数,类似递归函数的函数嵌套,中断嵌套等等是无法在软件设计初期和开发过程中确定的,从而使得堆栈空间大小在软件开发结束后仍然无法确定。另一方面,由于系统内存的限制,堆栈本身不适合设置一个很大的空间,因此,如何设置合理的堆栈空间大小是系统软件设计中一个很关键的环节。
目前解决这一问题的主要方法包括以下三种:
图1是根据现有技术提供的第一种堆栈溢出的检测方法的示意图,即堆栈限制寄存器方法。如图1所示,将内存区域划分为堆栈区域和其他内存区域,并为堆栈区域设置边界寄存器,即堆栈上限寄存器和堆栈下限寄存器,每次使用堆栈时,硬件会根据边界寄存器的数值自动检测当前堆栈指针(SP,stack pointer)是否越界(即堆栈是否溢出),如果发生越界,将触发一定的异常中断,交给用户处理。
图2是根据现有技术提供的第二种堆栈溢出的检测方法的示意图,即内存保护方法。如图2所示,将内存区域划分为堆栈区域和其他内存区域,并在堆栈顶部设置检测区域(如MPU保护区域,Memory Protection Unit),通过MPU保护区域在堆栈顶部设置保护,当堆栈访问进入MPU保护区域时将触发MPU访问异常,通知用户程序进行处理。
图3是根据现有技术提供的第二种堆栈溢出的检测方法的示意图,即软件预设检测法。如图3所示,将内存区域划分为堆栈区域和其他内存区域,并在堆栈顶部划分检测区域,在软件初始化时,将检测区域预先写入多个特定特征值,该特定特征值可以是0×00000000或者0×12345678之类的特殊数据。系统软件中将有一个特定的堆栈检测程序定时检测检测区域的数据,当发现检测区域中特定特征值的数量减少到一定程度时,说明当前运行状态下堆栈空间不够,需要用户采取一定的保护或者应对措施。
但上述三种方法也各有一定的局限性:
(1)堆栈限制寄存器方法属于纯硬件方法,目前只有少数的处理器支持这一点;另外,由于堆栈访问是非常频繁的一种操作,而且一般情况下大多时候堆栈都处于安全区域,这种频繁的硬件检查机制将影响整体处理器的运行效率。
(2)内存保护方法也是硬件方法,目前有部分的处理器支持这一点;另外这一方法中对于检测区域的大小设置在初始化后是固定的,过大的检测区域设置会影响程序运行效率,过小的设置会有一定的漏检风险。
(3)软件预设检测法是纯软件方案,但是每次检查都需要将检测区域内的数据与预先存储的多个特定特征值进行一一比对,不仅浪费处理器的资源,而且需要消耗较长的时间,导致堆栈溢出的检测效率降低,并且,对于不同的堆栈溢出风险采取统一的处理方法,灵活性较低。
为此,本发明实施例提供了一种堆栈溢出的检测方法,能够解决上述技术问题,其具体实现可以参见下述各个实施例的相关描述。
图4是根据本发明实施例提供的一种堆栈溢出的检测方法的流程图,该堆栈溢出的检测方法可以包括如下步骤。
步骤401:在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据。
在使用堆栈的过程中,可能会存在堆栈溢出的风险,为了能够减少堆栈溢出的负面影响,可以在使用堆栈的过程中进行堆栈溢出检测,以便提前采取相应措施。并且,由于堆栈空间比较大,靠近堆栈底部和中部的区域是比较安全的,不会导致堆栈溢出,但堆栈顶部的区域比较危险,因此,可以对堆栈顶部的区域进行风险检测。但是,堆栈顶部的区域也可以细分为多个区域,越靠近堆栈顶部的区域,堆栈溢出的风险越大,因此,可以在堆栈顶部划分多个检测区域,并从当前堆栈指针指示的检测区域开始对多个检测区域进行风险检测。
需要说明的是,若当前堆栈指针指示的不是堆栈顶部的检测区域,说明堆栈溢出风险不大,可以不进行风险检测。即本方案的风险检测是在当前堆栈指针指示的区域是堆栈顶部的检测区域的情况下进行的。
在本发明实施例中,堆栈与任务是对应的,堆栈中可以存储任务相关的数据,当前堆栈指针指示的是堆栈当前的数据存储情况,但可能有些数据已经入栈后又出栈了,其也占据了堆栈空间,若仅根据堆栈当前的数据存储情况判断堆栈的溢出风险,而不关注堆栈历史的数据存储情况,可能会对堆栈的存储空间判断失误,若后续有相同或相似类型的任务,堆栈需要处理的任务数据的数据量与本次处理的数据量基本相同,便可能会出现堆栈空间不够,导致堆栈溢出、数据无法存储的问题。因此,需要根据堆栈的使用情况(包括当前和历史的使用情况)判断堆栈是否存在溢出风险,即根据堆栈在高峰期的使用情况检测堆栈的溢出风险。并且,对检测区域的风险检测是将检测区域当前存储的数据与预先存储的数据进行比对,以确定检测区域是否被使用过,进而确定出靠近堆栈顶部第一个未被使用过的检测区域,根据该检测区域的溢出风险等级对堆栈进行处理。
因此,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之前,还包括:在每个检测区域预先存储特征数据,其中,特征数据用于表征检测区域对应的溢出风险等级。并且,每个检测区域存储的特征数据包括深度值和特征值,深度值用于表征检测区域对应的溢出风险等级,特征数据的数据大小基于堆栈的存储空间确定。
具体实现中,可以在程序初始化时,将堆栈顶部划分为多个检测区域,在每个检测区域写入特征数据,特征数据的数据大小可以根据实际处理器的存储空间大小、堆栈的存储空间大小或者实际应用程序的复杂程度来确定。并且,堆栈顶部划分的检测区域的数量可以根据实际需求进行设置,不同检测区域中特征数据的数据大小可以相同也可以不同,不同检测区域中存储的特征数据可以相同也可以不同,本实施例对此不做限定。
在一些实施例中,特征数据可以包括深度值和特征值,深度值可以用于表征检测区域对应的溢出风险等级,且深度值与溢出风险等级可以呈正比,即深度值越大,溢出风险等级越大,或者,深度值也可以与溢出风险等级呈反比,即深度值越大,溢出风险等级越小。并且,深度值可以根据检测区域与堆栈底部的距离设置,检测区域距离堆栈底部越近,深度值越大,或者,检测区域距离堆栈底部越近,深度值越小。
示例性地,参见图5,图5是根据本发明实施例提供的一种内存区域划分示意图。在图5中,内存区域被划分为堆栈区域和其他内存区域,堆栈顶部被划分为15个不同深度的检测区域,根据检测区域深度不同,分别称为深度1检测区域、深度2检测区域、......、深度14检测区域和深度15检测区域。在该种情况下,检测区域的深度值越高表示有一定的安全边界,相对比较安全;深度值越小表示离堆栈顶部越近,堆栈溢出的风险越高。并且,每个检测区域存储有一条特征数据,每条特征数据可由m个32位数值组成,每个32位数值由深度值+特征值组成,高4位表示深度值,后28位表示特征值。如深度1检测区域存储的特征数据是0x11234567,其中第一个数字‘1’表示该检测区域的深度是1,后面的7个数字‘1234567’是特定的特征值。深度2检测区域存储的特征数据是0x21234567,深度14检测区域存储的特征数据是0xE1234567,深度15检测区域存储的特征数据是0xF1234567,并且,从深度1检测区域到深度15检测区域,堆栈溢出的风险逐渐降低。该图中将堆栈顶部划分为15个检测区域,表示该方法具有15级不同堆栈警戒线控制,可供用户选择采用不同的处理策略。
需要说明的是,图4中关于检测区域的数量、特征数据的位数、特征数据中深度值和特征值的位数均是一种示例,本发明并不限定这种划分为15个检测区域的方式、由32个数值组成特征数据的方式、以及4+28的深度值+特征值的拆解方式。
在本发明实施例中,可以从当前堆栈指针指示的检测区域开始,顺序对多个检测区域进行风险检测,或者,从当前堆栈指针指示的检测区域开始,采用二分法的形式对多个检测区域进行风险检测,直至确定目标检测区域。
在一些实施例中,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域的具体实现可以包括:
以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据;在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域的上一个检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,确定第一检测区域是目标检测区域,其中,第一检测区域先于第一检测区域的上一个检测区域被写入数据。
也就是说,可以先对当前堆栈指针指示的检测区域进行风险检测,若无风险,则检测其上一个检测区域,且以此类推,直至确定目标检测区域。
具体实现中,获取第一检测区域当前存储的第一数据,判断该第一数据与第一检测区域预先存储的特征数据是否相同,若是,确定该第一检测区域是特征数据未改变的目标检测区域;若否,说明该第一检测区域被写入数据,那么该第一检测区域以下的检测区域均被写入数据,但该第一检测区域以上的检测区域有可能被写入过数据,因此,可以继续检测第一检测区域的上一个检测区域当前存储的数据与预先存储的特征数据是否相同,直至确定第一个特征数据未改变即未被写入过数据的目标检测区域。
示例性地,参见图6,图6是根据本发明实施例提供的一种目标检测区域确定方法的流程图。确定当前堆栈指针指示的检测区域是深度n检测区域,获取深度n检测区域当前存储的第一数据,判断第一数据与深度n检测区域预先存储的特征数据是否相同,若是,确定深度n检测区域是目标检测区域;若否,将n替换为n-1,返回执行获取深度n检测区域当前存储的第一数据的步骤,直至确定目标检测区域。参见图7,图7是根据本发明实施例提供的一种检测区域的示意图,堆栈顶部包括深度1检测区域、深度2检测区域、......、深度15检测区域,假设当前堆栈指针指示的是深度n检测区域,深度n-1检测区域是更靠近堆栈顶部的检测区域。
例如,假设当前堆栈指针指示的检测区域是深度12检测区域,获取深度12检测区域当前存储的第一数据,将第一数据与深度12检测区域预先存储的特征数据进行比对,若相同,将深度12检测区域确定为目标检测区域;若不同,获取深度11检测区域当前存储的第一数据,将第一数据与深度11检测区域预先存储的特征数据进行比对,若相同,将深度11检测区域确定为目标检测区域,若不同,获取深度10检测区域当前存储的第一数据,重复上述步骤,直至确定目标检测区域。
在本发明实施例中,每次都从当前堆栈指针指示的检测区域开始进行堆栈检测,可能仅需要检测个别检测区域的特征数据是否改变,能够提高堆栈溢出的检测效率。
在另一些实施例中,在以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据之后,方法还包括:
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域与末位检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,其中,第一检测区域先于第一检测区域的下一个检测区域和末位检测区域被写入数据;
以第一检测区域的下一个检测区域为第二检测区域,获取第二检测区域当前存储的第二数据;
在第二数据与第二检测区域预先存储的特征数据相同的情况下,重新以上一个第一检测区域与当前的第一检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第二数据与第二检测区域预先存储的特征数据不同,确定第一检测区域是目标检测区域。
具体实现中,以第一检测区域为深度n检测区域,末位检测区域为深度m检测区域,则中位检测区域为深度(n+m)/2检测区域,若(n+m)/2不是整数,可以按照四舍五入的方式取整或仅取整数位数值。
示例性地,参见图8,图8是根据本发明实施例提供的另一种目标检测区域确定方法的流程图。确定当前堆栈指针指示的是深度n检测区域,获取深度n检测区域当前存储的第一数据,判断该第一数据与深度n检测区域预先存储的特征数据是否相同,若否,将n替换为(n+m)/2,其中,m是末位检测区域的深度,返回执行获取深度n检测区域当前存储的第一数据,直至第一数据与深度n检测区域预先存储的特征数据相同,获取深度n-1检测区域当前存储的第二数据,判断第二数据与深度n-1检测区域预先存储的特征数据是否相同,若否,确定深度n检测区域是目标检测区域;若是,将n替换为(n+x)/2,其中,x是上一个深度n检测区域的深度,返回执行获取深度n检测区域当前存储的第一数据的步骤,直至第二数据与深度n-1检测区域预先存储的特征数据不同,确定深度n检测区域是目标检测区域。
例如,假设堆栈顶部被划分为20个检测区域,当前堆栈指针指示的是深度10检测区域,获取深度10检测区域当前存储的第一数据,判断该第一数据与深度10检测区域预先存储的特征数据是否相同,若是,确定该深度10检测区域是目标检测区域;若否,将10替换为(10+20)/2=15,获取深度15检测区域当前存储的第一数据,在该第一数据与深度15检测区域预先存储的特征数据相同的情况下,获取深度14检测区域当前存储的第二数据,判断该第二数据与深度14检测区域预先存储的特征数据是否相同,若否,确定深度14检测区域是目标检测区域,若是,将15替换为(15+10)/2≈13,获取深度13检测区域当前存储的第一数据,以此类推,重复上述步骤,直至确定目标检测区域。
在采用二分法的形式确定目标检测区域的情况下,不仅要确定第一检测区域的特征数据未改变,还要确定第一检测区域的下一检测区域的特征数据发生改变,如此才能确定第一检测区域是目标检测区域,能够更准确地确定目标检测区域,进而更准确地确定堆栈使用情况,便于后续采取更合适的措施,提高堆栈溢出检测的准确性和堆栈溢出处理的合理性。
需要说明的是,在堆栈使用的过程中,可以周期性地对多个检测区域进行风险检测,该周期可以根据实际需求进行设置调整,本实施例对此不做限定。
本发明实施例中,将堆栈顶部划分为多个检测区域,并在每个检测区域预先存储特征数据,根据顺序检测或二分法检测两种方式,从当前堆栈指针指示的检测区域开始,确定出特征数据未改变且距离堆栈底部最近的目标检测区域,减少了数据比对的数据量,提高了风险检测效率,进而提高了堆栈溢出检测效率。
步骤402:基于目标检测区域对应的溢出风险等级,对堆栈进行处理。
在本发明实施例中,目标检测区域预先存储的特征数据中包括深度值,深度值可以用于表征该目标检测区域的溢出风险等级,因此,确定目标检测区域后,可以根据深度值确定对应的溢出风险等级,再根据溢出风险等级确定对应的处理措施,基于该处理措施对堆栈进行处理,在一定程度上可以预防堆栈溢出,以及在堆栈溢出的情况下及时补救。并且,不同的溢出风险等级对应的处理措施不同,即基于不同的溢出风险等级对堆栈进行不同的处理,使得针对堆栈溢出风险的应对更加灵活。
作为一种示例,溢出风险等级可以用数字表示,也可以用高、中、低表示,并且,可以根据深度值确定对应的溢出风险等级,且深度值与溢出风险等级可以呈正比,也可以呈反比。
以深度值与溢出风险等级呈正比,即深度值越大,溢出风险等级越高,溢出风险越高为例。如深度值为1-5,表示溢出风险等级为低,深度值为6-10,表示溢出风险等级为中,深度值为11-15,表示溢出风险等级为高。或者,直接将深度值作为溢出风险等级,如深度值为10,表示溢出风险等级为十级。
作为一种示例,溢出风险等级与处理措施的对应关系可以是预先设置。并且,可以按照高、中、低三个等级设置三种不同的处理方式,或者,可以划分多个更细的等级,并为每个等级设置不同的处理方式。
例如,高溢出风险等级对应的处理措施是系统复位,停止该堆栈处理任务;中溢出风险等级对应的处理措施是该堆栈仅处理紧急任务;低溢出风险等级对应的处理措施是保持正常的任务处理。或者,若溢出风险等级是十级,对应的处理措施是继续正常处理任务,溢出风险等级是八级,对应的处理措施是处理比较紧急的任务,溢出风险等级是六,对应的处理措施是处理很紧急的任务,溢出风险等级是三,对应的处理措施是不处理任务等等。
以图7为例,深度值与溢出风险等级呈反比,即深度值越大,溢出风险等级越低,溢出风险越低。若溢出风险等级是十二级,表示堆栈内的空闲区域比较多,可以继续增加新的任务安排,如继续向堆栈内写入数据;若溢出风险等级是五级,表示空闲区域还有5层深度,可以采用温和的控制策略,如减少部分非紧急任务的执行;若溢出风险等级是一级,表示堆栈的空闲区域已经很少,可以采取系统复位(reset)。
进一步地,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之后,还包括:在多个检测区域中不存在特征未改变的检测区域的情况下,确定堆栈存在数据溢出。
也就是说,若堆栈顶部的多个检测区域均被写入过数据,说明该堆栈很可能会出现数据溢出,即出现堆栈溢出的风险。
为了防止意外的堆栈溢出,可以将处于堆栈外部且与该堆栈顶部相邻的区域设置为动态内存区域,以在堆栈的存储空间满了的情况下将数据暂存至动态内存区域,为堆栈溢出的处理争取时间。
因此,在确定堆栈存在数据溢出后,还包括:检测动态内存区域当前存储的数据与动态内存区域预先存储的特征数据是否相同,其中,动态内存区域设置在堆栈外部且与堆栈顶部相邻;若是,将堆栈溢出的数据备份至动态内存区域;若否,采取相应的堆栈管理策略对堆栈进行管理。
作为一种示例,在确定堆栈顶部的检测区域均被写入过数据后,可以继续判断动态内存区域是否被写入过数据,若否,说明虽然堆栈内的存储区域比较紧张,但目前程序运行还是正常的,可以采用正常的系统复位机制,保存现有程序运行状态,并将堆栈溢出的数据备份至动态内存区域,若是,说明目前程序已经运行异常,则堆栈溢出的数据无法在该动态内存区域存储,需要立刻启动异常的系统复位机制。
具体实现中,可以在程序初始化时,在动态内存区域预先存储特征数据,该特征数据可以是一个或多个,若特征数据是一个,根据特征数据是否发生改变判断该动态内存区域是否被写入过新的数据,进而根据判断结果确定如何管理堆栈;若特征数据是多个,根据未改变的特征数据的数量确定如何管理堆栈。如此,在堆栈溢出时,可以将数据存储至风险较低的动态内存区域,而不是其他的关键数据区域,能够在一定程度上确保数据的正常存储。
示例性地,参见图9,图9是根据本发明实施例提供的另一种内存区域划分示意图。如图9所示,在堆栈顶部之外增加了动态内存区域,并且,将动态内存区域设置为深度0区域,作为堆栈的紧急备份区域。深度0区域的特征数据设定与检测区域的特征数据设定方法相同,也是在程序初始化时设置为特定的特征值,如深度0区域的特征数据是0x01234567。同样在正常程度运行过程中,也可以周期性对动态内存区域进行风险检测,如果动态内存区域存储的还是预设的深度0特征数据,表示尚有一定的安全边际,并且,深度0区域中未改变的特征数据的数量大小表示堆栈溢出后的安全边际还有多大,可以根据未改变的特征数据的数量大小采用相应的堆栈管理策略对堆栈进行管理。
需要说明的是,堆栈管理策略可以由用户根据实际需求设定,本实施例对此不做限定。
本发明实施例提供的堆栈溢出的检测方法,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;基于目标检测区域对应的溢出风险等级,对堆栈进行处理。通过上述方法在堆栈顶部划分了多个检测区域,并从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,则只需检测少数检测区域的风险,不用每次对所有检测区域都做一次风险检测,便能确定堆栈溢出的风险,能够提高堆栈溢出的检测效率。并且,根据目标检测区域对应的溢出风险等级对堆栈进行处理,则在堆栈溢出风险不同的情况下,可以对堆栈采取不同的处理,提高了堆栈溢出处理的灵活性。并且,根据堆栈的历史使用情况预测堆栈的溢出风险,并对堆栈采取一定的措施,在一定程度上可以预防堆栈溢出。
图10是根据本发明实施例提供的一种堆栈溢出的检测装置的结构示意图,该装置包括:
风险检测模块1001,被配置为在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;
风险处理模块1002,被配置为基于目标检测区域对应的溢出风险等级,对堆栈进行处理。
根据本发明的一个实施例,风险检测模块1001,还被配置为:
以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据;
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域的上一个检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,确定第一检测区域是目标检测区域,其中,第一检测区域先于第一检测区域的上一个检测区域被写入数据。
根据本发明的一个实施例,风险检测模块1001,还被配置为:
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域与末位检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,其中,第一检测区域先于第一检测区域的下一个检测区域和末位检测区域被写入数据;
以第一检测区域的下一个检测区域为第二检测区域,获取第二检测区域当前存储的第二数据;
在第二数据与第二检测区域预先存储的特征数据相同的情况下,重新以上一个第一检测区域与当前的第一检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第二数据与第二检测区域预先存储的特征数据不同,确定第一检测区域是目标检测区域。
根据本发明的一个实施例,该装置还包括存储模块,被配置为:
在每个检测区域预先存储特征数据,其中,特征数据用于表征检测区域对应的溢出风险等级。
根据本发明的一个实施例,每个检测区域存储的特征数据包括深度值和特征值,深度值用于表征检测区域对应的溢出风险等级,特征数据的数据大小基于堆栈的存储空间确定。
根据本发明的一个实施例,该装置还包括确定模块,被配置为:
在多个检测区域中不存在特征未改变的检测区域的情况下,确定堆栈存在数据溢出。
根据本发明的一个实施例,该装置还包括动态内存区域检测模块,被配置为:
检测动态内存区域当前存储的数据与动态内存区域预先存储的特征数据是否相同,其中,动态内存区域设置在堆栈外部且与堆栈顶部相邻;
若是,将堆栈溢出的数据备份至动态内存区域;若否,采取相应的堆栈管理策略对堆栈进行管理。
应用本发明实施例提供的堆栈溢出的检测方法,在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,堆栈底部先于堆栈顶部被写入数据;基于目标检测区域对应的溢出风险等级,对堆栈进行处理。通过上述方法在堆栈顶部划分了多个检测区域,并从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,则只需检测少数检测区域的风险,不用每次对所有检测区域都做一次风险检测,便能确定堆栈溢出的风险,能够提高堆栈溢出的检测效率。并且,根据目标检测区域对应的溢出风险等级对堆栈进行处理,则在堆栈溢出风险不同的情况下,可以对堆栈采取不同的处理,提高了堆栈溢出处理的灵活性。并且,根据堆栈的历史使用情况预测堆栈的溢出风险,并对堆栈采取一定的措施,在一定程度上可以预防堆栈溢出。
上述为本发明实施例的一种堆栈溢出的检测装置的示意性方案。需要说明的是,该堆栈溢出的检测装置的技术方案与上述堆栈溢出的检测方法的技术方案属于同一构思,堆栈溢出的检测装置的技术方案未详细描述的细节内容,均可以参见上述堆栈溢出的检测方法的技术方案的描述。
图11是根据本发明实施例提供的一种计算设备的结构示意图。该计算设备1100包括:存储器1101、处理器1102及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时,实现如上述任一实施例提出的一种堆栈溢出的检测方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述任一实施例提出的一种堆栈溢出的检测方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM,Random Access Memory),只读存储器(ROM,Read-Only Memory),可擦除可编辑只读存储器(EPROM,Erasable Programmable Read-Only Memory或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM,Compact Disk Read Only Memory)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA,Programmable Gate Array),现场可编程门阵列(FPGA,Field Programmable Gate Array)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (8)

1.一种堆栈溢出的检测方法,其特征在于,所述方法包括:
在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,所述目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,所述堆栈底部先于所述堆栈顶部被写入数据;
基于所述目标检测区域对应的溢出风险等级,对所述堆栈进行处理;
其中,所述在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,包括:
以所述当前堆栈指针指示的检测区域为第一检测区域,获取所述第一检测区域当前存储的第一数据;
在所述第一数据与所述第一检测区域预先存储的特征数据不同的情况下,重新以所述第一检测区域与末位检测区域的中位检测区域为新的第一检测区域,返回执行获取所述第一检测区域当前存储的第一数据的步骤,直至所述第一数据与所述第一检测区域预先存储的特征数据相同,其中,所述第一检测区域先于所述第一检测区域的下一个检测区域和所述末位检测区域被写入数据;
以所述第一检测区域的下一个检测区域为第二检测区域,获取所述第二检测区域当前存储的第二数据;
在所述第二数据与所述第二检测区域预先存储的特征数据相同的情况下,重新以上一个第一检测区域与当前的第一检测区域的中位检测区域为新的第一检测区域,返回执行获取所述第一检测区域当前存储的第一数据的步骤,直至所述第二数据与所述第二检测区域预先存储的特征数据不同,确定所述第一检测区域是目标检测区域。
2.根据权利要求1所述的堆栈溢出的检测方法,其特征在于,所述在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之前,还包括:
在每个检测区域预先存储特征数据,其中,所述特征数据用于表征所述检测区域对应的溢出风险等级。
3.根据权利要求2所述的堆栈溢出的检测方法,其特征在于,每个检测区域存储的特征数据包括深度值和特征值,所述深度值用于表征所述检测区域对应的溢出风险等级,所述特征数据的数据大小基于所述堆栈的存储空间确定。
4.根据权利要求1-2任一项所述的堆栈溢出的检测方法,其特征在于,所述在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测之后,还包括:
在所述多个检测区域中不存在特征未改变的检测区域的情况下,确定所述堆栈存在数据溢出。
5.根据权利要求4所述的堆栈溢出的检测方法,其特征在于,所述方法还包括:
检测动态内存区域当前存储的数据与所述动态内存区域预先存储的特征数据是否相同,其中,所述动态内存区域设置在堆栈外部且与所述堆栈顶部相邻;
若是,将所述堆栈溢出的数据备份至所述动态内存区域;若否,采取相应的堆栈管理策略对所述堆栈进行管理。
6.一种堆栈溢出的检测装置,其特征在于,所述装置包括:
风险检测模块,被配置为在使用堆栈的过程中,从当前堆栈指针指示的检测区域开始对堆栈顶部的多个检测区域进行风险检测,确定目标检测区域,其中,所述目标检测区域是特征数据未改变且距离堆栈底部最近的检测区域,所述堆栈底部先于所述堆栈顶部被写入数据;
风险处理模块,被配置为基于所述目标检测区域对应的溢出风险等级,对所述堆栈进行处理;
其中,风险检测模块,还被配置为:
以当前堆栈指针指示的检测区域为第一检测区域,获取第一检测区域当前存储的第一数据;
在第一数据与第一检测区域预先存储的特征数据不同的情况下,重新以第一检测区域与末位检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第一数据与第一检测区域预先存储的特征数据相同,其中,第一检测区域先于第一检测区域的下一个检测区域和末位检测区域被写入数据;
以第一检测区域的下一个检测区域为第二检测区域,获取第二检测区域当前存储的第二数据;
在第二数据与第二检测区域预先存储的特征数据相同的情况下,重新以上一个第一检测区域与当前的第一检测区域的中位检测区域为新的第一检测区域,返回执行获取第一检测区域当前存储的第一数据的步骤,直至第二数据与第二检测区域预先存储的特征数据不同,确定第一检测区域是目标检测区域。
7.一种计算设备,其特征在于,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-5任一项所述的堆栈溢出的检测方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5任一项所述的堆栈溢出的检测方法。
CN202310910815.2A 2023-07-24 2023-07-24 堆栈溢出的检测方法、装置和计算设备 Active CN116627852B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310910815.2A CN116627852B (zh) 2023-07-24 2023-07-24 堆栈溢出的检测方法、装置和计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310910815.2A CN116627852B (zh) 2023-07-24 2023-07-24 堆栈溢出的检测方法、装置和计算设备

Publications (2)

Publication Number Publication Date
CN116627852A CN116627852A (zh) 2023-08-22
CN116627852B true CN116627852B (zh) 2023-10-03

Family

ID=87642201

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310910815.2A Active CN116627852B (zh) 2023-07-24 2023-07-24 堆栈溢出的检测方法、装置和计算设备

Country Status (1)

Country Link
CN (1) CN116627852B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117251343A (zh) * 2023-11-20 2023-12-19 苏州萨沙迈半导体有限公司 堆栈检测方法、装置、多核处理器及计算设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH113272A (ja) * 1997-06-13 1999-01-06 Daikin Ind Ltd スタックオーバフロー検出装置
CN109214169A (zh) * 2017-06-30 2019-01-15 芜湖美的厨卫电器制造有限公司 堆栈溢出检测方法、装置及家用电器
CN114048465A (zh) * 2022-01-14 2022-02-15 苏州浪潮智能科技有限公司 一种堆栈状态检测方法、装置、设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH113272A (ja) * 1997-06-13 1999-01-06 Daikin Ind Ltd スタックオーバフロー検出装置
CN109214169A (zh) * 2017-06-30 2019-01-15 芜湖美的厨卫电器制造有限公司 堆栈溢出检测方法、装置及家用电器
CN114048465A (zh) * 2022-01-14 2022-02-15 苏州浪潮智能科技有限公司 一种堆栈状态检测方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN116627852A (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
CN116627852B (zh) 堆栈溢出的检测方法、装置和计算设备
EP0534884B1 (en) Task timeout prevention in a multi-task, real-time system
US7991961B1 (en) Low-overhead run-time memory leak detection and recovery
CN103092746B (zh) 线程异常的定位方法及系统
US7650517B2 (en) Throttle management for blade system
CN107562512B (zh) 一种迁移虚拟机的方法、装置及系统
CN114328102B (zh) 设备状态监控方法、装置、设备及计算机可读存储介质
CN102483646A (zh) 根据性能灵敏度不均匀地改变计算单元的性能
JP2014182561A (ja) 計算機システム、プロセス及びスレッドの監視方法
US20080133975A1 (en) Method for Running a Computer Program on a Computer System
CN105824709A (zh) 一种临界区访问方法及装置
CN107818034B (zh) 监测计算机设备中的进程的运行空间的方法以及装置
KR100697988B1 (ko) 과도한 인터럽트로부터 시스템을 보호하는 장치 및 그 방법
EP1248192B1 (en) Processing execution apparatus having data reference limiting function
US11544171B2 (en) Method for monitoring the free space of a memory stack
CN117251343A (zh) 堆栈检测方法、装置、多核处理器及计算设备
CN114253825A (zh) 内存泄漏检测方法、装置、计算机设备和存储介质
CN112463536B (zh) 一种软件堆栈区域非法篡改监控系统及方法
JP2012059127A (ja) 情報処理装置、ウォッチドッグタイマ、異常検出方法
CN117688552B (zh) 栈空间防护方法、电子设备、存储介质及计算机程序产品
KR102300712B1 (ko) 스택 결함 원인을 진단하는 방법 및 장치
US20230376218A1 (en) Checkpointing
Rahmani Ghobadi et al. A Model for Software Rejuvenation Based On Availability Optimization
CN117546142A (zh) 用于虚拟机故障减轻的虚拟机管理设备和方法
CN116955072A (zh) 容器异常监测方法、监测装置、存储介质及服务器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant