一种内存越界的管理方法及装置制造方法及图纸

技术编号:15391996 阅读:67 留言:0更新日期:2017-05-19 05:03
本发明专利技术公开了一种内存越界的管理方法及装置,该方法为,在程序初始化时,在堆内存中设置内存池,内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。这样,通过设置隔离带,可以有效降低越界访问导致的其他内存块被篡改的风险。

Method and device for managing memory cross boundary

The invention discloses a method and device for managing memory bounds, this method, during program initialization, set the memory pool in the heap memory, the memory pool is divided into several memory specifications, each memory area includes at least one memory block, and in between every two adjacent memory block is provided with a belt; in the running process, the memory allocation of predefined functions, dynamic memory will need to apply for the program, the free memory block matching to the corresponding memory specification in the memory pool in. Thus, by setting up an isolation band, the risk of other memory blocks resulting from cross boundary access can be effectively reduced.

【技术实现步骤摘要】
一种内存越界的管理方法及装置
本专利技术涉及软件安全领域,尤其涉及一种内存越界的管理方法及装置。
技术介绍
在C程序中,内存越界访问是一个普遍问题,从C程序运行的角度来看,内存被分为静态内存区、栈内存区以及堆内存区。静态内存区主要存放程序的静态信息,包括全局变量、静态变量等;栈内存区属于动态内存,主要存放一些临时变量等;堆内存区也属于动态内存,需要显式调用系统的分配函数获取。其中静态内存和栈内存程序是不能控制的,由操作系统来分配管理;堆内存程序可以控制,可以根据自己的需要进行动态分配和释放。每种内存区都可能会存在越界访问的问题,其中数组越界写操作是引起内存越界的主要原因,并且多数疑难、怪异问题都恰恰是这种原因引起的。比如说,某个数组越界修改了其他模块使用的变量的值,结果使得其他模块进入了一些不应进入的流程,导致了一些奇怪的现象和问题,而这些问题分析起来往往无从下手,这对设备的可用性、稳定性带来极大的威胁。但是,目前,对于静态内存区及栈内存区的越界访问并没有一个好的方法。现有技术中,对内存越界的管理方法,一般都是采用静态检查工具对代码进行扫描,进而发现一些可疑的越界操作代码,但这种检查工具作用很有限,只能发现一些很明显的问题,绝大多数的问题都没有办法检查出来。现有技术中,另外一种方法是,当程序运行出现问题后,根据程序产生的core文件,结合出现问题的现象,进行代码走读、分析和定位。由此可见,根据core文件以及现象进行内存越界管理的方法,存在以下问题:(1)程序已经崩溃,已经带来了损失;(2)用于分析的信息大多情况下并不充分,因为,一些情况下,用于保存调用栈的内存区已经被越界操作覆盖,从而导致core文件中已经得不到有用的信息;(3)如果发生了越界操作,但程序没有崩溃,但是可能已经使得其他模块走入了非预期的流程,已经导致了程序的错误,而这种情况在短时间之内可能无法察觉,即使是察觉了,也很难找到问题所在。基于以上的分析,现有内存越界的管理方法存在无法有效地、准确地定位越界操作,导致不能很快解决越界操作的问题。
技术实现思路
本专利技术实施例提供一种内存越界的管理方法及装置,以解决现有技术中无法有效地、准确地定位越界操作,导致不能很快解决越界操作的问题。本专利技术实施例提供的具体技术方案如下:一种内存越界的管理方法,包括:在程序初始化时,在堆内存中设置内存池,上述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。本专利技术实施例中,在程序初始化时,在堆内存中设置内存池,上述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。这样,在内存池的每两个相邻内存块之间设置隔离带,可以有效降低越访问时其他内存块被篡改的风险。较佳的,在堆内存中设置内存池之前,进一步包括:将当前的待处理程序中的全局变量封装成至少一个结构体,且基于上述至少一个结构体中的每一个结构体分别定义相应的结构体指针。这样,程序运行过程中,通过预定义的内存分配函数,在需要申请动态内存时,将定义的结构体指针所需内存分配到了内存池中相应内存规格的空闲内存块中,也就将静态内存中的全局变量保存到了堆内存中的内存池中,使得原本在静态内存区的全局变量的越界访问问题转换为堆内存的越界访问问题。较佳的,将当前的待处理程序中的全局变量封装成至少一个结构体,具体包括:将当前的待处理程序中的所有全局变量封装成一个结构体;或,分别将当前的待处理程序中的每一个功能模块包含的全局变量,封装成对应的结构体;或对当前的待处理程序中中的各个模块进行任意组合,分别将每一种组合包含的全局变量,封装成对应的结构体。较佳的,分别设置每一个隔离带的大小,并在上述每一个隔离带中分别写入预设的数据。较佳的,上述每一个隔离带的大小是相同的。较佳的,在内存池的起始位置设置一个内存池管理区;分别对上述每一个隔离带中的数据进行定时监测,并在确定任意一个隔离带中的数据发生变化后,上报越界信息;其中,上述越界信息包括,内存池管理区中的管理信息及发生数据变化的隔离带的地址信息,其中,上述管理信息是发生数据变化的隔离带的相邻内存块的描述信息。这样,对隔离带进行定时监测,当发生越界访问时,能准确地提供详细的用于分析问题的信息。较佳的,上述发生数据变化的隔离带的相邻内存块的描述信息中至少包括使用上述相邻内存块的参量在相应程序中的行号和对应的函数名。一种内存越界的管理装置,具体包括:设置单元,用于在程序初始化时,在堆内存中设置内存池,上述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;处理单元,用于在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。本专利技术实施例中,在程序初始化时,在堆内存中设置内存池,上述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。这样,在内存池的每两个相邻内存块之间设置隔离带,可以有效降低越访问时其他内存块被篡改的风险。较佳的,在堆内存中设置内存池之前,进一步包括:定义单元,用于将当前的待处理程序中的全局变量封装成至少一个结构体,且基于上述至少一个结构体中的每一个结构体分别定义相应的结构体指针。这样,程序运行过程中,通过预定义的内存分配函数,在需要申请动态内存时,将定义的结构体指针所需内存分配到了内存池中相应内存规格的空闲内存块中,也就将静态内存中的全局变量保存到了堆内存中的内存池中,使得原本在静态内存区的全局变量的越界访问问题转换为堆内存的越界访问问题。较佳的,将当前的待处理程序中的全局变量封装成至少一个结构体时,定义单元具体用于:将当前的待处理程序中的所有全局变量封装成一个结构体;或,分别将当前的待处理程序中的每一个功能模块包含的全局变量,封装成对应的结构体;或对当前的待处理程序中中的各个模块进行任意组合,分别将每一种组合包含的全局变量,封装成对应的结构体。较佳的,设置单元进一步用于:分别设置每一个隔离带的大小,并在上述每一个隔离带中分别写入预设的数据。较佳的,上述每一个隔离带的大小是相同的。较佳的,设置单元进一步用于,在内存池的起始位置设置一个内存池管理区;还包括,监测单元,用于分别对上述每一个隔离带中的数据进行定时监测,并在确定任意一个隔离带中的数据发生变化后,上报越界信息;其中,上述越界信息包括,内存池管理区中的管理信息及发生数据变化的隔离带的地址信息,其中,上述管理信息是发生数据变化的隔离带的相邻内存块的描述信息。这样,对隔离带进行定时监测,当发生越界访问时,能准确地提供详细的用于分析问题的信息。较佳的,上述发生数据变化的隔离带的相邻内存块本文档来自技高网
...
一种内存越界的管理方法及装置

【技术保护点】
一种内存越界的管理方法,其特征在于,包括:在程序初始化时,在堆内存中设置内存池,所述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。

【技术特征摘要】
1.一种内存越界的管理方法,其特征在于,包括:在程序初始化时,在堆内存中设置内存池,所述内存池被划分为多种规格的若干内存区,每一个内存区中包括至少一个内存块,且在每两个相邻内存块之间设置有隔离带;在程序运行过程中,通过预定义的内存分配函数,将程序中需要申请的动态内存,在内存池中匹配至相应内存规格的空闲内存块中。2.如权利要求1所述的方法,其特征在于,在堆内存中设置内存池之前,进一步包括:将当前的待处理程序中的全局变量封装成至少一个结构体,且基于所述至少一个结构体中的每一个结构体分别定义相应的结构体指针。3.如权利要求2所述的方法,其特征在于,将当前的待处理程序中的全局变量封装成至少一个结构体,具体包括:将当前的待处理程序中的所有全局变量封装成一个结构体;或,分别将当前的待处理程序中的每一个功能模块包含的全局变量,封装成对应的结构体;或对当前的待处理程序中中的各个模块进行任意组合,分别将每一种组合包含的全局变量,封装成对应的结构体。4.如权利要求1所述的方法,其特征在于,进一步包括:分别设置每一个隔离带的大小,并在所述每一个隔离带中分别写入预设的数据。5.如权利要求4所述的方法,其特征在于,所述每一个隔离带的大小是相同的。6.如权利要求4或5所述的方法,其特征在于,进一步包括:在内存池的起始位置设置一个内存池管理区;分别对所述每一个隔离带中的数据进行定时监测,并在确定任意一个隔离带中的数据发生变化后,上报越界信息;其中,所述越界信息包括,内存池管理区中的管理信息及发生数据变化的隔离带的地址信息,其中,所述管理信息是发生数据变化的隔离带的相邻内存块的描述信息。7.如权利要求6所述的方法,其特征在于,所述发生数据变化的隔离带的相邻内存块的描述信息中至少包括使用所述相邻内存块的参量在相应程序中的行号和对应的函数名。8.一种内存越界的管理装置,其特征在于,包括:设置单元,用于...

【专利技术属性】
技术研发人员:师敏华曾宪铎张培良
申请(专利权)人:大唐移动通信设备有限公司
类型:发明
国别省市:北京,11

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

1