首页
论坛
博客
大讲堂
人才网
直播
资讯
技术文章
频道
登录
注册
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
0
全部评论
最新资讯
你敢要英特尔就有!至强6新品治好选择困难
渗透全过程曝光!俄罗斯间谍如何在ASML窃取
日本2纳米面临三大难题
苹果CEO库克股票套现!
从技术到价值:英特尔助力生态伙伴突破业务
贸泽开售面向AI、工业、汽车、农业和医疗应
英特尔新篇章:重视工程创新、文化塑造与客
PTS845 轻触开关系列使用寿命延长至百万次
三进制涅槃重生!华为公布三进制逻辑门专利
消息称立讯精密拟赴港上市 计划融资 20-3
最热资讯
瑞萨电子推出具备预验证固件的完整锂离子电
Altera FPGA突破创新边界,加速智能边缘领
大联大世平集团推出以NXP产品为主的汽车UWB
手把手教你制作高速吹风机
与产业领袖同行:大联大商贸中国区总裁沈维
实现不间断能源的智能备用电池第二部分:BB
从富士通到RAMXEED,以全新一代FeRAM迎接边
DBX-TV公司的高品质音频与Amlogic的SoC相
首届玄铁RISC-V生态大会上海举办,图灵奖得
大联大诠鼎集团推出基于联咏科技产品的智能