清理程式是一組動態分析工具,可透過編譯器插入的附加工具在執行時發現程式中的錯誤。這包括檢測記憶體安全問題。 Android 支援並強烈建議使用以下消毒劑:
HWAddress 消毒液 (HWASan)
HWASan是提供記憶體安全問題偵測的主要清理工具。它需要 ARM64 並且可以檢測:
- 堆疊和堆疊緩衝區溢位或下溢
- 釋放後的堆使用
- 作用域之後的堆疊使用
- 返回後堆疊使用
- 雙自由或狂野自由
地址消毒劑 (ASan)
ASan是一個類似 HWASan 的工具。它適用於更多平台,但在 Android 上不受支援。
核心位址消毒器
KASan是上述使用者空間工具的核心對應部分。它共享相同的編譯器實作。 KASAN 和 ASan/HWASan 是互補的,因為一種工具適用於內核,另一種工具適用於使用者空間。我們建議同時啟用兩者,以減少建置配置的數量並減少測試矩陣。
未定義行為消毒劑 (UBSan)
UBSan執行編譯時偵測來檢查各種類型(非記憶體安全)未定義的行為。這包括有符號和無符號整數溢位檢查 (IntSan)、靜態大小數組的邊界檢查 (BoundsSan) 以及許多其他類型的未定義行為。 IntSan 和 BoundsSan 也適合在生產中作為安全緩解措施啟用。