gpt4 book ai didi

c++ - 如何实际使用 AddressSanitizer 和 MemorySanitizer?

转载 作者:太空狗 更新时间:2023-10-29 11:49:48 26 4
gpt4 key购买 nike

AddressSanitizer 和 MemorySanitizer 是非常有用的工具,但它们需要对整个程序进行适当的检测。 (至少,对于 AddressSanitizer 的 Clang 版本;请参阅 MemorySanitizer 文档中的 hereAddressSanitizerClangVsGCC 的“为全局变量使用私有(private)别名”部分。)

如果按其字面意思理解,这意味着所有库依赖项都需要使用适当的编译器标志来构建,以启用 ASan 或 MSan。对于需要各种第三方依赖项的典型 Linux 应用程序,执行此操作的实用方法是什么? Sanitizers 显然是 Google 的一个项目,我的印象是 Google 代码大多只使用他们自己的 monorepo 和他们自己的 build tools ,但这可能超出了一般开发人员的能力范围。有没有一种简单的方法可以使用 Sanitizers 构建库,而无需投资大量额外的基础设施或构建脚本?

最佳答案

AddressSanitizer 支持单独的检测,即您可以用它检测程序的一部分(单独的 DSO 甚至单独的目标文件)。但是请注意,如果您使用静态 Asan 运行时(这是 Clang 的默认运行时,除非您使用 -shared-libasan 构建),您必须检测主要可执行文件。共享运行时(GCC 中的默认设置)没有此问题,但如果未检测可执行文件,您将需要 LD_PRELOAD 它。参见 discussion in wiki了解详情。

至于 MemorySanitizer,它确实需要重建所有依赖项(初学者请参阅 this)。这是该工具未在 Google 之外广泛使用的主要原因。

关于c++ - 如何实际使用 AddressSanitizer 和 MemorySanitizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42821991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com