gpt4 book ai didi

c - 使用 gcc 4.8 构建时如何检测是否使用地址 sanitizer 构建?

转载 作者:太空狗 更新时间:2023-10-29 16:48:56 26 4
gpt4 key购买 nike

我正在开发一个用 C 语言编写的程序,我偶尔会使用地址清理器构建它,主要是为了捕获错误。该程序在启动时会在日志中打印一条横幅,其中包含以下信息:谁构建了它,构建它的分支,编译器等。我想如果二进制文件是使用地址 sanitizer 构建的,那也很好.我知道有 __has_feature(address_sanitizer),但这只适用于 clang。我尝试了以下简单程序:

#include <stdio.h>

int main()
{
#if defined(__has_feature)
# if __has_feature(address_sanitizer)
printf ("We has ASAN!\n");
# else
printf ("We have has_feature, no ASAN!\n");
# endif
#else
printf ("We got nothing!\n");
#endif

return 0;
}

当使用 gcc -Wall -g -fsanitize=address -o asan asan.c 构建时,会产生:

We got nothing!

使用 clang -Wall -g -fsanitize=address -o asan asan.c 我得到:

We has ASAN!

是否有等同于 __has_feature 的 gcc?

我知道有一些方法可以检查,例如使用地址清理器构建的程序的巨大 VSZ 值,只是想知道是否有编译时定义或其他东西。

最佳答案

From the GCC 4.8.0 manual :

__SANITIZE_ADDRESS__

This macro is defined, with value 1, when -fsanitize=address is in use.

关于c - 使用 gcc 4.8 构建时如何检测是否使用地址 sanitizer 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813412/

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