静态代码扫描工具简介

介绍一些常用的静态代码扫描工具,由于我也是才使用,可能了解的不全面。另外,以下我说明的代码是使用C语言编写的。

1 Flawfinder

简介:在源代码中查找潜在的安全缺陷的软件。

下载地址:Flawfinder Home Page (dwheeler.com)

image-20210427112623331

1)运行环境:Linux,如果要在Windows下使用需要使用Cygwin,Cygwin官网:https://cygwin.com/index.html。

2)使用方式:这里给出最简单的使用方式,其余参数请参考说明文档。

下载之后,直接解压,然后直接运行:

./flawfinder 代码所在目录

image-20210427113628884

也可以使用重定向符将结果输出到一个log中。

$ ./flawfinder ~/My_Cli/ >check.log

3)输出结果

在输出结果中,有检查的统计:

image-20210427114427222

总共检查了3771行代码,用时0.07秒,代码缺陷一共分为6个等级,0最低,5最高。

Hits@level: 表示各个缺陷等级检测出的问题个数。

image-20210427133154935

每个缺陷都有一个含义说明,以及对应的编码,编码的含义可以在帮助文档中查看。

image-20210427133345538

image-20210427133434099

4)注释不检测

如果有些代码缺陷是Flawfinder误报的,我们希望不检查这个缺陷,可使用以下两种方式在代码中注释,注释之后将不会检查这个缺陷。

image-20210427133736832

2 cppcheck

  1. 简介

Cppcheck是一种代码缺陷静态检查工具。不同于编译器以及其它分析工具,cppcheck只检查编译器检

查不出来的bug,不检查语法错误。Cppcheck将软件缺陷从静态源代码的角度划分为12个检查类,分别

给予检测和定位,并赋予8种不同的级别,分别为none,error,warning,style,performance,

portability,information,debug。

下载地址:Cppcheck - A tool for static C/C++ code analysis

2)异常说明

各种异常的说明:

img:当代码被执行时,会有一些错误的行为(如:未定义行为、泄露);

img:当代码执行时,可能会有未定义的行为;

img:可能的错误,建议改为更健壮的写法,例如:未使用的代码/变量/函数、总是为真/假、运算符优先级。

img:使代码运行更快的建议。这些建议仅基于一些通用知识。通过修复这些差异,不确定会得到明显的速度提升。

img:可移植性警告。例如,定义的方式,64位的可移植性等。

img:配置问题,如果你想得到这样的输出,那就没问题,但需要更改cppcheck的配置。

3)使用方式

打开软件,点击”Analyze“,然后点击"目录",选择我们需要检查的代码目录即可。

image-20210427134031898

可以通过勾选下图中的图标进行查看error、warning、style等消息类型

img

4)查看结果

点击“查看”,选择“统计”,可看到统计结果。点击“全部展开”,可看到每个文件的扫描结果。

image-20210427134445237

也可选择“文件”,然后选择“保存结果到文件”,支持3种文件格式类型,我比较喜欢使用csv格式,方便查看。

image-20210427134710324

3 TscanCode

  1. 简介

TscanCode是腾讯自研的一款静态代码扫描工具,支持C++语言,C#,Lua语言,在发掘C++空指针,

越界、未初始化,C#空引用,Lua变量未初始化等比较有效。

下载地址:Tencent/TscanCode: A static code analyzer for C++, C#, Lua (github.com)

2)使用方式

打开软件,选择“扫描文件夹”即可。

image-20210427135709917

扫描完成后,会直接输出弹出一个扫描结果的窗口,可以保存结果,仅支持xml格式。

image-20210427135616706

也可以直接双击结果,查看报错的位置的代码。

image-20210427140024174

4)规格选择

点击“设置”,可查看代码扫描的规则,以及选择规则。

image-20210427140227315

posted @ 2021-04-27 14:07  zhengcixi  阅读(2226)  评论(0编辑  收藏  举报
回到顶部