1

在地址清理程序的文档(https://releases.llvm.org/7.0.0/tools/clang/docs/AddressSanitizer.html)中,它指出:

链接共享库时,AddressSanitizer 运行时没有链接,所以 -Wl,-z,defs 可能会导致链接错误

这似乎不仅适用于 ASAN,也适用于 UBSAN。这对 UBSAN 来说特别不方便,因为vptrsanitizer 可以在库之间引入新的 typeinfo 依赖项(https://jira.mongodb.org/browse/SERVER-49798中有很多细节)。

我真的更喜欢-Wl,-z,defs为我们的 UBSAN 构建构建。实际上,就编译过程而言,我实际上可以使用 ubsan 构建来完成这项工作,方法是手动将诸如此类的内容注入-lclang_rt.ubsan_standalone-x86_64共享库的链接行。

但这给我留下了一个烦人的问题:为什么clang链接驱动程序在链接共享库时不根据显式文档自动执行此操作?它显然可以做到这一点,因为它已经为自动获取运行时的程序做到了。它明确没有让我怀疑这样做是否有问题。

  • 出于某种原因,将运行时库强制ubsan到所有共享库的链接线上是一个坏主意吗?
  • 它是否会以某种方式破坏消毒剂的有效性?
  • 还有其他一些我没有看到的可怕的缺点吗?
4

0 回答 0