0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用现代嵌入式开发工具中的堆栈保护功能

li5236 来源:IAR Systems 作者:IAR Systems 2022-03-29 14:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在开发以MCU为核心的嵌入式系统时,当软件程序向预设的数据结构(通常是一个固定长度的缓冲区)之外的程序调用堆栈的内存地址范围写入数据时,就会发生堆栈缓冲区溢出。这几乎必然会损坏附近的数据,甚至会改变返回函数。如果是有意为之,则这就是我们熟知的堆栈粉碎。防范堆栈缓冲区溢出的一种方法是使用堆栈canary,因其类似于在煤矿中使用金丝雀侦测毒气而得名。目前,在以IAR Embedded Workbench为代表的领先开发工具的所有最新版本中,均已支持堆栈保护功能。

堆栈保护功能已经成为最新嵌入式开发工具中必要的功能,但要在诸如IAR Embedded Workbench for Arm这样的行业标杆工具中实现堆栈保护,就要使用一种启发式算法来确认一个函数是否需要堆栈保护。如果任何函数内定义的局部变量为数组类型或包含数组类型成员的结构类型,则该函数就需要堆栈保护。此外,如果任何局部变量的地址被传播到函数之外,则该函数也需要堆栈保护。

如果一个函数需要堆栈保护,那么该函数的局部变量将被按序排放,将数组类型的变量在函数堆栈中被放置在尽可能高的地址。在这些变量之后,会放置一个canary元素。在函数入口处,canary被初始化。初始化值取自全局变量 __stack_chk_guard。在函数退出时,代码会验证canary元素是否仍然包含初始化值。如果该数值被改变,函数 __stack_chk_fail就会被调用。

以被广泛使用的IAR Embedded Workbench for Arm嵌入式开发工具为例,使用Project》Options》C/C++ Compiler》Code》Stack protection选项,即可针对被认定为需要保护的函数启用堆栈保护。

image.png

或者,您也可以使用Project》Options》C/C++ Compiler》Extra Options页面,指定 --stack_protection命令行来启用堆栈保护功能。

在实际应用实现堆栈保护

要使用堆栈保护,开发人员必须在应用中定义以下对象:

· extern uint32_t __stack_chk_guard全局变量 __stack_chk_guard在第一次使用前必须被初始化。如果初始化值是随机的,则安全性会更高。

· __interwork __nounwind __noreturn void __stack_chk_fail(void)__stack_chk_fail函数的作用是通知发生了错误,然后终止应用。请注意,这个函数的返回地址将指向失效函数。

arm\src\lib\runtime目录下的文件stack_protection.c提供了 __stack_chk_guard和 __stack_chk_fail函数的参考模板。

总结

由于今天全球半导体供应链紧张状况尚未得到缓解,因此许多MCU等嵌入式应用需要利用开发工具来保持核心技术和器件供应上的灵活性,并最大限度地在不同硬件平台上重用已完成的软件。在这种情况下,无论是MCU芯片开发商还是嵌入式系统工程师,都需要利用那些已被业界最广泛使用的开发工具,如IAR Embedded Workbench for Arm。由于这些工具也是其开发商和行业领先的MCU供应商多年合作的成果,可以针对不同的硬件资源体系和应用环境给出相应的帮助,如IAR Embedded Workbench中的堆栈保护功能,因此可以以更短的研发周期,来实现嵌入式开发人员的研发目标。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19121

    浏览量

    403592
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1169

    浏览量

    50219
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式软件安全解决之道-堆栈分析篇

    引言 做嵌入式开发,最怕遇到什么样的 Bug? 不是语法报错,也不是逻辑写反,而是设备运行毫无征兆地死机、重启,或是某个无关紧要的全局变量被静默篡改。当你连接仿真器复现时,往往发现PC指针已经
    的头像 发表于 04-23 14:16 201次阅读
    <b class='flag-5'>嵌入式</b>软件安全解决之道-<b class='flag-5'>堆栈</b>分析篇

    低代码可视化,破解嵌入式开发高门槛难题

    在工业控制、智能硬件、物联网快速发展的今天,嵌入式开发作为核心支撑技术,其高门槛却成为行业发展的绊脚石。专业编码要求高、新人上手慢、项目迭代滞后等问题,制约着人才储备与技术普及
    的头像 发表于 03-25 14:13 189次阅读
    低代码可视化,破解<b class='flag-5'>嵌入式开发</b>高门槛难题

    MIKROE与瑞萨签署多年MCU嵌入式开发工具支持协议

    2026年1月28日: 作为一家通过提供基于成熟标准的创新式硬件、软件产品来大幅缩短开发时间的嵌入式解决方案公司,MIKROE与总部位于东京的全球半导体解决方案提供商瑞萨电子签署了一项为期多年
    发表于 01-28 12:04 1330次阅读
    MIKROE与瑞萨签署多年MCU<b class='flag-5'>嵌入式开发工具</b>支持协议

    嵌入式开发常用函数速查表

    嵌入式开发,掌握常用函数的用法可以大大提高开发效率。无论是单片机初学者还是有一定经验的工程师,熟悉函数库和调用方式都是必备技能。今天,我们为大家整理一份嵌入式开发常用函数速查表,覆
    的头像 发表于 01-19 09:06 464次阅读
    <b class='flag-5'>嵌入式开发</b>常用函数速查表

    嵌入式开发在AI时代的发展变革展望

    嵌入式系统在现代科技应用广泛,随着工业场景的智能化应用需求不断增长,其复杂性随之增加,传统开发面临诸多挑战。IDE作为核心开发工具,需适应
    的头像 发表于 01-14 12:15 764次阅读
    <b class='flag-5'>嵌入式开发</b>在AI时代的发展变革展望

    什么是嵌入式应用开发

    。 · ‌医疗设备‌:如心电图仪、血压计等。 开发工具和技术 嵌入式开发过程中常用的工具包括: · ‌集成开发环境(IDE)‌:用于编写、编译和调试代码。 · ‌编译器‌:将高级
    发表于 01-12 16:13

    恩智浦嵌入式HMI应用开发工具GUI Guider 1.10.1全新上线

    恩智浦嵌入式HMI应用开发工具GUI Guider 1.10.1全新上线啦!新版本重点聚焦性能提升、工具链升级、多点触控体验以及开发板适配,进一步优化IDE界面,增强
    的头像 发表于 12-28 09:45 1927次阅读

    C语言单元测试在嵌入式软件开发的作用及专业工具的应用

    三、winAMS工具的核心功能与优势 winAMS是一款专业的嵌入式C语言单元测试工具,针对嵌入式开发的特殊需求提供了全面解决方案。其主要
    发表于 12-18 11:46

    分享一个嵌入式开发学习路线

    法,这些语法在嵌入式开发至关重要。 2. 技能进阶期(2-3个月) 从51单片机过渡到主流的ARM Cortex-M系列(嵌入式就业核心平台),学会使用STM32单片机,掌握嵌入式开发
    发表于 12-04 11:01

    嵌入式开发工具版本的选择策略

    今天,我们就来结合嵌入式常见的几个软件(如Keil / IAR、VS Code 、Source Insight、VMware、Git等),简单讲一讲嵌入式开发工具软件版本选择策略。 开发团队软件
    发表于 11-25 06:11

    嵌入式开发的关键点介绍

    嵌入式开发现代科技扮演着非常重要的角色。随着物联网的发展,嵌入式系统的需求也越来越大。嵌入式开发不仅需要
    发表于 11-13 08:12

    嵌入式开发工具的现状和发展简史

    集成开发环境(IDE)正在经历深刻变革。传统意义上披着“图形界面”外衣的编译器,已不再能满足当今的需求。随着嵌入式系统变得越来越强大,而且AI开始融入几乎所有设计开发者需要的是能够
    的头像 发表于 11-11 09:49 1469次阅读

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式软件
    的头像 发表于 08-20 09:15 4201次阅读

    嵌入式开发就业还有前景吗?

    嵌入式的发展前景如何呢?随着科技的飞速发展,嵌入式开发在各个领域的应用越来越广泛,因此嵌入式开发的就业前景也备受关注。以下将从智能家居、医疗设备、工业控制、汽车电子、航空航天等方面,探讨嵌入式
    发表于 07-16 10:47

    嵌入式开发入门指南:从零开始学习嵌入式

    随着物联网、智能硬件的发展,嵌入式开发成为热门技能之一。以下将为初学者提供一份详细的嵌入式开发入门指南,涵盖学习路径、必备工具、推荐资源等内容。 1. 嵌入式系统的定义与应用
    发表于 05-15 09:29