linux下代码分析工具Splint

时间:2021-08-19 16:11:46

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. 配置

#vi  ~/.bashrc
在文件中加入:
export LARCH_PATH=$HOME/splint/share/splint/lib
export LCLIMPORTDIR=$HOME/splint/share/splint/imports
.  ~/.bashrc
环境变量export PATH=$HOME/splint/bin:$PATH
 
5. 检查控制

splint提供了三种方式进行检查的控制,分别是flags标志、 .splintrc配置文件和格式化注释。

•flags: splint支持几百个标志用来控制检查和消息报告,使用时标志前加‘+’或‘-’,‘+’标志开启这个标志,‘-’表示关闭此标志。下面例子展示了flags标志的用法:

splint -showcol a.c //在检测a.c时,告警消息中列数不被打印
splint -varuse a.c //在检测a.c时,告警消息中未使用变量告警不被打印

•.splintrc配置文件: .splintrc文件中对一些flags做了默认的设定,命令行中指定的flags会覆盖.splintrc文件中的标志。

格式化注释:格式化注释提供一个类型、变量或函数的额外的信息,可以控制标志设置,增加检查效果。所有格式化注释都以/*@开始,@*/结束,比如在函数参数前加/*@null@*/,表示该参数可能是NULL,做检测时,splint会加强对该参数的值的检测。