[发明专利]数组越界错误的自动检测和校正方法有效
申请号: | 201410022323.0 | 申请日: | 2014-01-17 |
公开(公告)号: | CN103778061A | 公开(公告)日: | 2014-05-07 |
发明(设计)人: | 陈哲;李文明;黄志球 | 申请(专利权)人: | 南京航空航天大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京经纬专利商标代理有限公司 32200 | 代理人: | 朱小兵;刘谦 |
地址: | 210016 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 数组 越界 错误 自动检测 校正 方法 | ||
技术领域
本发明涉及计算机软件测试和校正技术领域,特别涉及一种数组越界错误的自动检测和校正方法。
背景技术
缓冲区溢出是一种非常危险的软件漏洞,并广泛存在于各种应用软件中。缓冲区溢出漏洞可能导致软件行为异常、内存访问错误或系统崩溃,也可被黑客用来攻击有价值的软件系统。目前,缓冲区溢出问题已经成为造成软件漏洞的主要原因。例如,根据US-CERT漏洞数据库统计资料可知,在20个最严重的漏洞中,就有11个是由缓冲区溢出引起。尤其对于那些用于控制安全关键工业系统的嵌入式控制软件(例如,飞行控制软件、高速列车控制软件、核电站控制软件等)和安全关键应用软件系统(例如,银行交易软件、网上交易软件等),当因缓冲区溢出漏洞引起软件失效、系统故障或黑客攻击,损失将非常惨重。因此,有效的缓冲区溢出检测和校正技术是软件研发和维护中的重要问题。
软件中缓冲区的内存分配包括两种方式:静态内存分配和动态内存分配。静态内存分配主要指源代码中变量和数组的定义,而动态内存分配主要指使用malloc等内存管理函数为软件分配的堆空间。通常,不带操作系统或内存管理模块的嵌入式工业控制系统不支持动态内存分配。因此,在这样的系统中,数组越界访问成为了缓冲区溢出的主要表现形式。也就是说,检测和校正软件中的数组越界错误是避免缓冲区溢出的主要方式。
目前,现有的检测数组越界错误的方法分为两种类型:静态方法和动态方法。
静态方法是指通过分析软件设计模型或者源代码来检验错误的方法,而不需要实际运行该软件。除人工代码走查之外,静态方法的一个主流技术是模型检验技术,例如SPIN模型检验器等。模型检验工具一般通过抽象建模,运行验证,生成和分析反例等步骤来检验设计模型的正确性。例如,业内曾经使用SPIN模型检验器对某型国产飞机的飞行控制系统的缓冲区控制模块的设计模型进行了验证,准确地找出了由模块间复杂交互行为引起的数组越界错误。模型检验技术的优点在于,可以对软件所有可能的行为进行穷举搜索,确保结果的完备性。然而,该技术的不足之处在于:1、由于模型检验技术本身的计算复杂性是PSPACE完全的,因此它与生俱来的状态爆炸问题使得该技术很难直接被应用于较大规模软件的验证,例如超过10000行代码的软件;2、由于模型检验技术通常是对软件系统抽象出来的设计模型进行验证,而不是全部源代码,所以无法确保该软件的实际实现是正确的,即无法确保源代码的正确性。
动态方法是指通过运行软件,并在软件运行过程中检测错误的方法。动态方法的一个主流技术是软件测试技术。软件测试工具一般通过编译源代码、运行待测试软件等步骤,在软件运行过程中根据设计的测试用例注入测试数据,通过对软件的输出进行分析(例如,与测试用例的预计输出进行对比),来观察软件运行是否正确,检测软件是否存在错误。软件测试技术的优点在于,有一定的自动化功能,可以进行测试用例管理、批量测试和回归测试。然而,该技术的不足之处在于:1、由于不直接面对源代码,无法准确定位导致错误发生的源代码位置;2、由于错误定位不准确,为软件的开发调试和校正造成了障碍。
另一种有效的动态方法是将软件在一个虚拟机上运行,该虚拟机可以模拟内存管理模块,从而检测软件中的数组越界错误。例如JAVA虚拟机就是一个典型的代表。虚拟机技术的优点在于,由于整个软件都处于被监控的状态,因此检测结果非常准确。然而,该技术的不足之处在于:1、由于虚拟机对软件的解释执行,使得软件运行负载过大,以至于软件效率和性能降低非常明显;2、对于嵌入式安全关键工业控制系统,由于高实时性和内存资源受限的要求,这样的效率和性能降低往往不能被接受,因此这种方法并不实用。
在检测到错误的存在后,就需要对错误进行校正,比如修改源代码。对于校正数组越界访问错误,常用的方法是人工调试和校正。也就是说,在软件测试阶段,根据软件测试工具的测试报告,由程序员使用代码调试工具,人工分析源代码的执行过程来定位错误。这一方法的优点是容易操作,不需要使用额外的工具。然而,该技术的不足之处在于:1、当源代码规模较大或者功能较为复杂,程序员不一定能准确定位错误在源代码中的位置,从而无法正确地修改源代码;2、当软件已经被部署到目标平台上,在实际运行过程中出现的数组越界访问错误无法通过这种方法进行校正,因此可能会引起软件失效、系统故障或黑客攻击。
因此,有必要提供一种新的数组越界错误的自动检测和校正方法,以实现更准确的错误定位功能,更好的运行时效率和性能,以及更自动化的运行时错误校正功能,从而克服现有的检测数组越界错误的方法中存在的技术问题。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京航空航天大学,未经南京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410022323.0/2.html,转载请声明来源钻瓜专利网。