Errore: memcpy-param-overlap
Errore di sanificazione dell'indirizzo: memcpy-param-overlap
La funzione memcpy
CRT non supporta la memoria sovrapposta. CRT offre un'alternativa a memcpy
che supporta la memoria sovrapposta: memmove
.
Un errore comune consiste nel considerare memmove
come semanticamente equivalente a memcpy
.
Esempio
// 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;
}
Per compilare e testare questo esempio, eseguire questi comandi in un prompt dei comandi per sviluppatori di Visual Studio 2019 versione 16.9 o successiva:
cl example1.cpp /fsanitize=address /Zi /Oi
devenv /debugexe example1.exe
Il flag /Oi indica al compilatore di trattare memcpy
e memmove
come funzioni intrinseche. Ciò è necessario perché alcune versioni della libreria standard implementano memcpy
e memmove
nello stesso modo. Poiché ASAN è uno strumento di analisi dinamica, rileva solo gli errori con un effetto di runtime osservabile.
Errore risultante
Vedi anche
Panoramica di AddressSanitizer
Problemi noti di AddressSanitizer
Riferimento alla compilazione e al linguaggio AddressSanitizer
Informazioni di riferimento sul runtime AddressSanitizer
Byte ombreggiatura AddressSanitizer
AddressSanitizer cloud o test distribuiti
Integrazione del debugger AddressSanitizer
Esempi di errore addressSanitizer