通常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


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐