如何为STM32 ARM GCC添加消毒剂支持?

qzwqbdag  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(195)

我正在开发一个大型嵌入式系统(Windows上的STM32 F423 CPU和CubeIDE环境,所有代码都是C),最近我发现一定是某个地方缓冲区溢出了。mbedtls库报告了一个错误,表明服务器没有在要求的时间内响应。问题是,当我注解我最近添加的一个函数时(完全不相关,甚至在错误发生前都没有执行),一切都运行正常,我认为函数的存在导致内存排列发生偏移,其他一些代码有缓冲区溢出bug,它覆盖了mbedtls库中的某个变量。然后Mbedtls向服务器发送一些无效数据,服务器没有响应。这是我的猜测。
我尝试将mbedtls更新到最新版本。我还尝试通过以下方法查找有问题的指针操作:

  • 添加各种编译器标志:第一个月第一个月,第一个月第一个月,第一个月第二个月,第一个月第三个月
  • -fbounds-check-这看起来没有任何作用,因为编译后的代码有和没有它的大小是一样的,
  • 向大多数采用指针参数的函数添加访问属性,
  • -fsanitize=address添加到编译器选项中。

最后一件事是有问题的,因为它会触发编译器错误:

arm-none-eabi-gcc: fatal error: cannot read spec file 'libsanitizer.spec': No such file or directory

您知道如何在CubeIDE工具链的GCC中添加杀毒软件支持吗?
我也得到了一个使用git bisect的建议,我还打算尝试一下,虽然我的希望并不高,因为很可能这个bug很久以前就被引入了,而引入它的版本也会工作得很好,因为不同的内存安排。
此外,有消毒剂将有助于找到其他指针问题,我可能有和不知道。

vwoqyblh

vwoqyblh1#

虽然GCC的AddressSanitizer文档将ARM列为支持的平台,但它仅适用于Android
要添加支持,您需要移植一个ASAN运行时库(如AndroidGCCLLVM库)并定义.spec文件。整个过程超出了SO的范围,但可能会出现的具体问题可能是主题。

相关问题