Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Błąd:
Błąd sanitizera adresu: memcpy-param-nakładające się
Uwagi
Note
Flaga jest wymagana /Oi do niezawodnego wykrywania memcpy-param-overlap błędów. Ta flaga nakazuje kompilatorowi traktowanie memcpy i inne funkcje jako funkcje wewnętrzne, co jest konieczne, ponieważ niektóre wersje standardowej biblioteki implementują je jako takie. Ponieważ usługa ASan jest narzędziem do analizy dynamicznej, może wykrywać tylko błędy z widocznym efektem środowiska uruchomieniowego. Należy pamiętać, że jeśli /O2 jest również ustawiona, usługa ASan może nie być w stanie niezawodnie wykrywać memcpy-param-overlap błędów, ponieważ wewnętrzny wariant tych funkcji nie jest gwarantowany. Aby uzyskać więcej informacji, zobacz /Oi dokumentację.
Funkcja memcpyCRT nie obsługuje nakładających się pamięci. CRT stanowi alternatywę dla tej metody memcpy , która obsługuje nakładanie się pamięci: memmove.
Typowym błędem jest traktowanie memmove jako semantycznie równoważne z memcpy.
Example
// example1.cpp
// memcpy-param-overlap error
#include <string.h>
__declspec(noinline) void bad_function() {
char buffer[] = "hello";
memcpy(buffer, buffer + 1, 5); // BOOM!
}
int main(int argc, char **argv) {
bad_function();
return 0;
}
Aby skompilować i przetestować ten przykład, uruchom następujące polecenia w wierszu polecenia programu Visual Studio 2019 w wersji 16.9 lub nowszej:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
Wynikowy błąd
Zobacz także
AddressSanitizer — omówienie
Rozwiązywanie znanych problemów z programemSanitizer
Dokumentacja języka i kompilacji narzędzia AddressSanitizer
AddressSanitizer runtime reference (Dokumentacja środowiska uruchomieniowego AddressSanitizer)
Bajty w tle addressSanitizer
AddressSanitizer — chmura lub testowanie rozproszone
Integracja debugera AddressSanitizer
Przykłady błędów addressSanitizer