一种检测内存访问越界的方法及装置制造方法及图纸

技术编号:6615361 阅读:307 留言:0更新日期:2012-04-11 18:40
本发明专利技术属于嵌入式系统技术领域,尤其涉及一种检测内存访问越界的方法及装置。本发明专利技术检测内存访问越界的方法,包括:步骤a:申请内存块时在所申请内存块的尾部添加固定长度的检测字段;步骤b:进行内存块操作时,逐一检测每一个内存块的尾部检测字段,并判断相应内存块对应的尾部检测字段的数值是否为初始设置值,如果尾部检测字段的数值不是初始设置值,执行步骤c;步骤c:提示该尾部检测字段对应的内存块存在内存访问越界的现象。本发明专利技术检测内存访问越界的方法及装置使得嵌入式系统中不恰当的内存越界操作能够及时被发现和进行针对性地维护操作,从而加强对系统内存数据的保护强度,提高嵌入式系统中有限内存的使用效率。

【技术实现步骤摘要】

本专利技术属于嵌入式系统
,尤其涉及一种检测内存访问越界的方法及装置
技术介绍
目前的嵌入式实时系统中,应用程序对内存的使用频率相当高,尤其是需要频繁地申请和释放内存,但由于嵌入式系统的资源比较受限,因而有效的使用内存显得尤为重要,如何利用有限的内存发挥最大的使用效率,成为了嵌入式系统进一步发展的问题关键。在实际应用过程中,通常会由于不恰当的内存操作阻碍内存的使用,比如“内存访问越界”便是一种常见的不合法内存操作。很多情况下,由于程序代码编写上的疏忽,会造成内存访问越界的问题,例如,写入数据时超出了所申请内存块的地址范围,覆盖了其他内存区域,便可能造成内存访问越界的状况。由于内存访问越界可能会覆盖运行中的程序的数据,甚至覆盖程序代码,因而极有可能破坏到程序中正在使用的其他数据,严重的时候还可能对其他正在运行的程序或者整个系统造成影响,如果操作系统缺少保护,甚至有可能使整个系统崩溃;同时,由于内存访问越界影响其他数据的访问,会降低嵌入式系统中有限内存的使用效率。
技术实现思路
本专利技术提供了一种检测内存访问越界的方法及装置,旨在解决现有技术中由于内存访问越界造成影响程序及系统运行、降低内存使用效率的问题。本专利技术是这样实现的,一种检测内存访问越界的方法,包括步骤a 申请内存块时在所申请内存块的尾部添加固定长度的检测字段;步骤b 进行内存块操作时,逐一检测每一个内存块的尾部检测字段,并判断相应内存块对应的尾部检测字段的数值是否为初始设置值,如果尾部检测字段的数值是初始设置值,提示该尾部检测字段对应的内存块内存访问正常;如果尾部检测字段的数值不是初始设置值,执行步骤C;步骤c 提示该尾部检测字段对应的内存块存在内存访问越界的现象。本专利技术的技术方案还包括在所述步骤a中,所述检测字段的数值默认设置为容易被检测的数值。本专利技术的技术方案还包括所述步骤a还包括,将所申请内存块的长度分配为该内存块的初始申请长度加上该内存块对应的尾部检测字段长度。本专利技术的技术方案还包括所述步骤a还包括,将分配好的内存块接入内存链表中,并返回每个内存块对应的初始地址。本专利技术的技术方案还包括所述步骤a还包括,在所申请内存块的头部添加固定长度的头部检测字段,并将该头部检测字段的数值默认设置为容易被检测的数值。本专利技术的技术方案还包括所述步骤a还包括,将所申请内存块的长度分配为该内存块的初始申请长度加上该内存块对应的头部检测字段长度及尾部检测字段长度。本专利技术的技术方案还包括所述步骤c后还包括,逐一检测每一个内存块的头部检测字段,并判断相应内存块对应的头部检测字段的数值是否为初始设置值,如果头部检测字段的数值不是初始设置值,提示该头部检测字段对应的内存块写操作正常,并继续判断下一个内存块的头部检测字段;如果头部检测字段的数值是初始设置值,提示该头部检测字段对应的内存块写操作不当。本专利技术的另一技术方案一种检测内存访问越界的装置,包括内存申请模块、地址返回模块、内存设置模块、第一内存判断模块和状态提示模块,所述内存申请模块用于为需要使用的程序申请内存块,所述地址返回模块用于将分配好的内存块接入内存链表中,并返回每个内存块对应的初始地址,所述内存设置模块用于在所申请内存块的尾部添加固定长度的检测字段,所述第一内存判断模块用于逐一检测每一个内存块的尾部检测字段,并判断相应内存块对应的尾部检测字段的数值是否为初始设置值,如果尾部检测字段的数值为初始设置值,通过状态提示模块提示该尾部检测字段对应的内存块内存访问正常;如果尾部检测字段的数值不是初始设置值,通过状态提示模块提示该尾部检测字段对应的内存块存在内存访问越界的现象;所述状态提示模块用于根据第一内存判断模块的判断结果进行相应的内存状态提示。本专利技术的技术方案还包括还包括第二内存判断模块和操作提示模块,所述第二内存判断模块用于逐一检测每一个内存块的头部检测字段,并判断相应内存块对应的头部检测字段的数值是否为初始设置值,如果头部检测字段的数值不是初始设置值,通过操作提示模块提示该头部检测字段对应的内存块写操作正常;如果头部检测字段的数值是初始设置值,通过操作提示模块提示该头部检测字段对应的内存块写操作不当;所述操作提示模块用于根据第二内存判断模块的判断结果进行相应的提示。本专利技术的技术方案还包括还包括内存分配模块,所述内存分配模块用于将所申请内存块的长度分配为该内存块的初始申请长度加上该内存块对应的尾部检测字段长度或/和头部检测字段长度。本专利技术的技术方案具有如下优点或有益效果本专利技术检测内存访问越界的方法及装置通过在申请分配内存块时,自动在分配的内存块的头部及尾部添加设置初始默认值的检测字段,当对内存块进行相应操作时,分别对尾部和头部检测字段进行检测,从而快速有效地检测出内存访问越界的现象,并进一步检测出造成内存访问越界现象的原因,使得嵌入式系统中不恰当的内存越界操作能够及时被发现和进行针对性地维护操作,从而加强对系统内存数据的保护强度,提高嵌入式系统中有限内存的使用效率。附图说明附图1是本专利技术第一实施例的检测内存访问越界的方法的流程图;附图2是本专利技术第二实施例的检测内存访问越界的方法的流程图;附图3是本专利技术第三实施例的检测内存访问越界的方法的流程图;附图4是本专利技术第一实施例的检测内存访问越界的装置的结构示意图;附图5是本专利技术第二实施例的检测内存访问越界的装置的结构示意图;附图6是本专利技术第三实施例的检测内存访问越界的装置的结构示意图。具体实施例方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。请参阅图1,是本专利技术第一实施例的检测内存访问越界的方法的流程图。本专利技术第一实施例的检测内存访问越界的方法包括以下步骤步骤100 申请内存块时在所申请内存块的尾部添加固定长度的检测字段;该步骤中,为了便于检测,该检测字段的数值默认设置为容易被检测的数值;可将检测字段的每一位数值设置为同样的值,以检测字段的长度为4bit为例,可以将该4位字段的检测字段设置为FFFF或者1111 ;其中,可将所有内存块的检测字段设置为统一值,也可将每一个内存块的检测字段区分设置。步骤110 进行内存块操作时,逐一检测每一个内存块的尾部检测字段,并判断相应内存块对应的尾部检测字段的数值是否为初始设置值,如果尾部检测字段的数值是初始设置值,执行步骤120 ;如果尾部检测字段的数值不是初始设置值,执行步骤130 ;该步骤中,具体的检测方法为为保证日常代码的健壮性,可以在任何一个有内存申请和释放或者对内存进行其他操作的接口里进行内存越界的检测,即将检测函数插入至 malloc.free.memcpy等相应类别的内存申请或释放函数中,在每次调用内存申请或释放函数时,检测内存链表中内存块的尾部检测字段是否为初始设置值,由于检测字段的初始设置值的特殊性,且由于内存块的初始申请长度通常相对实际应用会有所盈余,因而如果检测到尾部检测字段的数值并非初始设置值时,与该检测字段对应的内存块便极有可能存在内存访问越界的现象,如果检测到尾部检测字段的数值为初始设置值时,则说明该检测字段对应的内存块内存访问正常。其中,设置的检测字段越长时,检测本文档来自技高网...

【技术保护点】
1.一种检测内存访问越界的方法,包括:步骤a:申请内存块时在所申请内存块的尾部添加固定长度的检测字段;步骤b:进行内存块操作时,逐一检测每一个内存块的尾部检测字段,并判断相应内存块对应的尾部检测字段的数值是否为初始设置值,如果尾部检测字段的数值是初始设置值,提示该尾部检测字段对应的内存块内存访问正常;如果尾部检测字段的数值不是初始设置值,执行步骤c;步骤c:提示该尾部检测字段对应的内存块存在内存访问越界的现象。

【技术特征摘要】

【专利技术属性】
技术研发人员:张田博
申请(专利权)人:深圳市五巨科技有限公司
类型:发明
国别省市:94

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1