Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kesalahan:
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
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
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
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