Błąd: use-after-poison
Błąd narzędzia do oczyszczania adresu: użycie zatrutej pamięci
Deweloper może ręcznie zatruć pamięć w celu dostosowania debugowania.
Przykład
// example1.cpp
// use-after-poison error
#include <stdlib.h>
extern "C" void __asan_poison_memory_region(void *, size_t);
int main(int argc, char **argv) {
char *x = new char[16];
x[10] = 0;
__asan_poison_memory_region(x, 16);
int res = x[argc * 10]; // Boom!
delete [] x;
return res;
}
Aby skompilować i przetestować ten przykład, uruchom następujące polecenia w wierszu polecenia dewelopera Visual Studio 2019 w wersji 16.9 lub nowszej:
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
Wynikowy błąd
Zobacz też
Omówienie narzędzia AddressSanitizer
Rozwiązywanie znanych problemów z rozwiązaniemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego narzędzia AddressSanitizer)
Bajty cienia addressSanitizer
AddressSanitizer cloud or distributed testing (Testowanie rozproszone lub chmura AddressSanitizer)
Integracja debugera AddressSanitizer
Przykłady błędów narzędzia AddressSanitizer