博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用PVS在.NET内核中发现的缺陷
阅读量:6834 次
发布时间:2019-06-26

本文共 872 字,大约阅读时间需要 2 分钟。

的作者是一名C++静态分析师,他公布了对 源代码的研究结果。虽然他的主要意图是演示工具,但它也揭示了写零缺陷的C++代码是多么地难。

\\

他们找到的第一个缺陷是手误的错误。看看下面这行代码:

\\
\if ((tree-\u0026gt;gtOper == GT_CLS_VAR ||\    tree-\u0026gt;gtOper == GT_CLS_VAR) \u0026amp;\u0026amp; i == 1)
\\

很显然,它把一个变量与一个常量比较了两次,所以这可能是个复制-粘贴的错误。(这种错误可能在任何语言中都会存在。)

\\

它们发现的另一个手误的错误应该会发生在C风格的语言中,那就是变量初始化它自身。

\\
\CorElementType elemType = elemType = TryEncodeUsingShortcut(pMT);
\\

到现在为止所说的缺陷都比较容易通过代码审查找出来。下面这个就不行喽:

\\
\CodeGenInterface::CodeGenInterface(Compiler* theCompiler) :\    compiler(theCompiler),\    gcInfo(theCompiler),     regSet(theCompiler, gcInfo)\{\}
\\

只通过这段代码你发现不了什么,但是regSet要在gcInfo之前初始化。 Svyatoslav Razmyslov 解释说,

\\

标准规定,在构建函数中的类成员初始化的顺序和它们在该类中的声明顺序是一样的。为了修复这个错误,我们应该移动类成员'gcInfo’声明的位置。

\\

如果不用类似于PVS Studio这样的工具,那么发现这类缺陷的唯一方式就是手工比较这些成员变量声明的顺序以及它们在构造函数中需要被初始化的顺序。另外,无知的重构(比如把域按字母顺序予以排列)也会引入缺陷。

\\

那么重点在于,C++编程如此之难。还有更多的例子,可阅读此篇文章:.

\\

查看英文原文:

转载地址:http://hixkl.baihongyu.com/

你可能感兴趣的文章
H.264中NAL、Slice与frame意思及相互关系
查看>>
《Linux From Scratch》第二部分:准备构建 第五章:构建临时文件系统- 5.25. Gzip-1.6...
查看>>
Spark-SparkSQL深入学习系列六(转自OopsOutOfMemory)
查看>>
在HTML下,如何为多个选择框提取数据并序列化
查看>>
还以为敏捷开发是个概念?有人已经将它变为现实了!
查看>>
无服务计算是未来
查看>>
热点推荐:Java类加载器深入理解
查看>>
如何实现一个稍微复杂的simplelist
查看>>
安全课堂:云安全七项最佳实践
查看>>
数据分析,或许不是为了分析,而是为了规范
查看>>
苹果陷恐怖分子数据加密风波 WhatsApp声援
查看>>
新浪微博平台自动化运维演进之路
查看>>
足够安全 美国防部计划将400万部设备升级至Win10
查看>>
转型之旅 VMware是如何践行数字化转型的?
查看>>
27家大数据企业入驻京玖大厦
查看>>
深港成立大数据联盟 推动智慧城市建设
查看>>
《Spring技术内幕》——导读
查看>>
电讯盈科企业方案公司成立全球数据中心联盟
查看>>
美国情报部门表示可通过物联网监控公民
查看>>
2016年俄罗斯M2M市场达100亿俄罗斯卢布
查看>>