1. C代码静态分析工具
Its4 |
读取一个或多个 C/C++源程序,将每个源程序分割成函数标志流,然后检查生成的标志是否存在于漏洞数据库中,从而得到每个源程序的所有错误警告列表,并带有相关的描 述。其规则库vulns.i4d定义了各种函数的危险等级,描述等,通过规则匹配来报出风险,但它不能理解程序上下文意思,存在很大的误报。 |
Flawfinder |
词法扫描和分析,内嵌了一些漏洞数据库,如缓冲区溢出、格式化串漏洞等,扫描快,按照代码中漏洞的风险等级对漏洞进行划分,可以快速找到存在的问题,误报较高。 |
Rats |
扫描C、C++、Perl、PHP和Python开发的源程序中潜在的漏洞,扫描规则比较粗糙。 |
PC-lint |
一个由Gimpel Software提供的支持C/C++的商用程序 |
Splint |
(原来的 LCLint) 是一个GNU免费授权的 Lint程序,是一个动态检查C语言程序安全弱点和编写错误的程序。Splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误 |
2. splint安装
下载地址:
http://www.splint.org/downloads/splint-3.1.2.src.tgz
源码包安装:
# tar zxvf splint-3.1.2.src.tgz
# cd splint-3.1.2
# ./configure --prefix=$HOME/splint
#make
#make install
会出现错误。解决的办法:在cscanner.c中,直接增加函数:yywrap的定义如下:
int yywrap()
{
return 1;
}
3. 配置
splint提供了三种方式进行检查的控制,分别是flags标志、 .splintrc配置文件和格式化注释。
splint -showcol a.c //在检测a.c时,告警消息中列数不被打印
splint -varuse a.c //在检测a.c时,告警消息中未使用变量告警不被打印