Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Fout:
Adres opschoningsfout: Overloop van heapbuffer
Opmerkingen
In dit voorbeeld ziet u de fout die wordt weergegeven wanneer een geheugentoegang plaatsvindt buiten de grenzen van een heap-toegewezen object.
Voorbeeld: klassieke heapbufferoverloop
// example1.cpp
// heap-buffer-overflow error
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char *x = (char*)malloc(10 * sizeof(char));
memset(x, 0, 10);
int res = x[argc * 10]; // Boom!
free(x);
return res;
}
Als u dit voorbeeld wilt bouwen en testen, voert u deze opdrachten uit in een Opdrachtprompt voor ontwikkelaars van Visual Studio 2019 versie 16.9 of hoger:
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
Resulterende fout
Voorbeeld: onjuiste cast-omlaag
// example2.cpp
// heap-buffer-overflow error
class Parent {
public:
int field;
};
class Child : public Parent {
public:
int extra_field;
};
int main(void) {
Parent *p = new Parent;
Child *c = (Child*)p; // Intentional error here!
c->extra_field = 42;
return 0;
}
Als u dit voorbeeld wilt bouwen en testen, voert u deze opdrachten uit in een Opdrachtprompt voor ontwikkelaars van Visual Studio 2019 versie 16.9 of hoger:
cl example2.cpp /fsanitize=address /Zi
devenv /debugexe example2.exe
Resulterende fout- onjuiste cast-omlaag
Voorbeeld - strncpy in heap
// example3.cpp
// heap-buffer-overflow error
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv) {
char *hello = (char*)malloc(6);
strcpy(hello, "hello");
char *short_buffer = (char*)malloc(9);
strncpy(short_buffer, hello, 10); // Boom!
return short_buffer[8];
}
Als u dit voorbeeld wilt bouwen en testen, voert u deze opdrachten uit in een Opdrachtprompt voor ontwikkelaars van Visual Studio 2019 versie 16.9 of hoger:
cl example3.cpp /fsanitize=address /Zi
devenv /debugexe example3.exe
Resulterende fout - strncpy in heap
Zie ook
Overzicht van AddressSanitizer
AddressSanitizer bekende problemen
AddressSanitizer-build- en taalreferenties
naslaginformatie over AddressSanitizer-runtime
addressSanitizer schaduwbytes
AddressSanitizer-cloud of gedistribueerde tests
integratie van AddressSanitizer-foutopsporingsprogramma's
voorbeelden van AddressSanitizer-fouten