在 GDB 中,使用 Clang 和 MemorySanitizer,如何检索触发错误的地址?

In GDB, using Clang & MemorySanitizer, how can I retrieve the address that triggers an error?

我正在使用 Clang 和 MemorySanitizer,由于内联汇编,我得到了一些误报。 内联汇编代码初始化了一些随后使用的内存,但 MemorySanitizer 将其视为未初始化值的使用。

我正在尝试编写一个小的 GDB 脚本来过滤误报。我在 __msan_warning_noreturn 上放置了一个断点,这是在 MemorySanitizer 和 bails 中打印错误的函数。但是,我找不到一种简单的方法来检索触发错误的地址。

如何找到触发错误的地址?

我正在研究 X64 架构,linux,clang-3.8

谢谢。

The inline assembly code initializes some memory that is used afterwards, but the MemorySanitizer regards this as a use-of-uninitialized-value.

Memory Sanitizer 通过检测 C 和 C++ 源代码来工作。它不能(也不会)检测内联汇编,因此此初始化对它不可见。

I am trying to write a small GDB script to filter the false positives.

这可能是错误的方法。

相反,您应该使用 Memory Sanitizer blacklist, or better yet, call __msan_unpoison 告诉 它特定的内存位置已被初始化。