CN109214169A - 堆栈溢出检测方法、装置及家用电器 - Google Patents
堆栈溢出检测方法、装置及家用电器 Download PDFInfo
- Publication number
- CN109214169A CN109214169A CN201710528020.XA CN201710528020A CN109214169A CN 109214169 A CN109214169 A CN 109214169A CN 201710528020 A CN201710528020 A CN 201710528020A CN 109214169 A CN109214169 A CN 109214169A
- Authority
- CN
- China
- Prior art keywords
- stack
- stack top
- storehouse
- module
- top array
- 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.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 49
- 238000000034 method Methods 0.000 claims abstract description 24
- 230000002265 prevention Effects 0.000 abstract description 10
- 230000006870 function Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 210000003128 head Anatomy 0.000 description 1
- 238000010438 heat treatment Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 210000003733 optic disk Anatomy 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种堆栈溢出检测方法、装置及家用电器,所述方法包括以下步骤:获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址;根据堆栈的栈顶地址对预设的栈顶数组进行赋值;在程序运行的过程中,判断栈顶数组中的元素的值是否被修改;如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。该方法通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种堆栈溢出检测方法、一种计算机可读存储介质、一种堆栈溢出检测装置和一种具有该装置的家用电器。
背景技术
目前,家用电器中使用MCU(Micro Controller Unit,微控制单元)控制的电控器越来越多,在使用芯片堆栈时,由于程序嵌套层数多或者一些隐含的错误逻辑,会造成堆栈溢出,程序跑飞。而目前的家用电器中并没有对堆栈是否溢出进行检测,当堆栈溢出,程序跑飞时,造成的故障无法预估,很可能发生安全事故。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的第一个目的在于提出一种堆栈溢出检测方法,通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
本发明的第二个目的在于提出一种计算机可读存储介质。
本发明的第三个目的在于提出一种堆栈溢出检测装置。
本发明的第四个目的在于提出一种家用电器。
为实现上述目的,本发明第一方面实施例提出了一种堆栈溢出检测方法,包括以下步骤:获取程序中的变量总数,并根据所述变量总数获取堆栈的栈顶地址;根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值;在所述程序运行的过程中,判断所述栈顶数组中的元素的值是否被修改;如果所述栈顶数组中存在任一元素的值被修改,则判断所述堆栈存在溢出风险。
根据本发明实施例的堆栈溢出检测方法,首先获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址,以及根据堆栈的栈顶地址对预设的栈顶数组进行赋值。然后,在程序运行的过程中,判断栈顶数组中的元素的值是否被修改,如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。该方法通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
另外,根据本发明上述实施例提出的堆栈溢出检测方法还可以具有如下附加的技术特征:
根据本发明的一个实施例,所述根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值,包括:将所述栈顶数组的首地址赋值为所述栈顶地址,并对所述栈顶数组中的每一个元素赋初值。
根据本发明的一个实施例,在判断所述堆栈存在溢出风险时,执行复位程序并发出报警提示。
根据本发明的一个实施例,所述栈顶数组包括至少一个元素。
为实现上述目的,本发明第二方面实施例提出了一种计算机可读存储介质,用于存储应用程序,所述应用程序用于执行本发明第一方面实施例提出的堆栈溢出检测方法。
本发明实施例的计算机可读存储介质,通过执行上述的堆栈溢出检测方法,能够自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
为实现上述目的,本发明第三方面实施例提出了一种堆栈溢出检测装置,包括:获取模块,用于获取程序中的变量总数,并根据所述变量总数获取堆栈的栈顶地址;赋值模块,所述赋值模块与所述获取模块相连,所述赋值模块用于根据所述堆栈的栈顶地址对预设的栈顶数组的首地址进行赋值,并对所述栈顶数组中的每一个元素赋初值;判断模块,所述判断模块与所述赋值模块相连,所述判断模块用于在所述程序运行的过程中,判断所述栈顶数组中的元素的值是否被修改,如果所述栈顶数组中存在任一元素的值被修改,则判断所述堆栈存在溢出风险。
根据本发明实施例的堆栈溢出检测装置,通过获取模块获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址,赋值模块根据堆栈的栈顶地址对预设的栈顶数组进行赋值,判断模块在程序运行的过程中,判断栈顶数组中的元素的值是否被修改,如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。该装置通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
另外,根据本发明上述实施例提出的堆栈溢出检测装置还可以具有如下附加的技术特征:
根据本发明的一个实施例,所述赋值模块在根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值时,其中,所述赋值模块将所述栈顶数组的首地址赋值为所述栈顶地址,并对所述栈顶数组中的每一个元素赋初值。
根据本发明的一个实施例,上述的堆栈溢出检测装置还包括:复位模块和报警模块,所述复位模块和所述报警模块分别与所述判断模块相连,其中,当所述判断模块判断所述堆栈存在溢出风险时,通过所述复位模块执行复位程序,并通过所述报警模块发出报警提示。
根据本发明的一个实施例,所述栈顶数组包括至少一个元素。
为实现上述目的,本发明第四方面实施例提出了一种家用电器,其包括本发明第三方面实施例提出的堆栈溢出检测装置。
本发明实施例的家用电器,通过上述的堆栈溢出检测装置,能够自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
附图说明
图1是根据本发明实施例的堆栈溢出检测方法的流程图;
图2是单片机中flash区的数据结构示意图;
图3是根据本发明一个具体示例的堆栈溢出检测方法的流程图;
图4是根据本发明实施例的堆栈溢出检测装置的方框示意图;以及
图5是根据本发明一个实施例的堆栈溢出检测装置的方框示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面结合附图来描述根据本发明实施例提出的堆栈溢出检测方法、计算机可读存储介质、堆栈溢出检测装置和具有该装置的家用电器。
图1是根据本发明实施例的堆栈溢出检测方法的流程图。如图1所示,本发明实施例的堆栈溢出检测方法可包括以下步骤:
S1,获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址。
具体地,以图2所示的单片机的flash区为例。如图2所示,单片机的flash区主要包括直接寻址区、扩展直接寻址区、禁止访问区、扩展I/O区以及程序区等。其中,扩展直接寻址区也称数据区,用于存储程序运行时的变量,即程序中的变量地址为0x0080至0x47F。
在程序设计完成后,可通过编译器获得程序中的变量总数,假设当前程序中用到的变量总数为0x0100个,那么这些变量在数据区的地址为0x0080至0x0180,根据变量总数可以计算出堆栈的栈顶地址,即栈顶地址=变量起始地址+变量总数+0x0001=0x0080+0x0100+0x0001=Ox0181。
S2,根据堆栈的栈顶地址对预设的栈顶数组进行赋值。
根据本发明的一个实施例,根据堆栈的栈顶地址对预设的栈顶数组进行赋值,包括:将栈顶数组的首地址赋值为栈顶地址,并对栈顶数组中的每一个元素赋初值。其中,栈顶数组包括至少一个元素。
具体地,假设预设的栈顶数组有一个元素,那么预设的栈顶数组可以为intStackTable[1],当获取的堆栈的栈顶地址为Ox0181时,栈顶数组StackTable[1]的首地址为Ox0181。由此,将堆栈的栈顶地址与栈顶数组的首地址关联,即使在程序编程时对堆栈的大小进行修改,也无需手动计算栈顶数组StackTable[1]的首地址,只要将获取的栈顶地址传递给栈顶数组StackTable[1]即可。然后,对栈顶数组StackTable[1]赋初值,如StackTable[1]={0xAA}。
当预设的栈顶数组有四个元素时,该栈顶数组可以为int StackTable[4],其中,栈顶数组StackTable[4]的首地址为Ox0181,那么整个栈顶数组的地址将从0x0181开始到0x0184。然后,对栈顶数组StackTable[4]赋初值,如StackTable[4]={0xAA,0Xbb,0xCC,0xDD}。
S3,在程序运行的过程中,判断栈顶数组中的元素的值是否被修改。
S4,如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。
其中,需要说明的是,本发明实施例中的堆栈溢出是指堆栈顶部的数据也被用来进行计算的情况。
具体地,堆栈的最主要特征是遵循“先进后出”的原则,即最先入栈的数据放在栈的最底部,最后入栈的数据放在栈的顶部,并且最后入栈的数据最先出栈,最先入栈的数据最后出栈。由于堆栈的长度是由程序中的变量总数确定,所以当向堆栈中填充超过其处理能力的数据时,例如,出现过多的函数调用、递归或者错误赋值等,将导致堆栈溢出。当发生堆栈溢出时,将会占用正常变量的地址,导致变量的值发生突变,影响单片机正常运行,从而造成不可估量的风险。所以,在本发明的实施例中,通过对栈顶地址对应的栈顶数组进行赋值,以在程序运行的过程中,判断该栈顶数组中的元素是否被篡改,如果被篡改,则说明栈顶地址被使用,此时存在堆栈溢出的风险。
例如,当函数调用过多时,程序运行中的变量可能超过正常情况下程序中所用到的变量总数0x0100,那么堆栈的栈顶地址0x0181将被占用,即对栈顶地址0x0181对应的变量赋值,而在对数据区的堆栈的栈顶地址0x0181对应的变量进行赋值的同时,栈顶数组的首地址对应的元素也将重新被赋值,即不再是0xAA,由此可判断堆栈存在溢出风险。
因此,根据本发明实施例的堆栈溢出检测方法,通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
进一步地,根据本发明的一个实施例,在判断堆栈存在溢出风险时,执行复位程序并发出报警提示。
具体地,在判断堆栈存在溢出风险时,可通过看门狗进行复位,例如,程序中停止喂狗,引起看门狗对MCU进行强制复位。或者,预先设定一个转移地址,当判断堆栈存在溢出风险时,转去执行设定好的堆栈溢出处理程序,例如,可关闭与安全有关的负载的输出,或者控制整个设备停止工作,从而保证系统硬件不会发生损坏,提高系统的安全性和可靠性。另外,在判断堆栈存在溢出风险时,还发出报警提示,如声光报警提示,以对用户进行提醒。
具体地,图3是根据本发明一个具体示例的堆栈溢出检测方法的流程图。如图3所示,本发明实施例的堆栈溢出检测方法可包括以下步骤:
S101,家用电器上电。
S102,根据程序所使用的变量总数获取栈顶地址,并将栈顶地址传给栈顶数组首地址。
S103,对栈顶数组进行初始化,如栈顶数组StackTable[4]={0xAA,0Xbb,0xCC,0xDD}。
S104,for(;;)循环。
S105,判断(*StackTable)[0]!=0xAA。如果是,执行步骤S106;如果否,执行步骤S107。
S106,执行F_FailSafe()。该F_FailSafe()函数是在判断程序即将溢出时的处理函数,在该函数中,可以设置报警程序或者关闭与安全相关的负载的程序,如关闭家用电器的加热装置,关闭家用电器中功率开关管的驱动信号等,使得用户的财产不受损害。
S107,判断(*StackTable)[1]!=0xBB。如果是,执行步骤S108;如果否,执行步骤S109。
S108,执行F_FailSafe()。
S109,判断(*StackTable)[2]!=0xCC。如果是,执行步骤S110;如果否,执行步骤S111。
S110,执行F_FailSafe()。
S111,判断(*StackTable)[3]!=0xDD。如果是,执行步骤S112;如果否,返回步骤S104。
S112,执行F_FailSafe()。
综上所述,根据本发明实施例的堆栈溢出检测方法,利用堆栈的结构和原理,通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现堆栈溢出的有效判断,并在堆栈即将溢出时,进行故障处理,防止对家用电器造成损坏,避免危险事故发生。
另外,本发明的实施例还提出了一种计算机可读存储介质,其用于存储应用程序,所述应用程序用于执行上述的堆栈溢出检测方法。
本发明实施例的计算机可读存储介质,通过执行上述的堆栈溢出检测方法,能够自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
图4是根据本发明实施例的堆栈溢出检测装置的方框示意图。如图4所示,本发明实施例的堆栈溢出检测装置可包括:获取模块10、赋值模块20和判断模块30。
其中,获取模块10用于获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址。赋值模块20与获取模块10相连,赋值模块20用于根据堆栈的栈顶地址对预设的栈顶数组进行赋值。判断模块30与赋值模块20相连,判断模块30用于在程序运行的过程中,判断栈顶数组中的元素的值是否被修改,如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。
根据本发明的一个实施例,赋值模块20在根据堆栈的栈顶地址对预设的栈顶数组进行赋值时,其中,赋值模块20将栈顶数组的首地址赋值为栈顶地址,并对栈顶数组中的每一个元素赋初值。其中,栈顶数组包括至少一个元素。
根据本发明的一个实施例,如图5所示,上述的堆栈溢出检测装置还可包括:复位模块40和报警模块50,复位模块40和报警模块50分别与判断模块30相连,其中,当判断模块30判断堆栈存在溢出风险时,通过所复位模块40执行复位程序,并通过报警模块50发出报警提示。
需要说明的是,本发明实施例的堆栈溢出检测装置中未披露的细节,请参照本发明实施例的堆栈溢出检测方法中所披露的细节,具体这里不再详述。
根据本发明实施例的堆栈溢出检测装置,通过获取模块获取程序中的变量总数,并根据变量总数获取堆栈的栈顶地址,赋值模块根据堆栈的栈顶地址对预设的栈顶数组进行赋值,判断模块在程序运行的过程中,判断栈顶数组中的元素的值是否被修改,如果栈顶数组中存在任一元素的值被修改,则判断堆栈存在溢出风险。该装置通过自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
此外,本发明的实施例还提出了一种家用电器,其包括上述的堆栈溢出检测装置。
本发明实施例的家用电器,通过上述的堆栈溢出检测装置,能够自动识别程序中的堆栈大小,并根据堆栈大小对栈顶数组进行赋初值,以在程序运行的过程中,通过判断栈顶数组的初值是否被篡改来判断堆栈是否即将溢出,从而实现预防堆栈溢出的有效判断,以根据判断结果采取有效措施,防止由于MCU异常导致设备损坏和安全事故。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种堆栈溢出检测方法,其特征在于,包括以下步骤:
获取程序中的变量总数,并根据所述变量总数获取堆栈的栈顶地址;
根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值;
在所述程序运行的过程中,判断所述栈顶数组中的元素的值是否被修改;
如果所述栈顶数组中存在任一元素的值被修改,则判断所述堆栈存在溢出风险。
2.如权利要求1所述的堆栈溢出检测方法,其特征在于,所述根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值,包括:
将所述栈顶数组的首地址赋值为所述栈顶地址,并对所述栈顶数组中的每一个元素赋初值。
3.如权利要求1或2所述的堆栈溢出检测方法,其特征在于,在判断所述堆栈存在溢出风险时,执行复位程序并发出报警提示。
4.如权利要求1所述的堆栈溢出检测方法,其特征在于,所述栈顶数组包括至少一个元素。
5.一种计算机可读存储介质,其特征在于,用于存储应用程序,所述应用程序用于执行权利要求1-4中任一项所述的堆栈溢出检测方法。
6.一种堆栈溢出检测装置,其特征在于,包括:
获取模块,用于获取程序中的变量总数,并根据所述变量总数获取堆栈的栈顶地址;
赋值模块,所述赋值模块与所述获取模块相连,所述赋值模块用于根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值;
判断模块,所述判断模块与所述赋值模块相连,所述判断模块用于在所述程序运行的过程中,判断所述栈顶数组中的元素的值是否被修改,如果所述栈顶数组中存在任一元素的值被修改,则判断所述堆栈存在溢出风险。
7.如权利要求6所述的堆栈溢出检测装置,其特征在于,所述赋值模块在根据所述堆栈的栈顶地址对预设的栈顶数组进行赋值时,其中,
所述赋值模块将所述栈顶数组的首地址赋值为所述栈顶地址,并对所述栈顶数组中的每一个元素赋初值。
8.如权利要求6或7所述的堆栈溢出检测装置,其特征在于,还包括:复位模块和报警模块,所述复位模块和所述报警模块分别与所述判断模块相连,其中,当所述判断模块判断所述堆栈存在溢出风险时,通过所述复位模块执行复位程序,并通过所述报警模块发出报警提示。
9.如权利要求6所述的堆栈溢出检测装置,其特征在于,所述栈顶数组包括至少一个元素。
10.一种家用电器,其特征在于,包括如权利要求6-9中任一项所述的堆栈溢出检测装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710528020.XA CN109214169B (zh) | 2017-06-30 | 2017-06-30 | 堆栈溢出检测方法、装置及家用电器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710528020.XA CN109214169B (zh) | 2017-06-30 | 2017-06-30 | 堆栈溢出检测方法、装置及家用电器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109214169A true CN109214169A (zh) | 2019-01-15 |
CN109214169B CN109214169B (zh) | 2023-12-08 |
Family
ID=64991719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710528020.XA Active CN109214169B (zh) | 2017-06-30 | 2017-06-30 | 堆栈溢出检测方法、装置及家用电器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109214169B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463536A (zh) * | 2020-11-27 | 2021-03-09 | 宁波拓普集团股份有限公司 | 一种软件堆栈区域非法篡改监控系统及方法 |
CN114048465A (zh) * | 2022-01-14 | 2022-02-15 | 苏州浪潮智能科技有限公司 | 一种堆栈状态检测方法、装置、设备及存储介质 |
CN116627852A (zh) * | 2023-07-24 | 2023-08-22 | 苏州萨沙迈半导体有限公司 | 堆栈溢出的检测方法、装置和计算设备 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5949973A (en) * | 1997-07-25 | 1999-09-07 | Memco Software, Ltd. | Method of relocating the stack in a computer system for preventing overrate by an exploit program |
WO2001061475A1 (en) * | 2000-02-14 | 2001-08-23 | Chicory Systems, Inc. | Transforming a stack-based code sequence to a register based code sequence |
GB2385175A (en) * | 1998-07-30 | 2003-08-13 | Sun Microsystems Inc | Processing stack related exception traps |
CN1440528A (zh) * | 2000-10-05 | 2003-09-03 | Arm有限公司 | 寄存器中堆栈操作数的存储 |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
CN101241464A (zh) * | 2007-02-05 | 2008-08-13 | 中兴通讯股份有限公司 | 一种检测堆栈帧破坏的方法 |
CN101290596A (zh) * | 2008-05-23 | 2008-10-22 | 中兴通讯股份有限公司 | 一种任务堆栈溢出的实时检测方法及装置 |
CN101290590A (zh) * | 2008-06-03 | 2008-10-22 | 北京中星微电子有限公司 | 一种嵌入式操作系统中切换任务的方法和单元 |
CN102298677A (zh) * | 2011-08-29 | 2011-12-28 | 瑞斯康达科技发展股份有限公司 | 一种堆栈溢出的保护方法和装置 |
CN102629231A (zh) * | 2012-04-24 | 2012-08-08 | 迈普通信技术股份有限公司 | 一种检测任务堆栈的方法 |
US20140359773A1 (en) * | 2013-05-29 | 2014-12-04 | Raytheon BBN Technologies, Corp. | Intra stack frame randomization for protecting applications against code injection attack |
CN104572448A (zh) * | 2014-12-23 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种线程堆栈的使用情况的实现方法和装置 |
CN104714885A (zh) * | 2015-02-13 | 2015-06-17 | 小米科技有限责任公司 | 栈溢出位置的检测方法及装置 |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
CN106547606A (zh) * | 2016-10-25 | 2017-03-29 | 交控科技股份有限公司 | 堆栈自检方法及装置 |
-
2017
- 2017-06-30 CN CN201710528020.XA patent/CN109214169B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5949973A (en) * | 1997-07-25 | 1999-09-07 | Memco Software, Ltd. | Method of relocating the stack in a computer system for preventing overrate by an exploit program |
GB2385175A (en) * | 1998-07-30 | 2003-08-13 | Sun Microsystems Inc | Processing stack related exception traps |
WO2001061475A1 (en) * | 2000-02-14 | 2001-08-23 | Chicory Systems, Inc. | Transforming a stack-based code sequence to a register based code sequence |
CN1440528A (zh) * | 2000-10-05 | 2003-09-03 | Arm有限公司 | 寄存器中堆栈操作数的存储 |
CN101241464A (zh) * | 2007-02-05 | 2008-08-13 | 中兴通讯股份有限公司 | 一种检测堆栈帧破坏的方法 |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
CN101290596A (zh) * | 2008-05-23 | 2008-10-22 | 中兴通讯股份有限公司 | 一种任务堆栈溢出的实时检测方法及装置 |
CN101290590A (zh) * | 2008-06-03 | 2008-10-22 | 北京中星微电子有限公司 | 一种嵌入式操作系统中切换任务的方法和单元 |
CN102298677A (zh) * | 2011-08-29 | 2011-12-28 | 瑞斯康达科技发展股份有限公司 | 一种堆栈溢出的保护方法和装置 |
CN102629231A (zh) * | 2012-04-24 | 2012-08-08 | 迈普通信技术股份有限公司 | 一种检测任务堆栈的方法 |
US20140359773A1 (en) * | 2013-05-29 | 2014-12-04 | Raytheon BBN Technologies, Corp. | Intra stack frame randomization for protecting applications against code injection attack |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
CN104572448A (zh) * | 2014-12-23 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种线程堆栈的使用情况的实现方法和装置 |
CN104714885A (zh) * | 2015-02-13 | 2015-06-17 | 小米科技有限责任公司 | 栈溢出位置的检测方法及装置 |
CN106547606A (zh) * | 2016-10-25 | 2017-03-29 | 交控科技股份有限公司 | 堆栈自检方法及装置 |
Non-Patent Citations (5)
Title |
---|
BRIYCTF: "栈溢出(一):栈溢出原理以及基本ROP", Retrieved from the Internet <URL:https://www.cnblogs.com/briyctf/p/17030641.html> * |
PIN ZHOU等: "AccMon: Automatically Detecting Memory-Related Bugs via Program Counter-Based Invariants", 《37TH INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE 》, pages 269 - 280 * |
刘猛等: "防止堆栈溢出返回地址攻击的两种方法", 《计算机应用》, no. 1, pages 222 - 224 * |
张燕京等: "交流变频风机在强抽式燃气热水器中的应用研究", 《2022年中国家用电器技术大会论文集》 * |
陈波等: "信息安全专业学生安全编码能力培养的探索", 《信息网络安全》, no. 7, pages 68 - 70 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463536A (zh) * | 2020-11-27 | 2021-03-09 | 宁波拓普集团股份有限公司 | 一种软件堆栈区域非法篡改监控系统及方法 |
CN112463536B (zh) * | 2020-11-27 | 2022-08-05 | 宁波拓普集团股份有限公司 | 一种软件堆栈区域非法篡改监控系统及方法 |
CN114048465A (zh) * | 2022-01-14 | 2022-02-15 | 苏州浪潮智能科技有限公司 | 一种堆栈状态检测方法、装置、设备及存储介质 |
CN116627852A (zh) * | 2023-07-24 | 2023-08-22 | 苏州萨沙迈半导体有限公司 | 堆栈溢出的检测方法、装置和计算设备 |
CN116627852B (zh) * | 2023-07-24 | 2023-10-03 | 苏州萨沙迈半导体有限公司 | 堆栈溢出的检测方法、装置和计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109214169B (zh) | 2023-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109214169A (zh) | 堆栈溢出检测方法、装置及家用电器 | |
CN107166741B (zh) | 热泵机组及其防冻结控制方法 | |
CN109990923A (zh) | 提高资源有效利用率的温度传感器的故障诊断方法及系统 | |
CN107271921B (zh) | 一种电流采集方法、装置、电池管理系统及电动汽车 | |
CN105088661B (zh) | 滚筒洗衣机的偏心检测方法 | |
CN109323389A (zh) | 空调及用于空调的温度传感器的脱落检测方法和装置 | |
CN109838778B (zh) | 一种蒸汽发生器的自适应加水方法 | |
CN107665134A (zh) | 页面组件加载方法、装置、介质及终端设备 | |
CN108930128A (zh) | 洗涤剂自动投放的控制方法及控制装置、洗衣机 | |
CN108953131A (zh) | 检测电动真空泵系统泄漏的方法和装置 | |
CN109359802A (zh) | 逆选择风险确定方法、系统、计算机设备及存储介质 | |
CN105444364A (zh) | 加湿器干烧保护控制方法、装置和加湿器 | |
CN107421071B (zh) | 多联机系统及其排气温度检测异常的诊断方法、装置 | |
CN106319838B (zh) | 洗衣机的排水控制方法 | |
CN107255353A (zh) | 多联机系统及其排气温度检测异常的诊断方法、装置 | |
CN107468191A (zh) | 洗碗机进水检测方法和洗碗机 | |
CN106529303A (zh) | 一种核电厂仪控系统启动装置和方法 | |
CN104846584B (zh) | 洗衣机及其脱水控制方法 | |
CN105088645B (zh) | 滚筒洗衣机的旋桶洗涤控制方法 | |
CN106920577A (zh) | 存储器芯片的检测方法、检测装置和检测系统 | |
CN106155866A (zh) | 一种监控cpu核心频率的方法及装置 | |
CN108984383A (zh) | 程序跑飞的检测方法、装置及家用电器 | |
CN105630644B (zh) | 洗衣机中微控制单元的内存检测方法及系统 | |
CN106033966B (zh) | 按键触发的识别方法及装置 | |
CN108968862A (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 |