Aracılığıyla paylaş


Hata: stack-buffer-underflow

Adres Temizleme Hatası: Yığın arabelleği taşması

Bu hata iletileri, yığın değişkeninin başlangıcından önceki bir yere bellek erişimini gösterir.

Örnek - yerel dizi taşması

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

int main() {

    int subscript = -1;
    char buffer[42];
    buffer[subscript] = 42; // Boom!
   
    return 0;
}

Bu örneği derlemek ve test etmek için visual studio 2019 sürüm 16.9 veya sonraki bir geliştirici komut isteminde şu komutları çalıştırın:

cl example1.cpp /fsanitize=address /Zi /Od
devenv /debugexe example1.exe

ASAN bir dinamik analiz biçimidir, yani yalnızca gerçekte yürütülen hatalı kodu algılayabilir. İyileştirici, hiçbir zaman okunmadığından buffer[subscript] atamayı buffer[subscript] kaldırır. Sonuç olarak, bu örnek bayrağı gerektirir /Od .

Sonuçta oluşan hata

Örnek 1'de stack-buffer-underflow hatasını görüntüleyen hata ayıklayıcının ekran görüntüsü.

Örnek - iş parçacığında yığın taşması

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

Bu örneği derlemek ve test etmek için visual studio 2019 sürüm 16.9 veya sonraki bir geliştirici komut isteminde şu komutları çalıştırın:

cl example2.cpp /fsanitize=address /Zi
devenv /debugexe example2.exe

Sonuçta oluşan hata - iş parçacığında yığın taşması

Örnek 2'de stack-buffer-underflow hatasını görüntüleyen hata ayıklayıcının ekran görüntüsü.

Ayrıca bkz.

AddressSanitizer'a genel bakış
AddressSanitizer bilinen sorunları
AddressSanitizer derlemesi ve dil başvurusu
AddressSanitizer çalışma zamanı başvurusu
AddressSanitizer gölge baytları
AddressSanitizer bulut veya dağıtılmış test
AddressSanitizer hata ayıklayıcısı tümleştirmesi
AddressSanitizer hata örnekleri