gcc - AddressSanitizer 抑制
问题描述
我正在尝试禁止来自 clang/gcc 中的地址清理程序的警告
我的源文件如下所示:
int foo(){
double bar[] = {7,8};
return bar[3];
}
int main(){
return foo();
}
显然第 3 行有溢出。
抑制文件 (myasan.supp) 包含:
interceptor_via_fun:foo
编译(clang 也会产生警告)并运行:
clang -O0 -g -fsanitize=address -fno-omit-frame-pointer sanitizerTest.c
ASAN_SYMBOLIZER_PATH=/software/clang/7.0.0/bin/llvm-symbolizer ASAN_OPTIONS=suppressions=myasan.supp ./a.out
但是地址清理程序仍然抱怨溢出。
==8119==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffeab4e75f8 at pc 0x0000004008bf bp 0x7ffeab4e75b0 sp 0x7ffeab4e75a8
READ of size 8 at 0x7ffeab4e75f8 thread T0
#0 0x4008be in foo() /tmp/asan/sanitizerTest.c:3
#1 0x400919 in main /tmp/asan/sanitizerTest.c:7
#2 0x7f549fbfb82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#3 0x400718 in _start (/tmp/asan/a.out+0x400718)
编译器是clang7。我也测试了clang6、gcc7。
知道如何进行这项工作吗?
解决方案
引用ASan 文档:
这种抑制机制应该只用于抑制外部代码中的问题;它不适用于使用 AddressSanitizer 重新编译的代码。
副手,我认为它只适用于共享对象边界。
要抑制:在您自己的代码中添加__attribute__((no_sanitize("address")))
到函数声明或使用编译时黑名单:
$ cat myasan.blacklist
fun:foo
$ clang -fsanitize=address -fsanitize-blacklist=myasan.blacklist -w sanitizerTest.c
$ ./a.out
$
推荐阅读
- python - 如何修复 django 中的无反向匹配?
- java - 如何使用 Java API 查找主题的复制因子?
- javascript - 为数组中的每个项目声明变量,同时基于并行数组为每个变量设置名称
- javascript - CSS 在产品中不起作用。Vue.js、Tailwind 和 Netlify
- sas - Importing all xlsx files in a folder
- javascript - 谷歌图表事件监听器 - 过滤失败后第一次点击
- javascript - 将 d3.queue 与 D3 v5 一起使用
- oauth - 如何为具有与客户端凭据类似功能的仅前端应用程序获取 OAuth 访问令牌?
- vba - 如何获取序列中的第一个和最后一个数字
- python - 使用 beautifulsoup 和 concurrent.futures 时如何返回我正在抓取的数据?