Os limpadores são um grupo de ferramentas de análise dinâmica que encontram erros em programas no momento da execução por meio de instrumentação adicional inserida pelo compilador. Isso inclui a detecção de problemas de segurança de memória. O Android oferece suporte e recomenda o uso dos seguintes limpadores:
Limpador de endereços assistido por hardware (HWASan)
O HWASan é o limpador principal para detectar problemas de segurança de memória. Ele requer ARM64 e pode detectar:
- Excesso ou falta do buffer de heap e pilha
- Uso de heap depois da liberação
- Uso de pilha após o escopo
- Uso de pilha após retorno
- Double free ou wild free
Limpador de endereços (ASan)
O ASan é uma ferramenta semelhante ao HWASan. Ele funciona em mais plataformas, mas não é compatível com o Android.
Limpador de KernelAddress (KASan, na sigla em inglês)
O KASan é a contraparte do kernel das ferramentas do espaço do usuário acima. Ele compartilha a mesma implementação do compilador. O KASan e o ASan/HWASan são complementares, já que uma ferramenta se aplica ao kernel e outra ao espaço do usuário. Recomendamos ativar os dois ao mesmo tempo para reduzir o número de configurações de build e a matriz de testes.
Limpador de comportamento indefinido (UBSan)
O UBSan executa a instrumentação no momento da compilação para verificar vários tipos de comportamento indefinido (sem segurança de memória). Isso inclui verificação de overflow de números inteiros assinados e não assinados (IntSan), verificações de limites para matrizes de tamanho estático (BoundsSan) e muitos outros tipos de comportamento indefinido. O IntSan e o BoundsSan também são adequados para ativação na produção como mitigation de segurança.