静态程序分析工具—Splint
1. 两种安装方式
1.1 windows本地安装
访问官网下载windows平台安装包,如:splint-3.1.1.win32.zip 。
下载后,解压到特定路径,并将bin路径(如:D:\ProgramData\splint-3.1.2\bin)添加到系统path。然后启动cmd,输入“ splint -help ”,终端会输出相关信息,说明安装完成。
1.2 cygwin中安装
为了方便,笔者采用cygwin对一些工具包进行统一管理,在cygwin安装包中搜索相应的程序,安装即可。
安装完成后,打开 Cygwin64 Terminal 输入“ splint -help ”,终端会输出相关信息,说明安装完成。
注:如果想在windows平台下调用cygwin中的splint,则将cygwin安装目录(如: D:\ProgramData\cygwin64\bin) 添加到系统path。
2. 代码检查
2.1 编译代码
以example文件为例example.zip,进行介绍。
由于Makefile已写好,直接运行make命令即可,生成main.exe,且程序能够正常运行。
2.2 调用splint
(1)静态程序分析
静态程序分析((Static program analysis))是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析(Dynamic program analysis)”;
(2)splint使用
splint是一个能够静态检查C程序安全漏洞及编程错误的开源工具。其检查项,主要覆盖以下几个方面:
Null Dereferences :针对空指针缺乏健壮性判断
Undefined Values :未初始化数据
Types : 转换类型不一致等
Memory Management : 内存管理检测,如内存泄露,内存释放和重分配,引用计数器
Sharing : 共享存储空间安全性检测
Function Interfaces : 函数接口检测,参数传递,全局变量处理等
Control Flow : 函数执行流分支检测等
Buffer Sizes :缓冲区边界管理、越界检查
Extensible Checking :
Macros :宏隐患检测
Naming Conventions : 命名空间检测
Completeness :完整性检测,包括未使用变量,未使用函数等
Libraries and Header File Inclusion : 库和头文件检测,如是否为posix库函数等
以example为例,运行检查指令,会看到终端输出一堆检查结果提醒。
splint main.c
关于splint的更多操作方法,可访问官网文档: http://splint.org/documentation/
参考来源: