论文摘要
C语言中的指针机制使程序员可以直接访问内存地址,具有很高的灵活性。但是由于指针操作不当而引起的动态内存错误也有很多,空指针解引用就是其中的一类。这些错误的存在导致了软件质量和可靠性的下降,而且采用传统的测试方法进行检测很难奏效。静态分析方法不需要运行程序,而是通过对程序代码的分析检查程序中隐藏的错误。本文采用静态分析技术对C程序中的空指针解引用错误进行检测。我们首先基于一种流敏感、上下文敏感的指针分析算法给出了一个表达式左值的计算方法。根据这一方法,我们可以判断任意给定的两个表达式是否为别名。然后,结合上述流敏感、上下文敏感的别名分析,本文针对C程序中的空指针解引用错误给出了一种需求驱动的后向数据流分析算法。算法首先假设已知程序中的某处发生了空指针解引用错误,然后从该结点出发,逆着控制流的方向追踪空值的赋值过程,最终通过错误表达式集合是否为空来判断初始结点处是否发生了错误。我们根据这一过程构造后向的数据流分析方程,最后通过不动点计算理论计算数据流方程的解。在求解过程中,本文使用传统的worklist算法框架对不动点进行迭代计算。我们在SUIF2编译平台上实现了这一算法,并对一些C程序进行了分析,实验结果表明算法具有较高的检测精度。
论文目录
摘要ABSTRACT第一章 绪论1.1 研究背景1.2 研究现状1.2.1 空指针解引用故障模型分析1.2.2 动态内存错误检测方法1.3 课题研究的主要内容和框架1.3.1 课题研究主要内容1.3.2 研究框架1.4 本文的组织结构第二章 空指针解引用检测相关研究2.1 程序静态分析概述2.1.1 程序控制流分析术语2.1.2 过程调用图和过程间分析2.2 数据流分析研究2.2.1 数据流问题分类2.2.2 数据流分析算法2.3 本章小结第三章 一种表达式别名分析方法3.1 指针分析中的关键问题3.1.1 指向信息的表示3.1.2 指针分析精度3.1.3 现有指针分析方法比较3.2 基于指向图的表达式左值计算3.2.1 指向图构成与元素的表示3.2.2 表达式左值计算公式3.3 算法实现3.3.1 符号表处理3.3.2 指针表达式左值计算3.4 本章小结第四章 需求驱动的空指针解引用静态分析4.1 基本思想4.1.1 分析过程示例4.1.2 空指针解引用的类型状态规约4.2 指针语言抽象4.3 需求驱动的后向数据流分析4.3.1 数据流框架与查询4.3.2 空指针解引用数据流传播规则4.3.3 基本块映射函数计算4.3.4 空指针解引用算法实现4.4 实验4.4.1 试验结果与分析4.4.2 相关工作与比较4.5 本章小结第五章 结束语致谢参考文献作者在学期间取得的学术成果
相关论文文献
标签:空指针解引用论文; 后向分析论文; 指针分析论文; 需求驱动论文;