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

时间:2016-12-11 14:27:38

标签: gdb clang sanitizer

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

  

内联汇编代码初始化之后使用的一些内存,但MemorySanitizer将此视为未初始化值的使用。

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

  

我正在尝试编写一个小的GDB脚本来过滤误报。

这可能是错误的方法。

相反,你应该使用Memory Sanitizer blacklist,或者更好的是,调用__msan_unpoison 告诉它已经初始化了特定的内存位置。