我正在使用Clang&由于内联汇编,MemorySanitizer得到了一些误报。 内联汇编代码初始化后来使用的一些内存,但MemorySanitizer将此视为未初始化值的使用。
我正在尝试编写一个小的GDB脚本来过滤误报。我在__msan_warning_noreturn上放了一个断点,这是在MemorySanitizer和bails中输出错误的函数。但是,我找不到一种简单的方法来检索触发错误的地址。
如何找到触发错误的地址?
我正在研究X64架构,linux,clang-3.8
谢谢。
答案 0 :(得分:0)
内联汇编代码初始化之后使用的一些内存,但MemorySanitizer将此视为未初始化值的使用。
Memory Sanitizer通过检测C和C ++源代码来工作。它不能(也没有)仪器内联汇编,因此它的初始化是不可见的。
我正在尝试编写一个小的GDB脚本来过滤误报。
这可能是错误的方法。
相反,你应该使用Memory Sanitizer blacklist,或者更好的是,调用__msan_unpoison 告诉它已经初始化了特定的内存位置。