Delen via


Fout: stack-buffer-underflow

Fout bij opschoning van adres: stackbufferonderstroom

Deze foutberichten geven een geheugentoegang aan tot ergens vóór het begin van een stackvariabele.

Voorbeeld: lokale matrixonderstroom

// example1.cpp
// stack-buffer-underflow error
#include <stdio.h>

int main() {

    int subscript = -1;
    char buffer[42];
    buffer[subscript] = 42; // Boom!
   
    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 example1.cpp /fsanitize=address /Zi /Od
devenv /debugexe example1.exe

ASAN is een vorm van dynamische analyse, wat betekent dat alleen slechte code kan worden gedetecteerd die daadwerkelijk wordt uitgevoerd. Met een optimizer wordt de toewijzing verwijderd omdat buffer[subscript]buffer[subscript] deze nooit wordt gelezen. Als gevolg hiervan vereist dit voorbeeld de /Od vlag.

Resulterende fout

Schermopname van foutopsporingsprogramma met stack-buffer-underflow-fout in voorbeeld 1.

Voorbeeld: stack underflow op thread

// 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;
}

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: stack-onderstroom op thread

Schermopname van foutopsporingsprogramma met stack-buffer-underflow-fout in voorbeeld 2.

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