通常C /C++ 編譯器 是對內存訪問是不添加邊界檢查的。有時候優於代碼錯誤,就有讀或者寫 操作了緩衝區外面的內存地址。這種錯誤一般都很難察覺。所以一旦編譯出現AddressSanitizer: stack-buffer-overflow on address 錯誤,首先就檢查自己代碼的邊界條件是否沒有控制住。
什麼是stack-buffer-overflow ?
舉例來說:
int a[10];
a[11] = 10; // stack-buffer-overflow
a[-1] = 10;//stack-buffer-underflow
什麼是head-buffer-overflow ?
舉例來說:
int* x = malloc(10);
int n=x[11]; //heap-buffer-overflow
int n=x[-1] //heap-buffer-underflow