当前位置: 首页 > article >正文

【学习笔记】检测基于RTOS的设计中的堆栈溢出-第2部分

有许多技术可用于检测堆栈溢出。有些使用硬件,而有些则完全在软件中执行。正如我们很快将看到的那样,在硬件中具有这种能力到目前为止是更可取的,因为堆栈溢出可以在发生时立即检测到,事实上,可以避免,因为硬件实际上可以防止对无效访问的写入。

硬件堆栈溢出检测机制通常触发异常处理程序。异常处理程序通常将当前PC(程序计数器)和可能的其他CPU寄存器保存到当前任务的堆栈上。

当然,由于异常发生在我们试图访问堆栈之外的数据时,处理程序将覆盖应用程序中的一些变量或另一个堆栈;假设溢出堆栈的基础之外有RAM。

在大多数情况下,应用程序开发人员需要决定如何处理堆栈溢出情况。异常处理程序应该将嵌入式系统置于已知的安全状态并重置CPU还是什么都不做?

如果您决定重置CPU,您可能会找到一种方法来存储发生溢出的事实以及导致溢出的任务,以便您可以在重置时通知用户。

技术1:使用堆栈限制寄存器

一些处理器(不幸的是很少)具有简单但高效的堆栈指针溢出检测寄存器。此功能可在基于ARMv8-MCPU架构的处理器上使用。当CPU的堆栈指针低于(或高于取决于堆栈增长)此寄存器中设置的值(我们称之为SP_Limit寄存器)时,会生成异常。图3中的图形显示了这是如何工作的。


http://www.kler.cn/a/419644.html

相关文章:

  • 【HM-React】02. React基础-下
  • 【代码随想录|贪心算法03】
  • 今天我们来聊聊Maven中两个高级的概念—— 插件和目标
  • CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习
  • PPT不能编辑,按钮都是灰色,怎么办?
  • LabVIEW内燃机气道试验台测控系统
  • 威胁驱动的网络安全方法论
  • 如何在 Ubuntu 18.04 上设置 Apache 虚拟主机
  • 家校通小程序实战教程03学生管理
  • 【特斯拉的自动驾驶好在哪】
  • kernel crash数据解析
  • 【Linux】————(日志、线程池及死锁问题)
  • 贪心算法专题(四)
  • Linux的奇妙冒险——进程PCB第一讲
  • 前缀和篇——繁星斗斗数字交织中,觅得效率明月辉光(1)
  • 利用oracle spool配置数据导出脚本
  • 5.2.2 动作标记 getproperty
  • Linux的基本操作及虚拟机设置
  • Spring中@Transactional注解与事务传播机制
  • 【小记】如何刷机
  • Linux:内存文件 基础io
  • 【云原生系列】如何判断哪家云服务器提供商更适合我
  • 基于Matlab BP神经网络的电力负荷预测模型研究与实现
  • 大数据技术Kafka详解 ② | Kafka基础与架构介绍
  • 【手术显微镜】市场高度集中,由于高端手术显微镜的制造技术主要掌握于欧美企业
  • C++草原三剑客之一:继承