论文部分内容阅读
随着软件技术的不断发展,软件的规模越来越大,复杂度越来越高,从而导致软件的安全性和可靠性越来越难以保障。其中,内存泄漏和数组越界是最容易引起严重安全性问题的软件缺陷之一。本文采用静态分析的方法来检测上述的软件缺陷,静态分析由于其“执行速度快、成本低、效率高”的特点,是目前研究最多的缺陷检测的技术。但是目前静态分析中对内存泄漏和数组越界等问题的相关研究中,误报率和漏报率较高。根据上述研究问题,本文主要的研究工作和创新点包括:(1)针对符号执行中循环引起的数组越界访问和路径爆炸问题,提出一种基于循环次数的循环迭代分析方法。该方法将循环迭代赋值转换为一阶差分方程,根据差分方程的解求解循环迭代次数,然后将循环转化为条件分支,解决符号执行中循环引起的路径爆炸问题。(2)针对目前的方法在内存泄漏缺陷检测时,只考虑了内存的释放状态导致内存泄漏缺陷检测误报和漏报率较高,并且没有考虑内存和数组越界访问问题,提出了一种上下文敏感的内存模拟方法。该方法对内存进行建模,模拟内存的状态和行为,并引入指针状态,通过指针状态、内存状态以及内存行为之间的变化,构建了内存状态转移图,根据状态之间的转移判断内存泄漏和数组越界故障是否存在。(3)针对上述两个创新点,实现了一个静态分析的原型系统。该系统采用符号执行和约束求解的方法,对C/C++代码进行内存泄漏和数组越界访问缺陷检测。在CWE,开源软件libxslt-1.1.20、openssh3.5p1、lhttpd0.1、bftpd1.0.24以及自组数据上,对本文所提出的静态分析方法分别进行了实验效果分析,实验结果表明,本文提出的方法对内存泄漏和数组越界的检测比现有的方法具有更高的准确率。