主要观点:介绍 AddressSanitizer (ASan) 及其在 C++ 代码中检测内存错误的作用,包括容器溢出等,还展示了在 GCC 和 LLVM 中对 ASan 的工作,包括添加注释、各种容器的注释实现及改进等。
关键信息:
- ASan 是检测内存错误的编译器插件,可通过注释找到更多漏洞。
- 不同 C++ 标准库对容器溢出检测支持不同,如 libstdc++、libc++、msvc++等。
- 介绍 ASan API 用于注释内存,如
ASAN_POISON_MEMORY_REGION
等宏。 - 以简单栈类为例说明添加 ASan 注释的步骤,包括创建注释包装函数等。
- 测试注释的实践及在不同编译器下的输出。
- 改进了 libc++中的容器注释,如向量、双端队列、字符串等的注释。
- 还提到了 sanitize 分配器、GCC/libstdc++注释、测试注释及感谢等方面。
重要细节: - 在 LLVM 中,Trail of Bits 为
libc++
的std::string
和std::deque
容器添加注释,启用自定义分配器注释并修复 bug。 - 不同容器的注释实现细节,如向量注释在 LLVM16 和 17 中的改进,双端队列注释在 LLVM16 和 17 中的实现,字符串注释在 LLVM18 和后续可能的发布等。
- 测试注释可使用
__sanitizer_verify_contiguous_container
函数等,libc++库自身有扩展的容器测试。 - 对 ASan 注释有疑问可联系 Trail of Bits 寻求帮助等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。