gpt4 book ai didi

c++ - sprintf 缓冲区全局数据溢出 - 如何检测它,Windows

转载 作者:行者123 更新时间:2023-11-30 01:53:53 25 4
gpt4 key购买 nike

我想知道是否有可能在 Windows 中以某种方式检测到这种缓冲区溢出。缓冲区是全局的(不在堆栈上)所以 Visual Studio 2008 中的/RTC,VS2012 不检查它。 MinGW gcc 也失败了。

#include <stdio.h>
char buffer[2];
void main()
{
sprintf(buffer,"12345");
}

我的第一个想法是静态分析。

  1. VS2012 代码分析:无
  2. CppCheck:无
  3. PCLint 在线:无 (http://www.gimpel-online.com/OnlineTesting.html)
  4. PVS-Studio:没有

另一种解决方案是使用 _s 版本。

#include <stdio.h>
char buffer[2];
void main()
{
sprintf_s(buffer, sizeof(buffer), "12345");
}

但是代码看起来像那样

#include <stdio.h>
char buffer[2];
void main()
{
sprintf_s(buffer, 20, "12345");
}

仍然存在未检测到缓冲区溢出的相同问题。

是否可以在全局数据(如堆栈)上使用内存保护、金丝雀,或者使用更好的静态、动态分析来解决这个问题?

最佳答案

我是一名 Cppcheck 开发人员。 Cppcheck 应该很容易检测到这一点。你用的是什么 Cppcheck 版本?最新的 Cppcheck 版本是 1.64。

这是使用 cppcheck-1.64 时的预期输出:

danielm@HP-Z220-2CMT:~/cppcheck$ ./cppcheck a.c 
Checking a.c...
[a.c:5]: (error) Buffer is accessed out of bounds.

关于c++ - sprintf 缓冲区全局数据溢出 - 如何检测它,Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com