问题标签 [address-sanitizer]

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 投票
1 回答
303 浏览

c - 未修改的本地人的地址会在 setjmp/longjmp 中损坏吗?

如果一个人最终陷入使用 setjmp/longjmp (don't ask)卡住的情况,那么编译器会发出很多很好的警告,说明你什么时候做错了。

但是在 Clang 中-Wall -Wextra -pedantic使用Address Sanitizer进行构建时,我得到了一个大致平行于以下内容的案例:

在 longjmp 上,查看helper堆栈帧时,错误指针为空。如果我查看outer()框架,它会说错误已“优化”。

这很令人费解,因为我正在编译-O0 所以“优化出来”的说法很奇怪。但是与longjmp-y的大多数事情一样,我想知道是什么让编译器无法决定它将提前将错误地址放入哪个寄存器......然后让它失效。

地址消毒剂是在打我吗,还是我实际上必须写如下内容:

当我对此进行研究时,我注意到jmp_buf在我看到的任何示例中 s 都不是本地人。那是你不能做的事情吗?:-/


注意:有关构造的“语言律师”问题,请参阅下面的@AnT 的回答和评论setjmp() ? ... : ...。但我实际上在这里发生的事情原来是函数退出后的一个损坏的 longjmp 调用。根据longjmp()文档(也:常识),这绝对是错误的;我只是没有意识到这就是发生的事情:

如果调用 setjmp 的函数已退出,则行为未定义(换句话说,只允许长跳转调用堆栈)

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 投票
0 回答
518 浏览

xcode - 与 Xcode 7 beta、地址清理和 CocoaPods + adMob 的链接错误

我成功地将一个 iOS 项目转换为 Xcode 7 beta + Swift 2(它运行并且测试工作)。

但是,当我打开新的地址清理器(选项+运行 -> 运行 -> 诊断 -> 启用地址清理器时,我从链接器收到以下消息:

似乎引用了我用于 adMob pod 的 CocoaPods。我将 CocoaPods 本身更新到了最新版本,并将 adMob Pod 更新到了最新版本。

任何提示如何让 Address Sanitizer 与 CocoaPods 或 AdMob CocoaPod 一起工作,无论哪个导致这种情况?

0 投票
1 回答
5342 浏览

c++ - MinGW-w64 的 gcc 和 Address Sanitizer

我发现可以安装 MinGW-w64 5.1 -fsanitize=address。它编译得很好,当它开始链接时,我得到了数千个:

我用谷歌搜索并发现 libasan 引用了各个地方,但还评论说,当您包含-fsanitize=address它时,它会自动包含该库以进行链接。我在 MinGW-w64 5.1 安装目录中搜索“asan”,但在任何地方都找不到。

我需要添加什么才能使用 MinGW-w64 中的地址清理功能?谢谢你。

0 投票
0 回答
254 浏览

c++ - 字符串的统一初始化向量导致地址清理程序错误

以前我有代码可以创建一个字符串向量并通过以下方式添加一个元素:

此代码按预期编译和工作。如果我尝试将字符串向量创建为

代码编译得很好,但是在启用地址清理程序的情况下编译时,代码在运行时失败并出现错误:

我第二次尝试创建导致此错误的向量时的错误是什么?作为参考,这是启用了 -std=c++11 和地址清理程序的 Clang 3.7。

0 投票
1 回答
1728 浏览

c - 我如何知道是否在编译时启用了 Leak Sanitizer?

GCC 和 Clang 编译器都支持LeakSanitizer,这有助于发现 C 程序中的内存泄漏。有时内存泄漏是不可避免的(例如,因为它正在测试套件中进行测试)。

这样的内存可以使用Leak Sanitizer 接口进行注释:

然而,这将在不支持 LSan 的编译器上中断。在 Address Sanitizer 中,此构造可用于检测 ASAN 的可用性:

在 Clang中没有__has_feature(leak_sanitizer)检测到 LSan 的__SANITIZE_LEAKS__存在,对于 GCC 也不存在。无论如何,我如何检测 ASAN 可用性?请注意,LSan 可以独立于 AddressSanitizer 和 ThreadSanitizer 启用。

0 投票
1 回答
593 浏览

gcc - 在 gcc 4.7 中有没有使用 asan 的方法

根据 address-sanitizer 主页,它仅与 gcc 4.8 或更高版本一起提供。无论如何都没有将它与gcc 4.7一起使用吗?

0 投票
1 回答
8836 浏览

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

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

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

我在 Ubuntu 15.04 上安装了 GCC 4.9.2。

0 投票
1 回答
3039 浏览

xcode - 如何在 Xcode 中启用 Clang Address Sanitizer?

正如在 WWDC 2015 上宣布的那样,Clang Address Sanitizer 正在被引入 Xcode 和 OS X。

会话 413:高级调试和地址清理程序

如何为 Xcode 项目启用 Clang Address Sanitizer?

0 投票
2 回答
3501 浏览

clang - 为什么在 Xcode 7 中禁用了“启用地址清理程序”?

我在新 Xcode 7 中的Apple 文档中阅读了有关运行时清理的信息,因此我查找了它,发现它已被禁用。我正在使用 Xcode 7 GM 种子。

当我进入方案 > 诊断选项卡的运行操作时,该Enable Address Sanitizer选项被禁用:

在此处输入图像描述

有一些关于如何禁用其他选项的解释,但没有提及为什么禁用清理选项:

一些诊断工具可以与其他工具结合使用;“诊断”窗格上的可用选项被启用和禁用,因为选择了不同的选项来帮助您选择选项组合。例如,启用地址清理程序和其他不兼容的工具被禁用并且无法选择

查看 Addresssanitizer的Clang 3.8 文档,看起来它也可以通过添加标志来启用:-fsanitize=address。但是在构建设置中应该在哪里使用这个标志是一个谜,而且值得怀疑,因为它也作为方案中的复选框选项存在。

也找到了这个SO answer,但它相当复杂,并且可能已经过时,因为它早在 2013 年。