我已经读过 Address Sanitizer 是 valgrind 的可用替代品。所以要进入它,我从一个简单的例子开始。我已将以下给定代码写入 use_after_free.c
#include<stdio.h>
#include<stdlib.h>
int gArray[100];
int main()
{
int *arr = (int*)malloc(5*sizeof(int));
arr[1]=45;
printf("Before Free : arr[1] = %d\n",arr[1]);
free(arr);
printf("After Free : arr[1] = %d\n",arr[1]);
printf("gArray[101] : %d\n",gArray[105]);
return 0;
}
我已经安装了以下库:
1) apt-get install llvm
2) apt-get install clang
然后我使用以下命令编译了代码:
clang -O1 -g -fsanitize=address -fno-omit-frame-pointer use_after_free.c
当我执行使用上述命令创建的二进制文件时,我预计地址清理程序会出现一些错误。但我得到的输出没有任何错误。我的方法有什么问题吗?
编辑:我使用的是 ubuntu 12.04、llvm 3.1 和 clang 3.1