[STM32L4] 将asan库添加到STM32CubeIDE中?

[复制链接]
101|9
石榴大王 发表于 2025-10-14 13:46 | 显示全部楼层 |阅读模式
发现有一个缓冲区溢出问题(一个奇怪的错误,在注释掉一个完全不相关的代码段后消失了)。

我试了很多方法,都没有作用。发现有一个名为sanitizer的库,它可以增加对数组访问的检查,这样我就可以发现任何越界写入。通过向编译器选项添加-fsanitize=address来启用。但我这样操作时,出现这个错误:
arm-none-eabi-gcc: fatal error: cannot read spec file 'libsanitizer.spec': No such file or directory
这个错误意味着libsanitizer没有安装。
我已经试了access属性、向操作数组的函数添加长度参数、-Warray-bounds、-Wformat-overflow、-Wstringop-overflow和-fbounds-check。没有起到任何作用,因为编译后的代码在有和没有它的情况下大小相同,以及使用strlcat代替strcat等类似方法。但都没有奏效。

classroom 发表于 2025-10-14 15:13 | 显示全部楼层
ASan需要操作系统和库支持
cr315 发表于 2025-10-14 16:14 | 显示全部楼层
ASan会显著增加代码大小和内存使用,这对资源受限的MCU不现实。
duo点 发表于 2025-10-14 17:14 | 显示全部楼层
arm-none-eabi-gcc是裸机工具链,不包含ASan的运行时组件。
elephant00 发表于 2025-10-14 15:15 | 显示全部楼层
用硬件断点,零运行时开销,直接定位问题代码。
flycamelaaa 发表于 2025-10-14 18:15 | 显示全部楼层
手动插入边界检查,用宏封装检查,减少代码侵入性。
flycamelaaa 发表于 2025-10-14 19:16 | 显示全部楼层
在关键数组操作前后插入调试日志。
jcky001 发表于 2025-10-14 20:17 | 显示全部楼层
检查是否因对齐问题导致缓冲区实际大小不足
onlycook 发表于 2025-10-14 21:17 | 显示全部楼层
-O0禁用优化,观察问题是否消失。
powerantone 发表于 2025-10-14 15:19 | 显示全部楼层
对于STM32L4,硬件断点+手动检查+MPU是最实用的组合。ASan的缺失是工具链限制,而非配置问题。建议从问题复现的最小代码入手,结合硬件调试功能定位根本原因。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部