问题标签 [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 回答
714 浏览

c++ - 如何强制 ASan 显示不止一个调用堆栈行深度?

目前,当我运行我的应用程序时,我得到下一个输出:

它使用官方 ubuntu 14.04 gcc 和编译标志编译:

-fPIC -std=c++11 -fopenmp -Wall -pedantic -Wunused -O0 -g3 -fsanitize=address -fno-omit-frame-pointer -D_GLIBCXX_CONCEPT_CHECKS -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -fprofile-arcs -ftest-coverage --coverage

LLVM 和 clang 也是开箱即用的,应用程序是这样启动的:

为什么只出现一个调用堆栈行?如何获取与我的应用程序相关的上下文?


注意:如果我从 GDB 下运行

我得到可读的调用堆栈(带有行号和调用详细信息)。(gdb) 在哪里

但是我想在不为我的 100 多个单元测试应用程序中的每一个运行 gdb 的情况下获得调用堆栈输出 - 我想直接查看此类错误,这些错误ctest -VV按顺序运行我的所有测试。

0 投票
1 回答
477 浏览

c++ - 为什么 Xcode 在创建地址清理构建时定义 _LIBCPP_HAS_NO_ASAN?

Xcode 7 允许使用地址清理程序来查找 C/C++ 中的内存问题。

https://github.com/google/sanitizers/wiki/AddressSanitizer

打开地址清理程序会传递编译和链接器标志-fsanitize=address,并定义_LIBCPP_HAS_NO_ASAN.

从命令行构建我的库并在未定义的情况下在经过清理的构建上运行测试时,_LIBCPP_HAS_NO_ASAN我看到了不可重复的地址清理器报告的内存访问问题。正如 Xcode 所做的那样,定义_LIBCPP_HAS_NO_ASAN消除了消毒剂问题,但我很好奇它为什么需要这样做。

为什么我需要_LIBCPP_HAS_NO_ASAN用 AppleClang7 定义以避免在 libcxx 中出现内存访问问题?

0 投票
1 回答
100 浏览

c++ - 函数声明的数组大小会导致堆栈损坏,但是干净的编译?

这是我设法从可以干净编译但或多或少随机方式崩溃的原始源代码中提取的代码示例:

在使用 GDB 和 Address Sanitizer 工具进行一些调试会话后,我们发现:

是堆栈损坏的罪魁祸首。

知道 p 在运行时实例化并且数组大小声明是在编译时以固定值完成的,如何编译而不抱怨?编译时 p->f() 的值是多少?

此外,为什么 memset(写入额外 10 个字节的“未确定”数组大小)运行时没有分段错误?

0 投票
0 回答
50 浏览

c++ - 无效的 clang 消毒剂选项

我在 Clang 中使用 clang sanitizer。

下面的命令从链接复制到官方文档: http: //llvm.org/releases/3.7.0/tools/clang/docs/SanitizerCoverage.html

但是,它给了我下面的错误消息

bb在上面更改为edgefunc但它们都不起作用,而上面的链接说:

除了 -fsanitize=,还传递以下编译时标志之一:

我正在使用 Ubuntu 14。

0 投票
2 回答
1449 浏览

python - Python 本机模块中的消毒剂

我想将 GCC 的消毒剂用于本机模块。

我使用链接选项:

当我加载本机模块时,它会打印错误消息:

现在这似乎静态标志不起作用。是否可以仅将消毒剂用于共享对象,或者是否有必要将消毒剂直接链接到 python3?

0 投票
2 回答
1444 浏览

c++ - 使用地址清理程序和附加 asan 标志进行静态初始化顺序时出现 g++ 5 和 6 的错误

我的库doctest在travis CI - x86/x64 Debug/Release linux/osx上使用 200 多个构建进行了测试,并使用了广泛的编译器 - 从 gcc 4.4 到 6 和 clang 3.4 到 3.8

我所有的测试都是通过 valgrind 和地址消毒剂(也是 UB 消毒剂)进行的。

我最近发现并非 ASAN 的所有功能都默认启用 - 例如:

  • check_initialization_order=true
  • detect_stack_use_after_return=true
  • strict_init_order=true

所以我启用了它们并开始收到代码错误,如下例所示。

编译g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010

g++ -fsanitize=address -g -fno-omit-frame-pointer -O2 a.cpp

并像这样跑:

ASAN_OPTIONS=verbosity=0:strict_string_checks=true:detect_odr_violation=2:check_initialization_order=true:detect_stack_use_after_return=true:strict_init_order=true ./a.out

产生以下错误:

g++-6 (Ubuntu 6.1.1-3ubuntu11~12.04.1) 6.1.1 20160511

当我执行以下三件事之一时,错误就会消失:

  • 使用 clang++(任何版本)而不是 g++
  • 删除-O2并使用-O0
  • 去掉static前面的dummy

为什么会这样?如果它是一个错误 - 是否被报告?如何避免?

编辑:

@vadikrobot 说即使这样:也会static int data = 0; static int dummy = data; int main() { }产生问题。

编辑:

@ead 的答案是正确的,但是我找到了一种方法来规避删除静态虚拟对象并且 asan 不再断言:

0 投票
1 回答
11766 浏览

c++ - 错误:AddressSanitizer:地址 X 在 pc Y bp Z sp W 上的堆缓冲区溢出

我对动态内存管理和使用 Fsanitise 标志来查找内存管理问题非常陌生。我不能使用向量来存储数据——我需要使用原始数组以及“新建”和“删除”来管理堆对象。

当我尝试运行 EuclideanVectorTester 编译程序时出现以下错误,但不确定问题是什么,请有人赐教吗?

EuclideanVector.h 文件是这样的:

EuclideanVector.cpp 文件是这样的:

EuclideanVectorTester.cpp 文件是这样的:

0 投票
1 回答
356 浏览

ios - `UIImage imageNamed:@""` 的 Xcode 地址清理程序问题

在 Xcode 8 中激活地址清理程序时,我确实在以下代码行中遇到了问题:

imageName是一个NSString,对应的图像存在于@1x,@2x,@3x。地址消毒剂问题:

==2484==错误:AddressSanitizer:尝试在不是 malloc()-ed 的地址上释放:线程 T0 中的 0x01d37310 #0 wrap_free 中的 0x1fff73 (/private/var/mobile/Containers/Bundle/Application/C92A762E-DAAF-46D9 -857B-151BAF97D0BB/Example.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib+0x32f73) #1 0x2b50fab5 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x2ab5) #2 0x2b50fbe5 in (/System/Library/PrivateFrameworks /CoreUI.framework/CoreUI+0x2be5) #3 0x2b5463e1 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x393e1) #4 0x2b548307 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b307) # 5 0x2b548233 在 (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x3b233) #6 0x2b5606db 在 (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x536db) #7 0x2b560233 in (/System/Library/PrivateFrameworks/CoreUI.framework/CoreUI+0x53233) #8 0x2924b611 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632611) #9 0x2924b375 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632375) #10 0x2924baf3 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x632af3) #11 0x28eaf8bd in (/System/Library/Frameworks/UIKit. framework/UIKit+0x2968bd) #12 0x28d46e45 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12de45) #13 0x76c4d1 in -[MyClass myMethod] (/private/var/mobile/Containers/Bundle/Application/C92A762E -DAAF-46D9-857B-151BAF97D0BB/Example.app/Frameworks/XY.framework/XY+0x2e4d1) #16 0x28c2874b 在(/System/Library/Frameworks/UIKit.framework/UIKit+0xf74b) #17 0x28c284bb in (/System/Library/Frameworks/UIKit.framework/UIKit+0xf4bb) #18 0x28c2e5e5 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x155e5) #19 0x28c2bf5d in (/System/Library/Frameworks/UIKit.framework/UIKit+0x12f5d) #20 0x28c9707f in (/System/Library/Frameworks/UIKit.framework/UIKit+0x7e07f) #21 0x28e8a505 in (/System/Library/Frameworks/UIKit. framework/UIKit+0x271505) #22 0x28e8cacd in (/System/Library/Frameworks/UIKit.framework/UIKit+0x273acd) #23 0x28e977a7 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x27e7a7) #24 0x28e8b285 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x272285) #25 0x2c09aebf in (/System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices+0x15ebf) #26 0x2558e253 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xd0253) #27 0x2558d517 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xcf517) #28 0x2558c071 in (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0xce071) #29 0x254d799f in CFRunLoopRunSpecific (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation+0x1999f) #30 0x254d77b1 in CFRunLoopRunInMode (/System/Library/Frameworks/ CoreFoundation.framework/CoreFoundation+0x197b1) #31 0x28c8da55 in (/System/Library/Frameworks/UIKit.framework/UIKit+0x74a55) #32 0x28c88633 in UIApplicationMain (/System/Library/Frameworks/UIKit.framework/UIKit+0x6f633) # 34 0x34020aad 在 (/usr/lib/system/libdyld.dylib+0x1aad) 0x01d37310 位于 34 字节区域内的 0 字节 [0x01d37310,0x01d37332)

当我使用不存在的 imageName 时,地址清理程序对该行没有问题。

该问题似乎只影响 iOS 8,地址清理程序在 iOS 9 和 iOS 10(最新测试版)上没有问题。在 iOS 8 上,当我不将图像放入资产而是直接放入捆绑包时,它也可以工作。

0 投票
0 回答
343 浏览

c++ - libasan 在 time_t 时间 (time_t *__timer) -> sys/time.h 内给出堆栈缓冲区溢出

我在使用 libasan 改进我编写的一些代码时遇到了问题。

情况

-- 使用 -fsanitize=address -lasan 编译代码

-- 运行代码。

下面的示例

问题:此代码在示例程序中运行良好,但在我的应用程序中失败。应用程序因错误堆栈跟踪而崩溃:

现在,我明白这不是因为我上面发布的代码,而是我目前不明白的是如何找到我弄乱堆栈指针的位置..

任何帮助都将不胜感激。

0 投票
3 回答
1302 浏览

c++ - 如何确定 UBSAN 是使用 clang 还是 gcc 编译的?

我们使用以下代码来确定是否-fsanitize=address已在编译时为 clang 和 gcc 指定。我们如何确定是否-fsanitize=undefined已指定?