【问题标题】:Using Address Sanitizer as an alternative to Valgrind使用 Address Sanitizer 作为 Valgrind 的替代品
【发布时间】:2016-02-08 13:58:36
【问题描述】:

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

【问题讨论】:

  • 您确定您使用的是正确的二进制文件吗?该程序在此处显示“错误:AddressSanitizer: heap-use-after-free ...”。
  • 根据您的构建命令,您的二进制文件可能命名为a.out。是你跑的那个吗?
  • 我的文件夹中只有一个源文件。我只使用正确的二进制文件。我已经执行了 a.out。这意味着我的设置可能有问题。
  • @Leiaz : 我需要设置任何路径变量以使用地址清理程序吗?
  • 不要将malloc和朋友的结果投射到C中。

标签: c clang address-sanitizer


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 2023-04-06
    • 2017-10-09
    • 2022-01-23
    • 2021-12-02
    • 2020-07-01
    • 2015-09-17
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多