论文部分内容阅读
随着软件系统规模的日益增大,软件系统的结构也变得日趋复杂,保证软件系统的质量也逐渐成为软件技术研究的重点。调查研究表明,软件的资源泄漏故障是影响软件系统质量的主要原因,因此对资源泄漏故障的检测和研究具有重要意义。虽然Java等语言有较完善的资源回收机制,但是C语言由于其高效性和灵活性,在很多领域有不可替代的作用。目前,针对源码进行检测分析的方法中,静态分析方法由于其突出的优势被许多业内学者认可。所以,对C语言资源泄漏的静态检测分析具有重要的理论和实践意义。 本文首先对资源泄漏的相关背景、静态分析的原理和方法、现有资源泄漏静态分析工具的研究现状做了介绍,然后在此基础上对函数内分析方法、函数间分析方法、漏洞定位和可视化方法进行了研究。 在上述研究基础上,本文设计并实现了针对C语言内存泄漏和文件旬柄丢失漏洞的静态分析系统,通过预处理模块对C语言源码进行解析,构造对应的控制流图,并在此基础上进行数据流分析,获取资源的前向切片,若某资源没有对应的释放点,则判定存在一处资源泄漏,否则,在前向切片的基础上进行后向遍历,并基于控制流图进行符号执行,合并不影响资源分配释放的路径,获取与资源分配释放相关的数据流条件,得到函数内资源行为切片MFG。在进行函数间分析时,根据函数间调用关系,深度优先遍历分对被调用函数进行函数内分析,将分析结果总结成函数摘要,在函数内MFG基础上增加调用函数和被调用函数间的入口边和返回边,并根据函数摘要进行函数实例化,完成函数间分析。然后通过约束求解器求解,根据资源泄漏模式得出检测结果。最后,根据漏洞定位算法,在数据流分析值流条件的基础上,逆向推导出漏洞所在位置,定位漏洞并图形化显示漏洞路径和函数控制流图。 实验表明,本系统具有较高的检测效率和可用性,在C语言资源泄漏静态分析方面有实际意义。