Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fel:
Adressfel för sanitizer: Stackbuffertunderflöde
Anmärkningar
Dessa felmeddelanden anger en minnesåtkomst till någonstans före början av en stackvariabel.
Exempel – underflöde för lokal matris
// example1.cpp
// stack-buffer-underflow error
#include <stdio.h>
int main() {
int subscript = -1;
char buffer[42];
buffer[subscript] = 42; // Boom!
return 0;
}
Om du vill skapa och testa det här exemplet kör du dessa kommandon i en kommandotolk för Visual Studio 2019 version 16.9 eller senare:
cl example1.cpp /fsanitize=address /Zi /Od
devenv /debugexe example1.exe
ASAN är en form av dynamisk analys, vilket innebär att den bara kan identifiera felaktig kod som faktiskt körs. En optimerare tar bort tilldelningen till buffer[subscript] eftersom buffer[subscript] den aldrig läss från. Därför kräver /Od det här exemplet flaggan.
Resulterande fel
Exempel – stackunderflöde på tråd
// example2.cpp
// stack-buffer-underflow error
#include <windows.h>
DWORD WINAPI thread_proc(void *) {
int subscript = -1;
volatile char stack_buffer[42];
stack_buffer[subscript] = 42;
return 0;
}
int main() {
HANDLE thr = CreateThread(NULL, 0, thread_proc, NULL, 0, NULL);
if (thr == 0) return 0;
WaitForSingleObject(thr, INFINITE);
return 0;
}
Om du vill skapa och testa det här exemplet kör du dessa kommandon i en kommandotolk för Visual Studio 2019 version 16.9 eller senare:
cl example2.cpp /fsanitize=address /Zi
devenv /debugexe example2.exe
Resulterande fel – stackunderflöde i tråd
Se även
AddressSanitizer– översikt
AddressSanitizer kända problem
AddressSanitizer- och språkreferens
AddressSanitizer-körningsreferens
AddressSanitizer skugg byte
AddressSanitizer-moln eller distribuerad testning
AddressSanitizer-felsökningsintegrering
AddressSanitizer-felexempel