使用Address Sanitizer替代Valgrind

时间:2016-02-08 13:58:36

标签: c clang address-sanitizer

我已经读过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

1 个答案:

答案 0 :(得分:0)

Ubuntu 12.04带来了clang 3.03.33.4,但不是3.1。您正在使用3.0版本(它不支持地址清理程序并静默吞下-fsanitize=address),或者您使用的是某些未提及的第三方来源。 clang --version告诉了什么?

对于解决方案:apt-get install clang-3.4将解决您的问题。