问题标签 [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.
gcc - 将功能列入黑名单的 gcc (4.8.3) 消毒剂选项
我正在 gcc 4.8.3 上编译我的代码。我已启用-fsanitize=address
选项。但是我的程序在启动过程中退出,在 3rd 方库代码中抛出全局缓冲区溢出错误。所以我试图跳过这个函数(或调用者函数)的消毒剂。我试过__attribute__((no_sanitize("address")))
了,但编译器会抛出警告,‘no_sanitize’ attribute directive ignored
即使尝试过-fsanitize-recover=address
,但地址上似乎不支持恢复。任何人都可以帮助我如何让我的程序在第一个错误后继续运行,或者黑名单功能跳过清理?
编辑
android - 为 NDK 库使用 AddressSanitizer
我有一个包含 Java 部分和 NDK 库部分的 Android 应用程序。我想测试 NDK 部分,所以我使用 AddressSanitizer 按照此处的说明进行编译: https ://github.com/google/sanitizers/wiki/AddressSanitizerOnAndroid
现在,我想在手机上运行该应用程序。根据上面的指令,我还需要运行ndk库提供的asan_device_setup脚本。但是当我运行脚本时,我得到了
我尝试直接运行该应用程序,但最终出现以下错误,因此我认为需要设备设置步骤...
非常感谢您对解决此问题的任何帮助。谢谢!
c++ - std::vector 的手动中毒
在下面的代码片段中,有一个并非微不足道的错误,但我希望像 AddressSanitizer 这样的工具能够捕获它。
当对向量进行范围限定并在范围之外打印时,catch 引用会抛出错误 use-heap-after-free。
但是当没有范围时,std::vector
实现可能不会在 pop_back 之后释放内存,因此引用仍然指向有效内存。
我四处搜索,发现您可以手动毒化内存,我想知道这是否已在 STL 中实现(https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning)
address-sanitizer - 地址消毒剂的假阴性?
考虑下面的代码。当我使用地址清理程序编译和运行它时,没有显示错误。但是应该有一个错误,即分配/访问超出范围的内存位置?为什么地址消毒剂没有检测到它?
谢谢!
c++ - Address Sanitizer 的两个问题
在一个爱好项目中,我使用地址清理程序 (-fsanitize=address) 和 g++-6 (Homebrew GCC 6.3.0_1) 6.3.0。
我收到一个我不明白的错误,即:
==94266==AddressSanitizer CHECK failed: ../../../../libsanitizer/asan/asan_globals.cc:146 "((AddrIsAlignedByGranularity(g->size_with_redzone))) != (0)" (0x0, 0x0)
#0 0x10b60cd3d in __asan::AsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (libasan.3.dylib+0x5dd3d)
#1 0x10b612be3 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (libasan.3.dylib+0x63be3)
玩了一段时间后,我注意到我在两个不同的类中使用正则表达式,如果我删除其中一个,问题就会消失。我想了解为什么以及我能做些什么。
因此,我的下一个尝试是构建问题的最小示例,我想出了以下内容:
如果我使用“g++-6 -fsanitize=address a.cpp m.cpp”编译然后运行“./a.out”,程序将永远挂起,而“g++-6 a.cpp m.cpp”后跟“ ./a.out" 按预期工作。
这不是我想在这里演示的内容(因为我没有收到 AddressSanitizer CHECK failed 错误),但问题可能相关吗?
我也确实看到了其中一些,只是为了完整:
ld: warning: direct access in function '__GLOBAL__sub_D_00099_0_a.cpp' from file '/var/folders/lq/t18hc5bn0c5bxf7h7nn609f40000gp/T//ccTC4rgj.o' to global weak symbol 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::__cxx11::regex_traits<char>::lookup_collatename<char const*>(char const*, char const*) const::__collatenames' from file '/var/folders/lq/t18hc5bn0c5bxf7h7nn609f40000gp/T//ccTC4rgj.o' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
编辑:忘了提到我也注意到的一个细节。如果我注释掉 m.cpp 中的正则表达式 var 're',问题也会完全消失。
谢谢你的帮助!
xcode - Xcode Address Sanitizer 与 ccache
我正在尝试在 Xcode 中使用 Address Sanitizer,但我也在使用 ccache 来加速我的构建。为此,我CC
在 Xcode 项目级别设置了标志,以指向我存储在~/projects/support/cmake/ccache-clang
. 脚本读取
这样就达到了预期的效果(如果安装在开发人员的系统上,则使用ccache)。这运作良好。
现在,当我们为给定方案打开 Address Sanitizer 时,问题就来了。构建成功完成,但是当我们尝试运行时,我们终于看到了这个错误:
也许这是由于 Xcode 中的一些 hacky 实现,它试图解析编译器的路径以确定版本?
想知道如何修改我的脚本以允许 Address Sanitizer 工作。当前的解决方法是CC
在我们需要进行消毒工作时删除覆盖的标志。
使用 Xcode 8.3.1
gdb - 原因:AddressSanitizer:SEGV 位于未知地址(空指针)
我需要一些建议如何识别段错误的来源。
用 ASAN 编译:
从 gdb 开始:
1. 编辑:
上面的输出是针对 64 位 (x86_64) 编译的,在 32 位上会生成以下输出:
2.编辑:
不确定这意味着什么/为什么会导致段错误?
c - Clang 的 ASan 未检测到悬空指针的使用
在工具比较的上下文中,如果 ASan 可以检测到以下程序中的问题,我不想对它不公平:
第二次的G
第一次出现f
被称为调用未定义的行为,因为G
在那一点上是不确定的。此外,G
立即取消引用,这使得 ASan 可能会检测到这种内存错误。这是 ASan 规范的一部分,它有时无法检测到它应该找到的那种问题,但我想知道我是否可以使用它在这里找到这个特定问题。
我在-fsanitize-address-use-after-scope
这里找到了这个选项,但是这个选项在我使用的 Clang 版本中不起作用:
是否有 ASan 版本在执行上述程序时标记错误,有或没有特殊的命令行选项?
crash - 为什么非asan bulid不会崩溃?
我目睹了 Asan 编译环境的崩溃。
但是,在正常的编译环境中,并没有崩溃。
有什么区别?
这安全吗?
谢谢。
c++ - 在 Xcode 中工作的 CMake 中启用 AddressSanitizer 的正确方法是什么
我添加了 AddressSanitizer 标志如下:
使用Unix Makefiles
.
问题出现在生成 Xcode 项目时,它只是不想链接,因为它找不到 ASan 库。
我已经找到了两个解决方案,但决定不使用它们,因为它们不能仅使用 CMake 实现自动化:
- 添加
-Wl,-undefined,dynamic_lookup
到链接标志,因此它跳过链接到动态库。 - 直接链接
libclang_rt.asan_osx_dynamic.dylib
。
那么这两种解决方案有什么问题呢?
- 使用解决方案 #1 时,我必须在 Xcode 中手动打开目标方案并添加
DYLD_INSERT_LIBRARIES
指向libclang_rt.asan_osx_dynamic.dylib
. - 使用解决方案 #2 时,ASan 库的路径因计算机而异。
此外,作为另一种解决方案,我尝试从 Xcode 目标方案中启用 Address Sanitizer 标志,但有趣的是它没有检测到我添加的问题,因此我没有将其列为解决方案,因为它未能通过我的测试。
任何帮助都感激不尽。