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

clang - 启用 LLVM 的 MemorySanitizer 是否会改变库的 ABI

LLVM 项目 MemorySanitizer 有一个难以满足的约束,即所有系统库也必须使用 MemorySanitizer 构建。

我一直在考虑一些方法来为我正在处理的项目(它已经使用 ASAN 和 UBSAN)启用 MSAN,特别是关于这个约束。我一直在考虑的一种可能的解决方案会导致这样一种情况,即当项目编译时-fsanitize=memory,它会链接到动态系统库的非仪器版本,例如libc,和libstdc++,并且,说libcrypto(添加一个不是真正的一部分的“工具链”)。但是在运行时,检测的二进制文件将在一个特殊的环境(基本上是不同的用户空间)中运行,其中所有系统动态库都是用-fsanitize=memory.

这样的方案可行吗?在我看来,这取决于构建一个库是否-fsanitize=memory会改变其 ABI,因为如果库 ABI 在检测版本和非检测版本之间存在差异,那么针对非检测系统动态库构建的图像将在在带有已检测系统库的环境中启动时的运行时。

0 投票
0 回答
101 浏览

c++ - 带有 SSE 内在函数的 Clang 内存清理程序错误

如果我使用启用了内存清理程序的 clang 编译和运行它,这是一段代码,它会生成内部编译器错误。

它主要只是将一些数据放入 SSE 寄存器并调用一个函数将半浮点数转换为浮点数:

另请参阅https://godbolt.org/z/5xva3q -

运行由 clang10.0.1 生成的二进制文件-Og -g -std=c++17 -march=haswell -fsanitize=memory -fsanitize-memory-track-origins会产生以下输出:

我不知道为什么这会导致错误,而且它只发生在特定的优化设置中。对我来说,这似乎是一个潜在的错误,但我想向更多的观众证实这一点。

编辑:这似乎在 clang 的主干版本中得到修复。

0 投票
0 回答
112 浏览

boost - 使用内存清理程序与静态库链接时提升未定义符号问题

在构建静态库 uhd 类型并使用内存清理器标志 -fsanitize=memory 与 boost 库 v1.74 链接时,我遇到了错误。

我已经使用 target_link_libraries 将 uhd 类型链接到提升库。

0 投票
1 回答
234 浏览

c++ - 为什么内存清理程序会报告 std::map 使用了未初始化的值?

我在 x86-64 上使用 manjaro linux。clang 版本 10.0.1 中的 Memory-sanitizer 报告了一个 use of uninitialized value in 错误std::map,这让我很惊讶。我做错什么了吗?

0 投票
1 回答
84 浏览

c++ - Clang sanitizers 缺少未初始化内存的读取

我有以下代码,我有信心从垃圾内存中读取,但 clang sanitizers 不会抱怨。

我可以做些什么来让它们触发,或者我应该接受它作为限制/错误?

我曾尝试设置 O0,因为这有时会有所帮助,但这次没有。

神螺栓

我也愿意使用 gcc,但我认为 gcc 没有内存清理器,只有 asan。

0 投票
0 回答
5 浏览

clang - `Uninitialized value was created by a heap deallocation` 是什么意思?

free()调用时使用 clang sanitizer 收到错误消息。

我看不出释放内存如何在这里创造价值来产生警告?

0 投票
1 回答
35 浏览

c - MemorySanitzer 警告在 `struct stat` 中使用未定义的内存;不过,我确实检查了`stat`返回值

我的代码中可能出了什么问题?据我所知,我只st.st_mode在调用stat成功时触摸。我要归咎于我的编译器、消毒剂或 glibc 中的错误。

我唯一能想到的就是拆开包装if。执行 a if ( ... != 0) return,删除else不需要的 (由于return之前的原因),以使代码更常规。不过,这不会改变意思。

0 投票
0 回答
31 浏览

clang - 如何使用 clang++ 使用内存清理器构建共享库?

我在 ubuntu 18.04 中使用了 clang-10。

我试图用内存清理器构建共享库。

构建的对象:

然后我尝试将它链接到共享库:

在此命令之后,我得到了错误输出:

.so使用内存清理器构建文件的正确命令是什么?