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

90、【OS】【Nuttx】【启动】栈溢出保护:配置项解析

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前 blog
【OS】【Nuttx】【启动】栈溢出保护:内联汇编
简单分析了下内联汇编的语法,把周边的点点滴滴细节分析完毕,终于可以开始继续往下分析了

栈溢出保护

还是这张熟悉的图
在这里插入图片描述
先回顾一下之前的 blog
【OS】【Nuttx】【启动】启动函数分析
这短短一行语句涉及的知识点可不少,结合下图,首先这条语句的作用是将栈指针减到栈底,然后栈底往上 64 字节区域作为栈溢出检测区域,其逻辑上的栈底存放在 r10 寄存器,至于为什么存放在 r10 寄存器,前面 blog 花了很大篇幅已经解释了
【OS】【Nuttx】【启动】栈溢出保护:r10 寄存器
在这里插入图片描述
有了这个基础后,可以继续往下去分析

ARMV7M_STACKCHECK

下面来看这个栈溢出检查配置项的描述
在这里插入图片描述
管中窥蠡,从配置项的描述中,可以看到栈溢出的一些整体和细节,下面讲几个关键点:

  • 首先 81 行,bool 表示这个配置项是一个布尔值(配置项开或关),引号中的文字是用户在配置界面中看到的提示信息:在每次函数调用时检查是否发生栈溢出
    之前 blog 【OS】【Nuttx】【构建】配置 stm32 工程 讲过如何配置 stm32 工程,并且里面还讲到了 configure 脚本的配置,在 bash 终端输入
./configure menuconfig

如果没有配置 configure 脚本,在 nuttx 工程目录下用 make menuconfig 也是一样的

打开配置界面后,在 System Type 目录下,可以找到栈溢出配置项的开关,这里的描述信息和 bool 后面的引号文字是一样的

在这里插入图片描述

  • 接着 82 行表示这个配置项默认是关闭的,这个配置界面可以看出来,没有被选上,后面会讲为什么要默认关闭这个配置项,如果想启用这个功能,需要手动在配置界面设置为 y
  • 83 行表示这个功能只在支持栈溢出检测的平台上启用,ARMV7M_HAVE_STACKCHECK 是另一个配置项,用来标识当前平台是否支持这种检测机制,可以看到这个配置项默认是关闭的,并且 bool 类型后面没有引号文字,说明该配置项不在配置界面中被支持,那么这个配置项在哪里被支持呢?
    在这里插入图片描述
    可以看到在另一份 Kconfig 文件中(描述 ARM 架构所支持的配置),有 ARMV7M_HAVE_STACKCHECK 的配置,这份配置文件是静态固定的不接受配置界面进行动态配置,应该由芯片厂商 FAE 或熟悉相关架构的人员进行固化,可以看到,我们所选的 STM32 系列是全系支持 ARMV7M_HAVE_STACKCHECK 栈溢出检测的
    在这里插入图片描述
  • 84 行 help 也很有意思,表示从 84 行帮助信息开始,用户在配置工具中选择该项的 Help 时会看到这些说明
    在这里插入图片描述
    点击这里的 Help,可以看到和 Kconfig 同款的帮助说明信息,还能看到默认值以及类型,定义配置项的文件位置,以及依赖性(这里的所有的依赖性都会显示出来,包括依赖项 ARMV7M_HAVE_STACKCHECK 的依赖项)
    在这里插入图片描述

先到这里吧,下篇 blog 继续

http://www.dtcms.com/a/316737.html

相关文章:

  • Swift 实战:用队列巧解 LeetCode 346 数据流中的移动平均数
  • 服务器端口连通性的测试工具和方法
  • XXL-JOB调度中心、执行器、Job之间的关系
  • MQTT:消息详解
  • 备忘录记事本 任务清单 html
  • 基于铁头山羊STM32的平衡车电机转速开环闭环matlab仿真
  • 线性规划最优解
  • 饿了么招java开发咯
  • tarjan找SCC,缩点建DAG,找唯一源头节点
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在火焰识别的落地优化
  • 不可变集合
  • nflsoi 7.31 题解
  • 信息化项目验收,项目成功的最后确认
  • Redis中的sdshdr的len和alloc那块的知识点详解
  • 【经验记录贴】在windows系统中启动服务
  • CMU-15445(7)——PROJECT#2-BPlusTree-Task#2Task#3
  • BGA 芯片贴片加工关键注意事项
  • Fiddler 中文版实战指南,如何构建高效的 API 调试工作流?
  • 第13届蓝桥杯Scratch_选拔赛_真题2021年11月27日
  • 老旧体育场馆照明翻新:预算有限?3 步实现 “低成本升级”
  • 在具身智能火热加持下,看 2025 年机器人学术年会中的热点主题。PNP机器人展示力控、灵巧手捕捉等案例。
  • 利用链上数据进行数字资产量化因子发现
  • 计划任务:被忽视的网络与系统安全边界
  • Linux-Day10.系统安全保护web服务管理
  • 【springcloud的配置文件不生效】
  • Linux系统:基础I/O
  • 【RK3576】【Android14】Uboot下fastboot命令支持
  • 闸机控制系统从设计到实现全解析:第 4 篇:Redis 缓存与分布式锁实现
  • JavaScript 概述
  • Linux 逻辑卷管理:LVM 原理与 Stratis、VDO 特性对比