发现有一个缓冲区溢出问题(一个奇怪的错误,在注释掉一个完全不相关的代码段后消失了)。
我试了很多方法,都没有作用。发现有一个名为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等类似方法。但都没有奏效。
|
|