【问题标题】:Valgrind won't detect buffer overflowValgrind 不会检测缓冲区溢出
【发布时间】:2015-07-02 18:40:18
【问题描述】:
#include <stdio.h>
main()
{     
    char buf[8];
    sprintf(buf,"AAAA%3s","XXssssssssXXXsssssXXX");
    printf("%s\n",buf);
}

我希望 valgrind 使用上述代码检测缓冲区溢出。但它不报告任何错误或警告。我需要为此启用任何特殊标志吗?

【问题讨论】:

  • 使用最近的gccclang 编译器,您可以使用-Wall -g -fsanitize=address 进行编译,它可能会在运行时给出一条消息。 BTW sprintf 本质上是不安全的,不应使用。使用snprintfasprintf
  • 查看我们的 CheckPointer 工具;它会发现许多 valgrind 无法找到的内存错误。 semdesigns.com/Products/MemorySafety

标签: c valgrind buffer-overflow


【解决方案1】:

来自Valgrind Tutorial

valgrind 不是什么

虽然 valgrind 是一个非常有用的程序,但它不会奇迹般地告诉您程序中的每个内存错误。您应该记住几个限制。它不对堆栈/静态数组进行边界检查..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多