论文部分内容阅读
缺陷,是导致程序不能正常运行的错误或瑕疵。由于缺陷的存在,使程序运行轻则结果出错,重则崩溃退出,甚至造成人力、物力、财力的重大损失。因此,程序开发者们总是尽可能的避免程序缺陷的出现,将无缺陷的代码作为最高目标。使用测试用例对软件产品进行缺陷检测,效率低且容易出错。人工代码审计又对参与人员的能力提出了很高的要求。人们希望尽可能的对这些缺陷进行自动化查找,源代码分析检测工具应运而生。
源代码分析检测的优点,就在于它的自动化。由于实际代码的复杂性,对分析检测工具有了更高的要求,减少漏报和误报是很重要的两个方面。近二十年来,源代码分析检测方法有了很大的发展。虽然目前有很多检测缺陷的方法,但缺少一种面向编程人员,在易用性和功能性方面比较均衡的工具(商业版本过于昂贵、开源版本不够强大)。而本文就是在这方面的一次探索和尝试。
本文以GCC4作为基础平台,首次实现了一个用于描述缺陷的框架语言BDL(Bug Description Language),包括5大部分,分别是:用于解析缺陷语言的BDL前端解析器、用于保存缺陷规则的BDL中间代码、从GCC4获取代码信息的BDL后端、依照规则进行状态转换的BDL自动机、以及提供模式匹配和错误回溯的BDL内建函数。与其它开源软件相比,使用BDL,用户可以更容易与准确的自定义和查找多种逻辑缺陷。
为了提高检测能力和效率,本文还在路径遍历、全局分析、缓冲、注释支持等方面作了大量优化,使得BDL不仅仅是一个系统原形,还能查找真实复杂代码中的自定义缺陷,同时,又在易用性和功能性方面实现了较好的平衡。