一种内存错误的动态检测方法

一种内存错误的动态检测方法摘要:提出了一种内存错误的动态检测方法,通过统一的内存错误检测模型和接口,使内存错误检测处理过程规范化,便于扩展。实验表明,该方法可以方便地进行扩展,以增加内存错误的检测能力。关键词:内存错误检测;动态检测;检测扩展:TP302文献标志码:A:1001-3695(2008)05-1550-030引言????C/C++等语言的动态内存机制为程序设计提供了灵活和方便。但??C/C++语言及其支持库本质上是不安全的,动态内存的手工分配和管理,极易在程序中引入内存错误。在使用动态内存的软件系统中,50%的软件故障与内存的管理有关[1]。动态内存的相关错误有内存泄漏、内存的重复释放、空指针引用、越界访问和类型错误等[1~3]。这些错误会导致系统失效甚至崩溃,从而降低了系统运行过程中的可靠性。尽管这些错误在程序中普遍存在,但是采用传统的白盒测试和黑盒测试都很难发现这些错误。??检测内存错误的方法主要分为两类,即动态方法和静态方法。动态方法需要在程序运行过程中进行潜在错误的检测。例如,Purify[4]、Lackey可以检测程序中存在的内存泄漏问题;Memcheck主要能发现未定义值的错误[5];Annelid可以发现越界访问错误;Safe-c[6]和shadowprocessing[7]主要检测某一类特定的错误;Redux是一个可视化的内存错误发现工具,其检测错误的能力也有限。目前动态检测方法通常只能检测某(些)类内存错误,不容易进行扩展以检测更多类型的内存错误。静态方法[8,9]通过对程序结构的分析来检测程序中隐藏的动态内存错误。例如,Lint、Splint等通过在源程序中添加注释语句来检测程序中潜在的内存错误,其检错效果与应用程序注释工作量有关,即人工干预的工作量大,经常给出误报。??目前,内存错误的检测方法处理内存错误类型较为单一,未能有效利用内存使用信息,缺乏动态扩展能力。本文提出了一种内存错误的动态检测方法,该方法利用了语言级信息,较为全面地获取程序对内存使用的信息;利用扩展接口,可以方便地增加检测多种类型内存错误的功能。??1体系结构描述??1.1系统总体结构??本方法通过设计扩展接口和利用语言级元数据,来解决现有方法存在的问题,建立解决多种类型内存错误的统一系统结构。通过扩展接口,将检测特定内存错误的功能做成一个扩展模块,可以在系统运行时动态加载,即检测某类特定的内存错误时,需要加载相应的扩展模块。通过扩展接口可以设置检测规则以确定检测任务,系统根据检测规则定义进行相应的错误检测。在系统运行时,根据检测规则设置确定检测内容,加载相应的检测模块。解析元数据模块从二进制文件中解析出变量和函数等元数据,以获取程序对内存的使用信息。利用这些元数据,系统可以根据检测规则进行相应的检测。这样,通过扩展接口实现相应的扩展模块,就可以达到统一解决多种类型内存错误的目的。动态检测如图1所示。??通过配置检测规则和相应的扩展模块,系统可以用来检测多种类型的内存错误。目前已经配置了一个默认的扩展模块,可以用来检测越界访问和内存泄漏等类型的内存错误。??系统工作时,程序载入模块将二进制文件载入系统,等待运行;然后,元数据解析模块解析二进制文件,获得元数据,过滤器根据检测规则和元数据生成相应的检测点和需要检测的内存错误;最后,由改写模块根据检测规则动态地加载相应的扩展模块。在这些准备工作完成后,由改写模块通知插入模块和检测翻译模块准备完成;检测翻译模块启动程序,并负责监控其运行。在检测点处,检测翻译模块通过插入模块和改写模块调用相应的扩展模块,扩展模块负责在插入点处,插入检测代码;然后,再将程序的运行交给检测翻译模块控制。利用插入代码在检测点处进行内存错误的检测,在错误发生时,由检测翻译模块生成相应的错误类型,并给出错误报告。??以下分别给出元数据、检测规则和过滤器的描述。??1.2检测规则定义??在检测时,不需要对所有变量和函数都进行检测,只需要对某些特定的变量和函数进行检测。为了减轻系统的负担,同时也能够增加系统的扩展性,定义了如下的检测规则。??定义1检测对象(object)是指在程序运行过程中,要检测的对象。一般指程序中的变量,是变...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?