首页
论坛
博客
大讲堂
人才网
直播
资讯
技术文章
频道
登录
注册
x
如何利用现代嵌入式开发工具中的堆栈保护功能
2022-02-11 17:17:26
IAR Systems
点击关注->
创芯网公众号
,后台告知EETOP论坛用户名,奖励200信元
在开发以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
选项,即可针对被认定为需要保护的函数启用堆栈保护。
或者,您也可以使用
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中的堆栈保护功能,因此可以以更短的研发周期,来实现嵌入式开发人员的研发目标。
关键词:
EETOP 官方微信
创芯大讲堂 在线教育
半导体创芯网 快讯
相关文章
上一篇:
Imagination赢得著名调研机构Linley G
下一篇:
瑞萨电子推出64位RISC-V CPU内核RZ/Fi
全部评论
最新资讯
英飞凌推出业界领先的高精度无芯磁电流传感
UC伯克利华裔博士被逮捕!
高通重磅收购!
Qorvo荣获荣耀“质量管理金牌奖”
Spacechips 推动创新型 AI 赋能卫星应用发展
FRDM i.MX 9平台选型指南:FRDM i.MX 9
Jim Keller AI芯片公司大裁员
英特尔:将重铸荣光!
泰克与CN Rood:支持未来工程师,助力未来
GPU定位实锤!英伟达:这不是后门!
最热资讯
微软否认搬离中国
华邦电子推出先进 16nm 制程 8Gb DDR
e络盟专访:一家技术型分销商 | 树莓派等
AI应用的“安全锁”:安全闪存技术在满足行
浪潮信息G7服务器全面支持第五代英特尔®至
IAR全面支持芯科集成CX3288系列车规MCU
美国国家标准与技术研究院NIST SP800-193
开箱首发!瑞芯微旗舰芯RK3588开发板重磅发
瑞萨电子推出面向单电机应用优化的卓越MCU
大联大友尚集团推出基于ST产品的30kW Vien