介绍一些常用的静态代码扫描工具,由于我也是才使用,可能了解的不全面。另外,以下我说明的代码是使用C语言编写的。
1 Flawfinder
简介:在源代码中查找潜在的安全缺陷的软件。
下载地址:Flawfinder Home Page (dwheeler.com)
1)运行环境:Linux,如果要在Windows下使用需要使用Cygwin。
2)使用方式:这里给出最简单的使用方式,其余参数请参考说明文档。
下载之后,直接解压,然后直接运行:
./flawfinder 代码所在目录
也可以使用重定向符将结果输出到一个log中。
$ ./flawfinder ~/My_Cli/ >check.log
3)输出结果
在输出结果中,有检查的统计:
总共检查了3771行代码,用时0.07秒,代码缺陷一共分为6个等级,0最低,5最高。
Hits@level: 表示各个缺陷等级检测出的问题个数。
每个缺陷都有一个含义说明,以及对应的编码,编码的含义可以在帮助文档中查看。
4)注释不检测
如果有些代码缺陷是Flawfinder误报的,我们希望不检查这个缺陷,可使用以下两种方式在代码中注释,注释之后将不会检查这个缺陷。
2 cppcheck
- 简介
Cppcheck是一种代码缺陷静态检查工具。不同于编译器以及其它分析工具,cppcheck只检查编译器检
查不出来的bug,不检查语法错误。Cppcheck将软件缺陷从静态源代码的角度划分为12个检查类,分别
给予检测和定位,并赋予8种不同的级别,分别为none,error,warning,style,performance,
portability,information,debug。
下载地址:Cppcheck - A tool for static C/C++ code analysis
2)异常说明
各种异常的说明:
:当代码被执行时,会有一些错误的行为(如:未定义行为、泄露);
:当代码执行时,可能会有未定义的行为;
:可能的错误,建议改为更健壮的写法,例如:未使用的代码/变量/函数、总是为真/假、运算符优先级。
:使代码运行更快的建议。这些建议仅基于一些通用知识。通过修复这些差异,不确定会得到明显的速度提升。
:可移植性警告。例如,定义的方式,64位的可移植性等。
:配置问题,如果你想得到这样的输出,那就没问题,但需要更改cppcheck的配置。
3)使用方式
打开软件,点击”Analyze“,然后点击"目录",选择我们需要检查的代码目录即可。
可以通过勾选下图中的图标进行查看error、warning、style等消息类型
4)查看结果
点击“查看”,选择“统计”,可看到统计结果。点击“全部展开”,可看到每个文件的扫描结果。
也可选择“文件”,然后选择“保存结果到文件”,支持3种文件格式类型,我比较喜欢使用csv格式,方便查看。
3 TscanCode
- 简介
TscanCode是腾讯自研的一款静态代码扫描工具,支持C++语言,C#,Lua语言,在发掘C++空指针,
越界、未初始化,C#空引用,Lua变量未初始化等比较有效。
下载地址:Tencent/TscanCode: A static code analyzer for C++, C#, Lua (github.com)
2)使用方式
打开软件,选择“扫描文件夹”即可。
扫描完成后,会直接输出弹出一个扫描结果的窗口,可以保存结果,仅支持xml格式。
也可以直接双击结果,查看报错的位置的代码。
4)规格选择
点击“设置”,可查看代码扫描的规则,以及选择规则。