gpt4 book ai didi

gcc - 在 gcc 中默认启用 AddressSanitizer

转载 作者:行者123 更新时间:2023-12-02 01:16:51 27 4
gpt4 key购买 nike

为了能够对整个 Linux 发行版进行调试和模糊测试,我想将 ASAN(AddressSanitizer,https://en.wikipedia.org/wiki/AddressSanitizer)设置为 gcc 的默认选项。所以通常为了实现我想要的,一般来说,我在编译一个linux包之前设置了以下变量:

CFLAGS="-fsanitize=address,undefined -Wformat -Werror=format-security -Werror=array-bounds -g" 
CXXFLAGS="-fsanitize=address,undefined -Wformat -Werror=format-security -Werror=array-bounds -g"
LDFLAGS="-fsanitize=address,undefined"

并尝试编译和运行我的代码。我想让它默认为 gcc。

一个选择是使用规范文件:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html .但是我没有找到一种方法来设置“捕捉所有规则”来编译和链接我所有的 c/c++ 代码与 AddressSanitizer。

我的问题是:

  • 任何示例如何使用规范文件来做到这一点?
  • 这是最好的方法吗?
  • 还有其他替代方法吗?

最佳答案

首先,请务必查看 Tizen 中现有的整个发行版 Asan 支持(还有 here )和 Gentoo .

一般来说有两种主要的方法:

  • 自定义构建系统以默认启用 Asan,通常使用 CFLAGSCXXFLAGS;这并不总是有效,因为很多包都忽略了它们(我认为这就是 Hanno Boeck 在 Gentoo 中所做的)
  • 替换 /usr/bin/gcc/usr/bin/g++/usr/bin/cc(并且可能 x86_64-linux-gnu-gcc, x86_64-linux-gnu-g++) 带有包装器,可以添加 Asan 标志并将调用重定向到原始可执行文件(这是我们最终采用的方法Tizen 并发现它非常成功)

作为旁注,我建议添加以下选项

CFLAGS += -fsanitize-recover=address,undefined

否则启动会在过早的阶段失败。还要查看上面链接中的建议设置 ASAN_OPTIONS,人们花了很长时间才弄明白。

关于gcc - 在 gcc 中默认启用 AddressSanitizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42269591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com