论文部分内容阅读
嵌入式软件广泛应用于军工、航空航天、医疗等重要行业,随着嵌入式软件在产品系统中的地位和作用日益提高,安全性问题也日益突出。运行时错误(Run-time Errors)是影响嵌入式软件安全性的重要因素。运行时错误是软件在动态运行时出现的错误,由ANSIC定义,是指那些能导致预定义之外的不正确结果或者处理器停机的错误。 目前运行时错误的检测主要有动态测试和静态分析两种方法。动态测试的结果完全依赖于测试用例的质量,且不可能覆盖所有情况。静态分析方法不用执行程序,能够全面分析程序的所有路径。其在代码实现阶段就检测错误,降低后期测试的时间和费用。同时,静态分析方法具有可伸缩性,能够对函数、模块及工程等不同规模的目标程序进行分析。但静态分析一直面临着效率和精度平衡兼顾的问题,为了使得分析结果更加准确,必须在程序分析过程中记录更加详细复杂的信息,这就会导致时间和资源的高消耗。 本论文提出一种基于属性模型的静态分析方法,该方法将形式化模型验证和程序数据流分析相结合。首先,将运行时错误按照它们发生的原因进行分类,提取每类错误的属性模式,对属性模式进行形式化建模形成属性有限状态机。然后,对程序控制流图中与属性相关的路径进行属性流分析,实现路径敏感的过程内分析,为了减小复杂度,分析时合并相同属性的路径条件。最后,对照程序调用图,利用函数摘要实现上下文敏感的过程间分析。 同时,本论文在属性流的分析过程中,提出了一种准确高效的指针别名分析方法。该方法以Rugina算法为基础,在指针指向信息的二元组表达式上增加一个路径域扩展成三元组,实现路径敏感的指针别名分析。为了减小复杂度,过程间别名分析时采用过程摘要的方法。 实验结果显示,本论文提出的运行时错误的静态分析方法与现存的静态分析方法相比,在精度和效率之间取得一个良好的平衡。