使用 ASAN 仅编译代码子集的结果是什么?

What is the result of compiling only a subset of code with ASAN?

我在 Linux(通过 gcc)上的大部分开发中都使用地址清理器。

我通常只通过地址清理器检测我自己的代码。所以我的过程包含了检测库和非检测库的混合(第 3 方,来自其他部门的代码)。

这样做的后果是什么? ASAN 会正常运行吗?

Asan 应用于应用程序的子集时将正常运行,但在这种情况下它可能无法检测到某些错误(在 "Do I also need to build shared libraries?" 和 "Can I run it with unsanitized executable?" 问题中涵盖 Asan FAQ)。

例如,stack/global 缓冲区上的溢出将不会被检测到,该缓冲区定义在应用程序的未清理部分中(因为不会检测此缓冲区的影子内存)。同样,未清理部分的任何溢出都不会被检测到(因为没有检测代码来检测它)。