System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 堆栈溢出的检测装置、计算机装置和堆栈溢出的检测方法制造方法及图纸_技高网

堆栈溢出的检测装置、计算机装置和堆栈溢出的检测方法制造方法及图纸

技术编号:40966777 阅读:2 留言:0更新日期:2024-04-18 20:47
本发明专利技术提供一种堆栈溢出的检测装置、计算机装置和堆栈溢出的检测方法,该检测装置包括堆栈极限寄存器、堆栈历史寄存器和堆栈指针比较器,堆栈指针比较器用于获取内核寄存器组的当前堆栈指针值,判断当前堆栈指针值是否大于堆栈历史寄存器的最高栈顶值,若是,则删除所述最高栈顶值,将当前堆栈指针值写入堆栈历史寄存器;堆栈指针比较器还用于判断当前堆栈指针值是否大于堆栈极限寄存器中的极限值,若是,发送中断请求至中断控制器。通过堆栈历史寄存器和堆栈极限寄存器,使得程序员可以为堆栈配置合适的内存空间,使得内存空间不会过大,同时,降低堆栈溢出错误的调试难度。

【技术实现步骤摘要】

本专利技术涉及软件测试的,具体是涉及一种堆栈溢出的检测装置、计算机装置和堆栈溢出的检测方法


技术介绍

1、嵌入式软件进行开发时,软件堆栈容易溢出数据的存储区。堆栈溢出是由于往有限的内存空间写入过多的数据时,导致内存空间存储不了过多的数据,导致系统运行异常、死机或重启。为了防止堆栈溢出,一般对堆栈配置比较大的内存空间,使得程序运行时堆栈不容易溢出。但芯片的内存是有限的,堆栈的内存空间不适合配置过大的内存空间。

2、现有一种嵌入式软件堆栈溢出检测方法是通过链接文件将处理器随机存储器空间划分为堆栈区、堆栈溢出缓冲区和全局变量区;并在所述堆栈溢出缓冲区定义一个堆栈溢出缓冲数组;处理器上电,开启定时器;在定时器的中断服务程序中,读取堆栈溢出缓冲区和堆栈区的数据,计算最大堆栈使用量;判断最大堆栈使用量是否大于堆栈区尺寸,若是,判断为堆栈溢出;将溢出的上下文信息存入堆栈溢出缓冲数组;判断最大堆栈使用量是否小于或等于预设阈值,若是,根据堆栈溢出缓冲数组判断堆栈溢出位置。

3、但该堆栈溢出检测方法只针对堆栈溢出时的判断,没有对堆栈空间进行合适的配置,导致栈占用空间多,使得内核寄存器组的资源浪费。


技术实现思路

1、本专利技术的第一目的是提供一种记录最高堆栈数据,从而进行配置堆栈空间的堆栈溢出的检测装置。

2、本专利技术的第二目的是提供一种应用上述堆栈溢出的检测装置的计算机装置。

3、本专利技术的第三目的是提供一种应用上述计算机装置的堆栈溢出的检测方法

4、为了实现上述的第一目的,本专利技术提供的堆栈溢出的检测装置,包括堆栈极限寄存器、堆栈历史寄存器和堆栈指针比较器,堆栈指针比较器用于获取内核寄存器组的当前堆栈指针值,判断当前堆栈指针值是否大于堆栈历史寄存器的最高栈顶值,若是,则删除最高栈顶值,将当前堆栈指针值写入堆栈历史寄存器;堆栈指针比较器还用于判断当前堆栈指针值是否大于堆栈极限寄存器中的极限值,若是,发送中断请求至中断控制器。

5、由上述方案可见,堆栈历史寄存器用于记录堆栈的内存空间的占用情况,通过堆栈指针比较器获取内核寄存器组的当前堆栈指针值,若当前堆栈指针值大于最高栈顶值,则更新堆栈历史寄存器的最高栈顶值。若程序员一开始对该堆栈配置的内存过大,则根据堆栈历史寄存器的最高栈顶值配置内存,减少内存的配置空间。若程序员对该堆栈配置的内存过小,使得堆栈溢出,则通过中断处理程序获取堆栈溢出的上下文信息,通过堆栈溢出的数据确定内存的配置空间。通过堆栈历史寄存器和堆栈极限寄存器两者配合,使得程序员对栈配置合适的内存空间,使得内存空间不会过大,同时,减少堆栈溢出的次数。

6、进一步的方案中,堆栈极限寄存器的极限值为根据当前堆栈指针值与堆栈极限寄存器中的极限值的大小关系被动态设定的堆栈配置值。

7、由此可见,堆栈极限寄存器的极限值是根据堆栈是否溢出从而决定使用堆栈历史寄存器的数据或执行中断请求获得的数据进行配置。

8、进一步的方案中,堆栈指针比较器用于获取内核寄存器组的当前堆栈指针值后还包括:堆栈指针比较器在每个工作时钟周期都获取内核寄存器组的堆栈指针值与堆栈极限寄存器的极限值、堆栈历史寄存器的最高栈顶值进行比对。

9、由此可见,堆栈指针比较器可实时获取内核寄存器组的堆栈指针值,实时监控内核寄存器组的堆栈情况。

10、为了实现上述的第二目的,本专利技术提供的计算机装置,包括处理器、存储器和中断控制器,其特征在于:还包括上述的堆栈溢出的检测装置;中断控制器用于接收检测装置发送的中断请求,将中断请求发送至处理器;处理器根据中断控制器发送的中断请求跳转至存储器中的中断处理程序入口执行中断请求。

11、由上述方案可见,计算机装置中的处理器对堆栈溢出进行处理,该中断处理程序用于获取堆栈溢出的上下文信息,如寄存器状态、函数调用序列等帮助开发人员确认堆栈溢出的原因。

12、进一步的方案中,计算机装置还包括内核寄存器组,内核寄存器组包括堆栈指针,堆栈指针用于指示栈顶单元位置。

13、由此可见,内核寄存器中,部分内存被配置为堆栈内存,而堆栈指针用于指示栈顶的位置,堆栈指针比较器可获取此时栈顶位置值。

14、为了实现上述的第三目的,本专利技术提供的一种堆栈溢出的检测方法,应用上述的计算机装置,该方法包括:堆栈指针比较器获取内核寄存器组的当前堆栈指针值,判断当前堆栈指针值是否大于堆栈历史寄存器的最高栈顶值,若是,则删除所述最高栈顶值,将当前堆栈指针值写入堆栈历史寄存器;堆栈指针比较器判断当前堆栈指针值是否大于所述堆栈极限寄存器中的极限值,若是,发送中断请求至中断控制器;所述中断控制器接收所述检测装置发送的中断请求,将所述中断请求发送至所述处理器;所述处理器根据所述中断请求跳转至所述存储器中的中断处理程序入口执行所述中断请求。

15、由上述方案可见,通过堆栈历史寄存器和堆栈极限寄存器两者配合,使得程序员对栈配置合适的内存空间,使得内存空间不会过大,同时,减少堆栈溢出的次数。

16、进一步的方案中,堆栈指针比较器在每个工作时钟周期都获取内核寄存器组的堆栈指针值,与所述堆栈极限寄存器的极限值、堆栈历史寄存器的最高栈顶值进行比对。

17、由此可见,堆栈指针比较器可实时获取内核寄存器组的堆栈指针值,实时监控内核寄存器组的堆栈情况。

18、进一步的方案中,处理器堆栈结束后,根据当前堆栈指针值与堆栈极限寄存器中的极限值的大小关系,动态设定堆栈极限寄存器新的极限值。

19、由此可见,堆栈极限寄存器的极限值是根据堆栈是否溢出从而决定使用堆栈历史寄存器的数据或执行中断请求获得的数据进行配置。

20、进一步的方案中,根据当前堆栈指针值与堆栈极限寄存器中的极限值的大小关系,动态设定堆栈极限寄存器新的极限值包括:如当前堆栈指针值大于堆栈极限寄存器中的极限值,根据中断执行结果获取的溢出数据量上调极限值以形成新的极限值。

21、由此可见,若当前堆栈指针值大于堆栈极限寄存器中的极限值,则证明当前堆栈已溢出,所以需要通过中断执行结果获取堆栈溢出的现场数据,例如,溢出的数据量,重新配置堆栈的内存空间,使得后续堆栈减少溢出次数。

22、进一步的方案中,根据当前堆栈指针值与堆栈极限寄存器中的极限值的大小关系,动态设定堆栈极限寄存器新的极限值包括:如当前堆栈指针值不大于所述堆栈极限寄存器中的极限值,根据堆栈历史寄存器的最高栈顶值下调极限值以形成新的极限值。

23、由此可见,若当前堆栈针值不大于所述堆栈极限寄存器中的极限值,则证明当前堆栈没有溢出,则可以根据堆栈历史寄存器的最高栈顶值进行下调,使得堆栈的内存空间可以合理应用,减少内核寄存器组的资源浪费的问题。

本文档来自技高网...

【技术保护点】

1.堆栈溢出的检测装置,其特征在于,包括:

2.根据权利要求1所述的堆栈溢出的检测装置,其特征在于:

3.根据权利要求2所述的堆栈溢出的检测装置,其特征在于:

4.计算机装置,包括处理器、存储器和中断控制器,其特征在于:还包括权利要求1至3任一项所述的堆栈溢出的检测装置;

5.根据权利要求4所述的计算机装置,其特征在于:

6.一种堆栈溢出的检测方法,应用权利要求4或5所述的计算机装置,其特征在于,该方法包括:

7.根据权利要求6所述的堆栈溢出的检测方法,其特征在于:

8.根据权利要求6所述的堆栈溢出的检测方法,其特征在于:

9.根据权利要求8所述的堆栈溢出的检测方法,其特征在于:

10.根据权利要求8所述的堆栈溢出的检测方法,其特征在于:

【技术特征摘要】

1.堆栈溢出的检测装置,其特征在于,包括:

2.根据权利要求1所述的堆栈溢出的检测装置,其特征在于:

3.根据权利要求2所述的堆栈溢出的检测装置,其特征在于:

4.计算机装置,包括处理器、存储器和中断控制器,其特征在于:还包括权利要求1至3任一项所述的堆栈溢出的检测装置;

5.根据权利要求4所述的计算机装置,其特征在于:

...

【专利技术属性】
技术研发人员:朱国钟陈彩月
申请(专利权)人:珠海市凌珑宇芯科技有限公司
类型:发明
国别省市:

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

1