工具

工具是一组动态分析工具,可在运行时通过编译器插入的额外检测来查找程序中的错误。这包括检测内存安全问题。Android 支持并强烈建议使用以下工具:

硬件辅助 AddressSanitizer (HWASan)

HWASan 是用于检测内存安全问题的主要工具。它需要 ARM64,并且可以检测:

  • 栈和堆缓冲区溢出或下溢
  • 堆释放后使用
  • 栈作用域外使用
  • 栈返回后使用
  • 双重释放或野指针释放

AddressSanitizer (ASan)

ASan 是一种类似于 HWASan 的工具。它可在更多平台上运行,但在 Android 上不受支持。

内核 AddressSanitizer (KASan)

KASan 是上述用户空间工具的内核对应工具。它与编译器实现相同。KASan 和 ASan/HWASan 是互补的,因为一个工具应用于内核,另一个应用于用户空间。我们建议同时启用这两个工具,以减少构建配置的数量并减少测试矩阵。

UndefinedBehaviorSanitizer (UBSan)

UBSan 执行编译时检测,以检查各种类型的(非内存安全)未定义行为。这包括有符号和无符号整数溢出检查 (IntSan)、静态大小数组的边界检查 (BoundsSan) 以及许多其他类型的未定义行为。IntSan 和 BoundsSan 也适合在生产环境中启用,作为一种安全缓解措施。