Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clang 未定义的行为消毒剂抑制文件:无法分析抑制_Clang_Sanitizer_Ubsan - Fatal编程技术网

Clang 未定义的行为消毒剂抑制文件:无法分析抑制

Clang 未定义的行为消毒剂抑制文件:无法分析抑制,clang,sanitizer,ubsan,Clang,Sanitizer,Ubsan,使用-fsanize=undefined编译带有clang 3.6的应用程序后, 我试图启动插入指令的程序,同时使用抑制文件忽略一些错误: UBSAN_OPTIONS="suppressions=ubsan.supp" ./app.exe 抑制文件ubsan.supp包含: signed-integer-overflow:example.c 这将导致一条错误消息: UndefinedBehaviorSanitizer: failed to parse suppressions GCC4.9

使用-fsanize=undefined编译带有clang 3.6的应用程序后, 我试图启动插入指令的程序,同时使用抑制文件忽略一些错误:

UBSAN_OPTIONS="suppressions=ubsan.supp" ./app.exe
抑制文件ubsan.supp包含:

signed-integer-overflow:example.c
这将导致一条错误消息:

UndefinedBehaviorSanitizer: failed to parse suppressions
GCC4.9版本也是如此。 我能找到的唯一文档是,它是针对Clang3.9的,而我使用的是3.6(它没有包含ubsan的文档)

有人能提供在Clang3.6中工作的ubsan抑制文件的工作示例吗

编辑:通过浏览ubsan的源代码,我发现唯一有效的抑制类型可能是“vptr_check”-但不知道我在看哪个版本。
有人能确认在clang 3.9中有更多的抑制类型可用吗?

我通过创建三个文件来尝试它,
compile.sh
main.cpp
suppressions.supp
,如下所示。
无符号整数溢出
不是
未定义
的一部分,因此需要特别包括它。这在我的机器上使用了叮当声3.9

因此,我想更多的抑制类型在
clang-3.9
中是有效的

# compile.sh
set -x 
UBSAN_OPTIONS=suppressions=suppressions.supp:print_stacktrace=1 #:help=1
export UBSAN_OPTIONS
clang++-3.9 -g -std=c++11 -fsanitize=undefined -fno-omit-frame-pointer -fsanitize=unsigned-integer-overflow main.cpp
./a.out

// main.cpp
#include <bits/stdc++.h>
#include <bits/stl_tree.h>
using namespace std;
int main(int argc, char **argv) {
  unsigned int k = UINT_MAX;
  k += 1;
  return 0;
}

# suppressions.supp
unsigned-integer-overflow:main.cpp
#compile.sh
集合x
UBSAN_OPTIONS=suppressions=suppressions.supp:print_stacktrace=1#:help=1
导出UBSAN_选项
clang++-3.9-g-std=c++11-fsanitize=undefined-fno省略帧指针-fsanitize=unsigned integer overflow main.cpp
/a.out
//main.cpp
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
无符号整数k=UINT_MAX;
k+=1;
返回0;
}
#suppressions.supp
无符号整数溢出:main.cpp

我没有花时间确切地找出在
clang-3.6
中哪些抑制可用,但在
clang-3.7
中,似乎只有
vptr\u check
可用作抑制。从
clang-3.8
开始,抑制列表将是检查的列表,加上
vptr\u检查
。 在
clang-3.9
中,检查为:

  • “未定义”
  • “空”
  • “未对齐的指针使用”
  • “对齐”
  • “对象大小”
  • “有符号整数溢出”
  • “无符号整数溢出”
  • “整数除以零”
  • “浮点除以零”
  • “移位基数”
  • “移位指数”
  • “界限”
  • “遥不可及”
  • “返回”
  • “弗拉界”
  • “浮动强制转换溢出”
  • “布尔”
  • “枚举”
  • “功能”
  • “返回非空属性”
  • “非空属性”
  • “vptr”
  • “cfi”
  • “vptr_检查”