问题标签 [ubsan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3067 浏览

c++ - Clang 运行时检查:打印回溯

Clang 编译器提供了许多有用的运行时检查,例如-fsanitize=unsigned-integer-overflow. 当其中一项检查失败时,我可以打印回溯(例如使用 gdb)吗?目前我得到了问题的确切位置,但我没有上下文。我怎样才能从这些运行时检查中获得更多信息,尤其是回溯?

0 投票
1 回答
1075 浏览

c++ - Clang 的 UBSan 和函数指针:这是非法的吗?

我正在尝试通过函数指针表调用一些 C++ 函数,该函数指针表作为 C 符号从共享对象中导出。该代码实际上正在运行,但 Clang 的未定义行为清理程序(= UBSan)认为我所做的调用是非法的,如下所示:

由于 Clang 的未定义行为清理器,通过函数指针间接调用返回 C++ 标准类对象的引用的函数是合法的,但对于用户定义的类是非法的。有人能告诉我它有什么问题吗?

我一直在尝试使用Clang-llvm 3.4-1ubuntu3CMake 2.8.12.2在Ubuntu 14.04上构建项目。要重现该现象,请将以下5个文件放在同一目录下并调用build.sh。它将创建一个 makefile 并构建项目,并运行可执行文件。

Foo.h

Foo.cpp

你好世界.cpp

CMakeLists.txt

构建.sh

我一直在试图找到一个线索来深入研究这个问题,并意识到这个问题是由消毒剂的“功能”选项(-fsanitize=function)发现的,但它没有太多的记录。如果你们能给我一个合理的解释,我会很感激这样一个运行时错误消息,它看起来像是来自另一个星球。谢谢。

Clang 在输出中指出的“未知”是什么?

下面是 addr2line 的输出,用于检查消毒剂的“未知”内容:

嗯,它真的看起来像我期待调用的函数。你能猜到 Clang 看起来有什么不同吗?

0 投票
3 回答
12500 浏览

c - 如何打破 gdb 中的 UBSan 报告并继续?

最新版本的 GCC 和 Clang 具有 Undefined Behavior Sanitizer (UBSan),它是一个-fsanitize=undefined添加运行时检测代码的编译标志 ( )。出现错误时,会显示如下警告:

packet-ber.c:1917:23: 运行时错误: 54645397829836991 的左移 8 位不能用“long int”类型表示

现在我想对此进行调试并在所述行上获得调试中断。对于 Address Sanitizer (ASAN),ASAN_OPTIONS=abort_on_error=1它会导致可捕获的致命错误。唯一似乎可用的 UBSan 选项是UBSAN_OPTIONS=print_stacktrace=1导致报告的呼叫跟踪转储。但是,这不允许我检查局部变量然后继续程序。-fsanitize-undefined-trap-on-error因此无法使用。

我应该如何在 UBSan 报告中闯入 gdb?虽然break __sanitizer::SharedPrintfCode似乎有效,但这个名字看起来很内部。

0 投票
1 回答
414 浏览

c++ - Clang++ UBSAN 报告类型“std::_Ios_Fmtflags”的无效值

以下代码在clang UBSAN编译时会崩溃

使用 Clang 3.6 编译:

$> clang++-3.6 -fsanitize=undefined -fno-sanitize=float-divide-by-zero,vptr,function -fno-sanitize-recover -o test test.cpp

然后程序崩溃了:

$> ./test in floatToString /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/ios_base.h :96:24:运行时错误:加载值 4294966271,这不是类型“std::_Ios_Fmtflags”的有效值

有人可以帮助我打开clang UBSAN时为什么会出现这个问题吗?

0 投票
1 回答
11361 浏览

c++ - 运行时错误:加载值 127,这不是类型“bool”的有效值

我在 Debian 8 x86_64 上使用 g++ 4.9.2。我遇到了一个未定义的行为清理程序 (UBsan) ( -fsanitize=undefined) 错误:

代码来自 Crypto++ 库。这是algebra.cpp:206(和一些相关代码)的代码:

它在几个地方被调用,例如:

InversionIsFast是一个bool,所以这应该不是问题。但我添加!!InversionIsFast()以防万一,问题仍然存在。

编辑:这是一个 grep InversionIsFast。它似乎已初始化。

我也在m_negateNextctor中进行了初始化。

问题是什么,我该如何解决?

0 投票
2 回答
11790 浏览

c++ - 使用 GCC Undefined Behavior Sanitizer

今天我读了一篇关于GCC Undefined Behavior Sanitizer (ubsan)的文章。但是,当我按照那里的步骤(添加-fsanitize=undefined到我的代码中)时,编译器(Ubuntu 15.04 上的 GCC 4.9.2)说没有定义一些引用:

我怎样才能解决这个问题?

0 投票
1 回答
8836 浏览

c++ - UBSan 和 Asan 与 GCC 4.9.2 一起使用

我已经用-fsanitize=undefined选项编译了我的应用程序。我现在如何测试我的应用程序的未定义行为?

另外,如何进行 Asan 检查?我已经用 编译了我的程序-fsanitize=address,它崩溃并显示以下输出:

我在 Ubuntu 15.04 上安装了 GCC 4.9.2。

0 投票
2 回答
3952 浏览

c++ - 如何抑制来自 UBsan 的一些无符号整数溢出错误?

我的大多数-fsanitize=unsigned-integer-overflow错误都是错误,但有时我会按预期明确使用它,这会导致 UBSan 产生误报。

有没有办法为特定表达式关闭 UBSan 无符号整数溢出检查?

编辑以回应 Shafik 评论,这里是一个例子:

大多数时候这是一个错误,有时不是。使用 UBSan,每次发生这种情况时都可以找到并修复错误,但我还没有找到一种方法来消除误报。

编辑 2:启用检查需要通过-fsanitize=integer(启用所有整数检查)或fsanitize=unsigned-integer-overflow. 从下面的评论看来,该检查仅在 clang 中可用,而在 GCC 中尚不可用。

0 投票
0 回答
647 浏览

g++ - Cygwin 的 UBsan 需要什么软件包?

我有一个测试脚本,可以通过各种配置进行打磨。该脚本测试Undefined Behavior sanitizer (UBsan)的可用性,然后在可用时执行构建。这是测试:

上面的测试设置HAVE_UBSAN=1在 Cygwin 上,这意味着 GCC 的 Cygwin 声称支持 UBsan(否则会产生错误)。但是,我在 Cygwin i686 和 x86_64 下都发现了一个链接错误:

显然,没有安装任何需要的东西gcc-coreor gcc-g++。我再次运行安装程序并搜索,ubsan但我得到了 0 次点击。

Cygwin 的 UBsan 需要哪些软件包?

当我这样做的时候,我不妨问问我希望经历的下一次失败。Cygwin 的 Asan 需要什么包?

提前致谢。

0 投票
2 回答
1635 浏览

clang - 未定义的行为清理程序抑制文件:无法解析抑制

使用-fsanitize=undefined使用 clang 3.6 编译应用程序后,我尝试启动检测程序,同时使用抑制文件忽略一些错误:

抑制文件 ubsan.supp 包含:

这会导致错误消息:

gcc 4.9 版本也是如此。我能找到的唯一文档是http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html,它适用于 clang 3.9,而我使用的是 3.6(其中不包含 ubsan 的文档)。

任何人都可以提供适用于 clang 3.6 的 ubsan 抑制文件的工作示例吗?

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