centos 7 升级gcc4.9使用asan(AddressSanitizer)检测内存越界,提示堆栈代码行数

@[TOC](centos 7 升级gcc4.9使用asan(AddressSanitizer)检测内存越界)

centos 7 升级gcc4.9使用asan检测内存越界,提示堆栈代码行数

升级gcc4.9的原因

centos7.4的默认gcc版本为4.8.5,这个版本使用asan只能提示报错,无法提示代堆栈代码行数

升级gcc 4.9.4

升级可参考 https://blog.csdn.net/tangyi2008/article/details/42100049
https://blog.csdn.net/gw85047034/article/details/52957516

安装libasan4.9

yum源自带的libasan版本与gcc4.9.4不匹配,需要安装libasan-4.9版本,可以去下面网站下载rpm包进行安装
https://centos.pkgs.org/7/centos-sclo-rh-x86_64/libasan-4.9.2-6.el7.x86_64.rpm.html

hello world测试

编写测试文件test.c

#include 
int main() {
  char *x = (char*)malloc(10 * sizeof(char*));
  free(x);
  return x[5];
}

编译

gcc -g test.c -o hello -fsanitize=address -fno-omit-frame-pointer

运行

./hello

可以看到asan提示了错误类型为heap-use-after-free 且错误行为test.c 5 main
centos 7 升级gcc4.9使用asan(AddressSanitizer)检测内存越界,提示堆栈代码行数_第1张图片

你可能感兴趣的:(开发工具)