论文部分内容阅读
得益于经济和科学技术的飞速发展,计算机技术日益普及,软件应用越来越广泛,整个软件行业取得了跨越式的发展。软件行业的发展给人们的工作生活带来了极大的便利,为经济社会的进步提供了动力支撑。然而伴随着软件应用范围的不断扩大和深入,软件规模越来越庞大,软件结构越来越复杂,由此引发了诸多严峻的安全问题。这些问题在给人们工作生活带来不便的同时,耗费了大量的人力财力。因此,如何及早检测出软件源代码中存在的安全缺陷问题成为行业研究的一个热点问题。目前,存在两种主要的代码安全缺陷检测方法:动态检测和静态检测。相对动态检测而言,静态检测不需要运行软件,它通过分析软件的源代码,查找软件中存在的安全缺陷问题。这类方法具备高效和低成本等特点,适用于大规模软件系统的安全缺陷检测。但是现有静态检测技术无法准确确定一些问题的上下文执行环境以及无法高效解决代码中的循环、分支等情况下的检测问题,使得该技术面临着路径爆炸的问题,导致检测存在较高的误报率等问题,这些问题的存在也使得代码的静态检测方法未能在商业中得到广泛应用。本文总结分析了国内外相关问题的研究现状,在已有的研究基础上,实现了一个基于静态分析的代码安全缺陷检测系统,用于检测c/c++源代码中存在的缓冲区溢出、内存泄露、空指针引用等安全缺陷。该系统在检测过程中,通过遍历生成的控制流图,提取有关变量的属性信息,运用区问运算、递归求解等技术确定了问题的上下文执行环境,能够有效检测出系统中存在的问题。此外,系统通过对指针变量间关系的研究,设计了解决别名问题的数据结构和算法,提高了检测的准确性。而且通过对分支循环语句部分进行特殊处理、生成函数摘要等技术避免了路径爆炸问题,降低了问题检测的复杂性。最后,本文分类测试了包含缓冲区溢出、内存泄露、空指针引用等问题的源代码,测试结果表明该系统能够准确检测代码中存在的安全缺陷问题,达到了系统设计的预期目的。