[发明专利]一种内存错误检测方法有效
申请号: | 201410366790.5 | 申请日: | 2014-07-29 |
公开(公告)号: | CN104133733B | 公开(公告)日: | 2017-03-29 |
发明(设计)人: | 康一梅;张浩中 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 北京科迪生专利代理有限责任公司11251 | 代理人: | 成金玉,李新华 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 错误 检测 方法 | ||
技术领域
本发明属于计算机软件安全与可靠性保障领域,尤其涉及计算机应用程序的内存错误检测方法。
背景技术
C/C++语言中由于能够直接对计算机内存地址空间进行操作,虽极大方便了程序员,但在具体操作过程中,由于程序员的疏忽或本身技术水平有限,程序中总是不可避免地出现包括数组越界、野指针访问、空指针引用、内存释放错误和内存泄露等内存错误。这些内存错误一般很难在调试过程中就被发现,即使找出来也是相当费时的,特别是发生在代码量巨大或者模块之间调用关系比较复杂的程序中。内存错误除了可能导致程序运行错误和系统崩溃,还可能导致缓冲区溢出等问题,从而影响系统安全性。所以,在对可靠性和安全性要求较为苛刻的系统部署前,非常有必要对计算机应用程序进行内存错误检测。而现有内存错误检测技术基本上都只能检测上述内存错误的一种或几种错误,没有办法从内存错误发生的根源上对上述所有内存错误进行检测。
发明内容
本发明的技术解决问题:克服现有技术的不足,提供一种能够从根源上检测出计算机应用程序中包括越界访问、指针非法引用、内存错误释放和内存泄露等四大类常见内存错误的方法,保证了计算机软件的安全性和可靠性。
本发明的核心思想是在应用程序访问内存地址空间之前,就对其即将访问的内存地址空间进行验证。如果验证不通过,说明存在内存错误问题;否则说明不存在内存错误问题,程序继续运行。如此反复,直至程序运行结束或被异常终止运行。
本发明提供的检测方法包括以下步骤:如图1所示:
步骤101,对应用程序进行静态分析,完成对所述应用程序的内存错误特征建模。
其中,对所述应用程序的内存错误特征建模的过程是识别所述应用程序中所有可能出现内存错误的语句和位置信息识别和记录的过程,该内存错误特征模型包括所述应用程序中的数组、指针、不安全字符串操作函数、内存分配与释放函数等关键错误节点的声明、引用或调用语句所在的位置信息和引用或调用信息。
步骤102,运行所述应用程序,利用内存错误特征模型,创建并动态维护一个全局的合法地址库。
在运行所述应用程序的过程中,需要根据内存错误特征模型及步骤(101)中得到的数据完成所述应用程序的合法地址库的创建。
所述合法地址库存储了所述应用程序在运行时当前即时有效的所有内存地址空间的记录,所述合法地址库中的每一条记录对应所述应用程序中一个对象。所述对象指的是所述应用程序在内存中可单独存在的语法个体,即所述应用程序的一个变量或函数。
所述合法地址库中的记录会随着所述应用程序的不断运行,会因为变量的声明、变量被赋值、函数调用以及内存的申请和释放操作不断更新。其中,变量声明或新申请成功内存时,需要在合法地址库中创建一条心的记录;变量被赋值时,需要修改合法地址库中关联记录的合法地址范围;变量或函数脱离作用域或释放成功内存时,需要删除合法地址库中关联记录。
步骤103,在所述应用程序运行完毕或被异常终止运行之前,所述应用程序每次访问内存前均先计算即将访问的地址范围,并与合法地址库中的记录相匹配;若无法匹配上,则说明将发生内存错误,记录下相关错误信息。
其中,若计算出的地址范围与所述应用程序中发起访问的语法对象在所述合法地址库中关联记录中的地方范围不是包含与被包含的关系,则说明当次访问将出现内存错误。此时只需根据前述两个地址范围的实际包含关系和所述语法对象的类型、操作类型来判断可能会出现的内存错误类型及其他相关信息。
步骤104,在所述应用程序运行完毕或被异常终止运行后检查合法地址库中是否存在由内存分配函数创建的记录;若存在,说明发生了内存泄露错误,记录下相关错误信息。
本发明与现有技术相比优点在于:本发明提供的内存错误检测方法由于是从根源上对计算机应用程序进行内存错误检测,所以能够保证此方法的有效性远超当前所有内存错误检测方法,而且检测出的内存错误的数量能够涵盖所有常见的内存错误。
附图说明
图1为本发明的内存错误检测方法的流程图;
图2为本发明实施例中内存错误特征建模流程图;
图3为本发明实施例中合法地址库的动态维护流程图;
图4为本发明实施例中合法地址库示意图。
具体实施方式
以下结合本发明实施例附图来对本发明实施例中的技术方案进行清除、完整地描述,显然所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
如图2为本发明实施例中内存错误特征建模流程图,所述方法步骤如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410366790.5/2.html,转载请声明来源钻瓜专利网。