Bagikan melalui


Kesalahan: heap-buffer-overflow

Kesalahan Pembersih Alamat: Luapan buffer timbunan

Contoh ini menunjukkan kesalahan yang menghasilkan ketika akses memori terjadi di luar batas objek yang dialokasikan timbunan.

Contoh - luapan buffer tumpukan klasik

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

Untuk membuat dan menguji contoh ini, jalankan perintah ini di perintah Visual Studio 2019 versi 16.9 atau yang lebih baru:

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

Kesalahan yang dihasilkan

Cuplikan layar debugger yang menampilkan kesalahan heap-buffer-overflow dalam contoh 1.

Contoh - pemeran bawah yang tidak tepat

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

Untuk membuat dan menguji contoh ini, jalankan perintah ini di perintah Visual Studio 2019 versi 16.9 atau yang lebih baru:

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

Kesalahan yang dihasilkan - pemeran tidak tepat ke bawah

Cuplikan layar debugger yang menampilkan kesalahan heap-buffer-overflow dalam contoh 2.

Contoh - strncpy ke dalam tumpukan

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

Untuk membuat dan menguji contoh ini, jalankan perintah ini di perintah Visual Studio 2019 versi 16.9 atau yang lebih baru:

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

Mengakibatkan kesalahan - strncpy ke dalam tumpukan

Cuplikan layar debugger yang menampilkan kesalahan heap-buffer-overflow dalam contoh 3.

Lihat juga

Gambaran umum AddressSanitizer
Masalah yang diketahui AddressSanitizer
Referensi bahasa dan build AddressSanitizer
Referensi runtime AddressSanitizer
Byte bayangan AddressSanitizer
AddressSanitizer cloud atau pengujian terdistribusi
Integrasi debugger AddressSanitizer
Contoh kesalahan AddressSanitizer