首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一些静态分析工具不报告潜在的缓冲区溢出?

为什么一些静态分析工具不报告潜在的缓冲区溢出?
EN

Stack Overflow用户
提问于 2013-02-12 01:05:28
回答 2查看 400关注 0票数 3

我有一个strcpy命令的例子,它似乎有缓冲区溢出的风险,但PVS-Studio没有发出警告。在我的示例中,strcpy用于将命令行参数复制到缓冲区中,而不检查命令行参数的大小。如果参数超过缓冲区的大小,这可能会导致缓冲区溢出。

代码示例:

代码语言:javascript
复制
char carg1[13];
int main(int argc, char* argv[])
{
// Get name from the 1st command line arg
       strcpy(carg1, argv[1]);
…
}

在进入carg1之前,不会检查argv1的大小。这难道不应该引起一个警告吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-12 01:10:59

从理论上讲,构建一个完美的静态分析工具是不可能的(这是从停顿问题的不可判断性这样的结果得出的)。因此,所有静态分析工具充其量都是启发式的,可以尝试检测某些类别的错误,即使这样也不一定能检测到所有这些错误。

所以,是的,上面的代码看起来有一个潜在的缓冲区溢出。老实说,我不知道为什么这个特定的工具不能检测到错误,但我猜分析器出于某种原因使用的内部启发式方法无法检测到它。

希望这能有所帮助!

票数 4
EN

Stack Overflow用户

发布于 2017-03-14 00:30:02

这里有3个事实:

1)如果你使用Visual C++编译器,那么你将收到编译器警告4996。

1>robust.cpp(529):警告C4996:'strcpy':此函数或变量可能不安全。考虑改用strcpy_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅联机帮助。1> C:\Program Files (x86)\Microsoft Visual Studio11.0\VC\include\String.h(110):请参见'strcpy‘的声明

2) PVS-Studio最初仅适用于Visual Studio。

3) PVS-Studio策略是实现不重复编译器警告的诊断规则。

因此,PVS不检查大小写似乎是合乎逻辑的,因为微软编译器已经检查了很长一段时间(来自VS2005)。

更新:最终实现了这样的诊断规则:https://www.viva64.com/en/w/V755/print/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14817075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档