gpt4 book ai didi

Clang 的 ASan 不检测悬空指针的使用

转载 作者:行者123 更新时间:2023-11-30 16:44:59 24 4
gpt4 key购买 nike

在工具比较的背景下,如果 ASan 能够检测到以下程序中的问题,我不想对它不公平:

$ cat t.c
#include <stdio.h>

int *G;

int f(void) {
int l = 1;
int res = *G;
G = &l;
return res + *G;
}

int main(void) {
int x = 2;
G = &x;
f();
printf("%d\n", f());
}
$ clang -v
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
...
$ clang -O2 -fsanitize=address t.c
$ ./a.out
1
$ clang -fsanitize=address t.c
$ ./a.out
2

第二次调用 f 时第一次出现 G 会调用未定义的行为,因为此时 G 是不确定的。此外,G 会立即取消引用,这使得它成为人们可能期望 ASan 检测到的一种内存错误。这是 ASan 规范的一部分,它有时无法检测到它应该找到的问题,但我想知道我是否可以使用它来找到这个特定的问题。

我找到了选项-fsanitize-address-use-after-scope here ,但是这个选项在我使用的 Clang 版本中不起作用:

$ clang -fsanitize=address t.c -fsanitize-address-use-after-scope
clang: error: unknown argument: '-fsanitize-address-use-after-scope'

是否有一个 ASan 版本可以在执行上述程序时标记错误,无论是否有特殊的命令行选项?

最佳答案

您在这里讨论的是返回后使用错误。这些应该由 ASan 支持,但由于内存开销显着增加而默认禁用(例如,参见 here 了解详细信息)。如需启用,请运行 ASAN_OPTIONS=detect_stack_use_after_return=1

不幸的是,我无法检查它是否适用于您的特定情况,但如果不适用,您可能应该在 ASan's tracker 提交错误.

关于Clang 的 ASan 不检测悬空指针的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44281933/

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