问题标签 [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.
c++ - 从 64 位 BSD 系统编译的 32 位应用程序中的 getifaddrs 堆缓冲区溢出
在使用 Clang 的 AddressSanitizer 调试我的程序时,我遇到了一个奇怪的问题。完全相同的代码适用于另一个 64 位系统,但在另一个系统上会出现堆缓冲区溢出错误。
两台机器使用相同的工具链等运行相同的操作系统(BSD 10 64 位),除了工作的那台被编译为 64 位(因此在 64 位系统上运行的 64 位应用程序)并且给出问题的那台被编译为64 位系统上的 32 位应用程序。
没有太多代码可以显示,因为问题仅存在于这个调用中:
这是 ASan 转储的堆栈跟踪:
我在两台机器上使用完全相同的 CFLAGS,相同的编译器(Clang 3.8),相同的库版本。一段时间以来一直在 Google 和 StackOverflow 上寻找,但这似乎是一个孤立的案例,因为我找不到其他人遇到我同样的问题。
希望有人对这件事有更多的了解。
提前感谢任何可以帮助我的人。
Edit1:我刚刚意识到我一直在系统上使用 Clang 3.8.1,一切正常(64 位系统中的 64 位应用程序),而另一个仍然有 3.8.0。我不确定,但此时我怀疑这是编译器中的错误。现在升级到 3.8.1,以及所有相关的 32 位库(ASan 等),当我有消息时会报告。
gcc - 使用 Address Sanitizer 编译程序时出错
我正在尝试使用 Address Sanitizer (ASan) 编译程序 ( tarantool ),但遇到以下错误:
我无法弄清楚这个问题的原因。有人可以指出我正确的方向吗?
gcc - valgrind、gcc 6.2.0 和“-fsanitize=address”
最近,当使用 '-fsanitize=address' 编译时,我在使用 valgrind 运行应用程序时遇到执行异常,即
“ASan 运行时不在初始库列表中排在第一位”
我有点不知道 valgrind 实际上做了什么。命令“ldd file.exe”提供
有什么提示吗?
c++ - 如何在运行时检测 C++ 对象指向 vtable 的指针的修改?
令 vptr 为指向 vtable 的指针,该 vtable 与类受虚函数约束的对象一起携带。
'vptr' 的更改可能不是预期的行为。但是,这种更改不能被检测为非法内存访问,因为指针位于已分配内存的边界。'Efence' 和 'valgrind/memcheck' 无济于事——据我所知。
然而,意外的 vptr 更改可能会导致严重的问题。如果 vptr 被更改为指向任意内存,则删除运算符可能会立即导致分段错误。
是否有任何东西可以在 vtable 或指向 vtable 的指针上设置“守卫”,以便监控任何更改?
Clang++ 似乎并没有完成全部工作。给定
编译并执行...
在调用“virtual ~X()”时检测违规。
同样不适用于
vptr 损坏的检测器应该在所有对象的 vptr-s 上设置某种类型的“观察点”。
gcc - 在 gcc 中默认启用 AddressSanitizer
为了能够调试和模糊整个 Linux 发行版,我想将 ASAN(AddressSanitizer,https: //en.wikipedia.org/wiki/AddressSanitizer )设置为 gcc 的默认选项。所以通常要达到我想要的,一般我在编译一个linux包之前设置以下变量:
并尝试编译并运行我的代码。我想让它默认为 gcc。
一种选择是使用规范文件:https ://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html 。但是我没有找到一种方法来设置“捕获所有规则”来编译和链接我所有的 c/c++ 代码与 AddressSanitizer。
我的问题是:
- 任何示例如何使用规范文件来做到这一点?
- 这是最好的方法吗?
- 还有其他替代方法吗?
linux - 编译时对“_asan_init_v4”的未定义引用
当链接我用 AddressSanitizer 工具编译的代码时,我遇到了很多类似的错误undefined reference to '_asan_init_v4'
。
一些错误示例
注意:我使用的是 NixOS 19.09 和 Clang 10。
r - 使用 AddressSanitizer 支持从源代码编译 R
如何使用 AddressSanitizer 支持从源代码编译 R 或 R-devel?
背景:我的 R 包通过 Rcpp 调用了几个 C++ 函数。其中一个引发堆缓冲区溢出错误
......所以CRAN团队告诉我。该错误仅在使用支持 ASAN (AddressSanitizer) 的 R 版本时出现。在我自己的 R 和 R-devel 版本中,R CMD check --as-cran
以Status: OK
. 要调试错误,我需要一个可以重现它的 R 版本。
我在 Arch linux (4.9.11-1-ARCH) 上运行 R。我可以R
通过pacman
安装R-devel
。yaourt
不过,对于这个问题,我认为可能必须从源代码安装 R,而我从未这样做过。
编写 R 扩展的第 4.3.3 节似乎是关键,但我不明白。
gcc - 地址清理程序 (-fsanitize=address) 与 tcmalloc 一起使用吗?
我想知道 gcc 的 -fsanitize=address 选项是否适用于 tcmalloc?还是我们需要通过禁用 tcmalloc 来运行?或者如果运行消毒剂启用 tcmalloc 会很好吗?
c++ - 我如何实际使用 AddressSanitizer 和 MemorySanitizer?
AddressSanitizer 和 MemorySanitizer 是非常有用的工具,但它们需要对整个程序进行适当的检测。(至少,对于 AddressSanitizer 的 Clang 版本;请参阅MemorySanitizer 文档中的此处和AddressSanitizerClangVsGCC的“为全局变量使用私有别名”部分。)
如果按其原意的话,这意味着所有库依赖项都需要使用适当的编译器标志来构建以启用 ASan 或 MSan。对于需要各种第三方依赖项的典型 Linux 应用程序,执行此操作的实用方法是什么?Sanitizers 显然是一个谷歌项目,我的印象是谷歌代码大多只是使用他们自己的 monorepo 和他们自己的构建工具,但这可能超出了普通开发人员的能力范围。有没有一种简单的方法可以在不投资大量额外基础设施或构建脚本的情况下使用 Sanitizers 构建库?
gcc - 如何在 AddressSanitizer 错误时生成核心转储
我像这样编译我的代码以启用 Asan:
但它从不生成核心转储,以便我稍后可以检查错误的详细信息。我怎样才能生成它?