程序静态分析是一种在不执行程序的情况下对程序行为进行分析的理论、技术,简称为静态分析。
程序动态分析则是另一种程序分析策略,它需要实际执行程序。
静态分析这一术语一般用来形容邹东华工具的分析,而人工分析则往往叫做程序理解。
所谓静态分析,就是从反汇编出来的程序清单上分析程序流程,了解模块完成的功能。
形式化方法
程序分析中的形式化方法一般指利用纯粹严格的数学方法对软件、硬件进行分析的理论及技术。
形式化静态分析中用到的实现技术有:
- 模型检查假设系统是有限状态的、或者可以通过抽象规则为有限状态
- 抽象解析将每条语句的影响模型化为一个抽象机器的状态。【抽象解释当且仅当抽象机器中的每一个性质都能与原始系统中的性质正确映射时,才被称为可靠的】
- 断言
文件类型分析
常用工具:FileInfo、TYP、Gtw
文件分析是静态分析程序的第一步,通过相关工具显示欲调试文件的信息,比如他是用什么语言写的,是否加壳等。
静态分析工具
静态分析程序不需要执行所测试的程序,它扫描所测试程序的中文,堆程序的数据流和控制流进行分析,然后送出测试报告。通常,它具有:
- 对模块中的所有变量检查其是否都已定义,是否引用了未定义的变量,是否有已赋过值但从未使用的变量。【实现方法是建立变量的交叉引用表】
- 检查模块接口的一致性
- 检查在逻辑上可能有错误的结构以及多余的不可达的程序段
- 建立“变量/语句交叉引用表”、“子程序调用顺序表”、“公用区/子程序交叉引用表”等,利用他们找出变量错误有可能影响到那些语句,影响到那些其他变量等。
- 检查所测程序违反编程标准的错误
- 对一些静态特性的统计功能