- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种内存错误动态检测方法
一种内存错误的动态检测方法
摘要:提出了一种内存错误的动态检测方法,通过统一的内存错误检测模型和接口,使内存错误检测处理过程规范化,便于扩展。实验表明,该方法可以方便地进行扩展,以增加内存错误的检测能力。
关键词:内存错误检测;动态检测;检测扩展
中图分类号:TP302文献标志码:A
文章编号:1001-3695(2008)05-1550-03
0引言??
??C/C++等语言的动态内存机制为程序设计提供了灵活和方便。但??C/C++语言及其支持库本质上是不安全的,动态内存的手工分配和管理,极易在程序中引入内存错误。在使用动态内存的软件系统中,50%的软件故障与内存的管理有关[1]。动态内存的相关错误有内存泄漏、内存的重复释放、空指针引用、越界访问和类型错误等[1~3]。这些错误会导致系统失效甚至崩溃,从而降低了系统运行过程中的可靠性。尽管这些错误在程序中普遍存在,但是采用传统的白盒测试和黑盒测试都很难发现这些错误。??
检测内存错误的方法主要分为两类,即动态方法和静态方法。动态方法需要在程序运行过程中进行潜在错误的检测。例如,Purify[4]、Lackey可以检测程序中存在的内存泄漏问题;Memcheck主要能发现未定义值的错误[5];Annelid可以发现越界访问错误;Safe-c[6]和shadow processing[7]主要检测某一类特定的错误;Redux是一个可视化的内存错误发现工具,其检测错误的能力也有限。目前动态检测方法通常只能检测某(些)类内存错误,不容易进行扩展以检测更多类型的内存错误。静态方法[8,9]通过对程序结构的分析来检测程序中隐藏的动态内存错误。例如,Lint、Splint等通过在源程序中添加注释语句来检测程序中潜在的内存错误,其检错效果与应用程序注释工作量有关,即人工干预的工作量大,经常给出误报。??
目前,内存错误的检测方法处理内存错误类型较为单一,未能有效利用内存使用信息,缺乏动态扩展能力。本文提出了一种内存错误的动态检测方法,该方法利用了语言级信息,较为全面地获取程序对内存使用的信息;利用扩展接口,可以方便地增加检测多种类型内存错误的功能。??
1体系结构描述??
1.1系统总体结构??
本方法通过设计扩展接口和利用语言级元数据,来解决现有方法存在的问题,建立解决多种类型内存错误的统一系统结构。通过扩展接口,将检测特定内存错误的功能做成一个扩展模块,可以在系统运行时动态加载,即检测某类特定的内存错误时,需要加载相应的扩展模块。通过扩展接口可以设置检测规则以确定检测任务,系统根据检测规则定义进行相应的错误检测。在系统运行时,根据检测规则设置确定检测内容,加载相应的检测模块。解析元数据模块从二进制文件中解析出变量和函数等元数据,以获取程序对内存的使用信息。利用这些元数据,系统可以根据检测规则进行相应的检测。这样,通过扩展接口实现相应的扩展模块,就可以达到统一解决多种类型内存错误的目的。动态检测如图1所示。??
通过配置检测规则和相应的扩展模块,系统可以用来检测多种类型的内存错误。目前已经配置了一个默认的扩展模块,可以用来检测越界访问和内存泄漏等类型的内存错误。??
系统工作时,程序载入模块将二进制文件载入系统,等待运行;然后,元数据解析模块解析二进制文件,获得元数据,过滤器根据检测规则和元数据生成相应的检测点和需要检测的内存错误;最后,由改写模块根据检测规则动态地加载相应的扩展模块。在这些准备工作完成后,由改写模块通知插入模块和检测翻译模块准备完成;检测翻译模块启动程序,并负责监控其运行。在检测点处,检测翻译模块通过插入模块和改写模块调用相应的扩展模块,扩展模块负责在插入点处,插入检测代码;然后,再将程序的运行交给检测翻译模块控制。利用插入代码在检测点处进行内存错误的检测,在错误发生时,由检测翻译模块生成相应的错误类型,并给出错误报告。??
以下分别给出元数据、检测规则和过滤器的描述。??
1.2检测规则定义??
在检测时,不需要对所有变量和函数都进行检测,只需要对某些特定的变量和函数进行检测。为了减轻系统的负担,同时也能够增加系统的扩展性,定义了如下的检测规则。??
定义1检测对象(object)是指在程序运行过程中,要检测的对象。一般指程序中的变量,是变量元数据中的部分信息。??
变量元数据主要包含如下一些信息:变量名、类型、占内存大小、是否静态和是否全局变量。变量名用来标志需要具体检测的内存地址,其他信息可以用来检测内存相关错误。??
定义2检测点(point)是指在程序运行过程中需要检测的点。一般是在函数的入口(function-ent
您可能关注的文档
最近下载
- 全站仪的坐标放样工程测量74课件讲解.pptx VIP
- 湖北省楚天协作体2024-2025学年高一下学期期中考试语文试题(含答案).docx VIP
- 后续服务承诺及其保障措施.docx VIP
- 2024凉山州专业技术人员继续教育公需科目-《经济思想学习纲要》学习辅导试题及满分答案.docx VIP
- 油库安全设施设计专篇.pdf VIP
- 建筑施工 - 新19J108外墙外保温薄抹灰系统建筑构造.pdf VIP
- 建筑测量工程全站仪坐标放样及坐标测量教程.pptx VIP
- 湖北省楚天教科研协作体2024-2025学年高一下学期期中考试政治试卷 含解析.docx VIP
- 全站仪数据采集坐标放样.doc VIP
- 新药非临床安全性评价.ppt
文档评论(0)