CN103164290B - 应用内存管理方法和装置 - Google Patents
应用内存管理方法和装置 Download PDFInfo
- Publication number
- CN103164290B CN103164290B CN201110418187.3A CN201110418187A CN103164290B CN 103164290 B CN103164290 B CN 103164290B CN 201110418187 A CN201110418187 A CN 201110418187A CN 103164290 B CN103164290 B CN 103164290B
- Authority
- CN
- China
- Prior art keywords
- application
- memory
- paging
- memory block
- internal memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种应用内存管理方法和装置,属于通信技术领域。所述方法包括:接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块;在为所述应用分配的内存块的开始位置或结束位置加入保护页,所述保护页用于为调试器提供异常检测。本发明通过直接接管内存分页的内存申请接口,根据内存分页的大小为应用分配内存块,并在内存块的一端加入保护页,可以对内存非法读写都进行检测,同时其检测的覆盖率更高。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种应用内存管理方法和装置。
背景技术
开发低端手机平台上的原生应用程序(手机Java应用不属于)一般是使用C语言或者C++语言,并且平台提供的内存管理机制比较原始,需要应用开发者具有良好的素质,否则很容易造成内存泄漏或者非法内存访问,轻则应用或系统运行速度变慢,重则死机。
为了在这些平台上开发更稳定的原生应用程序,现在的一种管理应用内存的方法是运行时接管MMU(Memory Management Unit,内存管理单元)。运行时接管MMU的做法是,应用自身建立一个内存管理模块,接管系统的MMU,常规的做法是在申请的内存前后加入保护字节,并记录申请内存的操作,放置在申请内存前后的保护字节,一般是固定长度并会填充特定的字节内容,比如说填充0x0D,这样,如果在释放该内存时,发现保护字节不是0x0D,就可以认为存在非法的内存写操作。
但对于现有的在申请的内存前后加入保护字节的方法,只能检测到内存非法写的情况,而不能检测出内存非法读,而这种非法读异常往往是代码逻辑不正确造成,而且一般会是低效率的代码。其次保护字节完整只是无内存非法写的必要非充分条件,对于非法写操作不在保护字节区,以及非法写入的字节与保护字节一致的这两种情况,是无法检测出来的。
发明内容
为了解决现有技术中应用内存的管理不足的问题,本发明实施例提供了一种应用内存管理方法和装置。所述技术方案如下:
一方面,提供了一种应用内存管理方法,所述方法包括:
接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块;
在为所述应用分配的内存块的开始或结束位置加入保护页,所述保护页用于为调试器提供异常检测。
所述根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块,包括:
为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐,并在所述分配的内存块的开始位置预留保护内存分页字节;所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,
则所述在为所述应用分配的内存块的开始或结束位置加入保护页,包括:
在为所述应用分配的内存块的结束位置加入保护页;
或在所述分配的内存块的结束位置预留保护内存分页字节,
则所述在为所述应用分配的内存块的开始或结束位置加入保护页,包括:
在为所述应用分配的内存块的开始位置加入保护页。
所述在为所述应用分配的内存块的开始或结束处加入保护页之后,还包括:
当所述应用在读写所述保护页时,操作系统产生异常信息,所述调试器捕捉到所述异常信息后,中断所述应用的进行,使分配给所述应用的内存块被挂起。
所述方法还包括:
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
另一方面,还提供了一种应用内存管理装置,所述装置包括:
接管模块,用于接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
分配模块,用于根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块;
添加模块,用于在为所述应用分配的内存块的开始或结束位置加入保护页,所述保护页用于为调试器提供异常检测。
所述分配模块具体用于:
为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐,并在所述分配的内存块的开始位置预留保护内存分页字节;所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,
则所述添加模块具体用于包括:
在为所述应用分配的内存块的结束位置加入保护页;
或在所述分配的内存块的结束位置预留保护内存分页字节,
则所述添加模块具体用于:
在为所述应用分配的内存块的开始位置加入保护页。
所述分配模块还用于:
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
本发明实施例提供的技术方案带来的有益效果是:通过直接接管内存分页的内存申请接口,根据内存分页的大小为应用分配内存块,并在内存块的一端加入保护页,可以对内存非法读写都进行检测,同时其检测的覆盖率更高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1中提供的一种应用内存管理的方法的流程图;
图2是本发明实施例2中提供的一种Windows操作系统的内存分层示意图;
图3是本发明实施例2中提供的一种应用内存管理的方法的流程图;
图4是本发明实施例2中提供的一种应用内存分配的示意图;
图5是本发明实施例3中提供的一种应用内存管理装置的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
因为Feature Phone平台的内存模型往往是平面/线性内存模型,没有保护与隔离机制,非法的内存访问往往会造成死机,所以本发明实施例提供了一种管理应用内存的方法,使用该方法可以在模拟器环境下更方便有效进行内存异常检测。
实施例1
参见图1,本发明实施例提供了一种应用内存管理方法,包括:
101:接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
102:根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块;
103:在为所述应用分配的内存块的开始或结束位置加入保护页,所述保护页用于为调试 器提供异常检测。
本实施例中,所述根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块,包括:
为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐,并在所述分配的内存块的开始位置预留保护内存分页字节;所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,
则所述在为所述应用分配的内存块的开始或结束位置加入保护页,包括:
在为所述应用分配的内存块的结束位置加入保护页;
或在所述分配的内存块的结束位置预留保护内存分页字节,则
则所述在为所述应用分配的内存块的开始或结束位置加入保护页,包括:
在为所述应用分配的内存块的开始位置加入保护页。
进一步地,所述在为所述应用分配的内存块的一端加入保护页之后,包括:
在为所述应用分配的内存块的开始或结束处加入保护页之后,还包括:
当所述应用在读写所述保护页时,操作系统产生异常信息,所述调试器捕捉到所述异常信息后,中断所述应用的进行,使分配给所述应用的内存块被挂起。
本实施例中的方法还包括:
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
本发明提供的方法实施例的有益效果是:通过直接接管内存分页的内存申请接口,根据内存分页的大小为应用分配内存块,并在内存块的一端加入保护页,可以对内存非法读写都进行检测,同时其检测的覆盖率更高。
实施例2
本发明实施例提供了一种应用内存管理方法,本发明实施例所提供的管理应用内存的方法适用于模拟器,本发明实施例提供的方法,只能在支持内存分页机制的操作系统上使用比如Windows、Linux、Mac OS等操作系统。
本发明实施例中,如图2所示,Windows操作系统的内存使用模型一般分层包括:应用上层模块、应用内存管理装置、C库封装Malloc、HeapAlloc和VirtualAlloc接口。基于该Windows操作系统的系统架构,应用程序内存管理模块并不直接使用系统(指手机平台/手机模拟器平台)内存管理模块所提供的接口申请内存,而是直接使用操作系统底层的可以操作 内存分页的内存申请接口(同样不能使用C库封装的malloc接口),本实施例中,以Windows操作系统为例进行说明。参见图3,本发明实施例提供的管理应用内存的方法,具体包括:
201:应用上层模块向应用内存管理装置申请内存。
本实施例中,应用在运行时,会向应用内存管理装置申请内存以存储数据。
202:应用内存管理装置接收到应用上层模块申请内存的请求,查询VirtualAlloc接口。
本实施例中,应用内存管理装置不接管系统内存管理模块,而是直接使用操作系统底层的可以操作内存分页的内存申请接口,该接口在Windows操作系统中是VirtualAlloc接口,应用内存管理装置查询该接口,从而获知内存分页情况。
203:根据VirtualAlloc接口提供的内存分页的大小,为该应用分配内存块。
本实施例中,根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块,包括:为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐,并在所述分配的内存块的开始位置预留保护内存分页字节。
本实施例中,应用上层模块向应用内存管理装置申请内存(假设大小是X)的时候,应用程序内存管理模块实际上申请的内存大小是按照内存分页的大小对齐的,如图4所示,假设应用申请的内存大小是19K,而VirtualAlloc接口提供的内存分页每页为4K,则应用内存管理装置需要给该应用分配五个分页,且分配的内存大小要与分页的大小对齐,即将19K大小的内存分到与分页大小对齐的五个分页地址上,由于每个分页为4K。而应用实际申请的大小为19K,为该应用分配的五个分页后,还剩余1K的大小,本实施例中,将该1K大小的内存中填充保护字节,作为预留保护内存分页字节,并将该保护分页自己的属性设置为不可读写或是不为该应用提交内存。同时该预留保护内存分页字节中还存有返回给应用的内存地址信息。本实施例中,如图4所示,可以将预留的保护内存分页字节放在分配的内存块的开始位置,也可以将预留的保护内存分页字节放在分配的内存块的结束位置,对此本实施例不做具体限定。
204:应用内存管理装置在为该应用分配的内存块的结束位置加入保护页。
本实施例中,在为内存分配好内存块后,在分配的内存块的结束位置加上保护页,该保护页用于为调试器提供异常检测。本实施例中,如果在所述分配的内存块的开始位置预留保护内存分页字节;则在为所述应用分配的内存块的结束位置加入保护页;或如果在所述分配的内存块的结束位置预留保护内存分页字节,则在为所述应用分配的内存块的开始位置加入保护页。
本实施例中,当应用程序对保护页进行读写操作的时候,操作系统会产生一个异常,这个异常可以被调试器捕捉到,进而可以中断应用的执行,使分配给该应用的内存块被挂起,以供开发人员查找解决问题。在一次运行的情况下,保护页要么放在内存块之前要么选择放置在内存块之后,在前后均放置保护页的做法没有意义,因为内存块要按照内存分页的大小进行字节对齐,不能保证内存块两端都紧邻保护页,因此开发人员的测试运行可以进行两次,一次将保护页放在内存块前,一次将保护页放在内存块后。这样就更能准确的找到内存中出现的异常。
在32位Windows下,应用程序内存管理模块可以使用多达2G的地址空间,而在64位系统下可以使用的地址空间更大(跟操作系统的内存分页模型有关)。通过本实施例中提供的管理应用内存的方法,可以利用加大对无效指针的检测力度。这里所谓的无效指针,是说假设第一个应用申请了一片8K的内存并赋值给了指针ptrA,然后将该内存释放了,然后第二个应用又立即申请了一片8K的内存并赋值给了指针ptrB,此时ptrA指向的地址就是或者有可能是ptrB指向的内存地址。因此本实施例中,每次应用程序内存管理模块调用VirtualAlloc保留地址时,都保留比上次保留的地址数值要大的地址,直到达到了最大地址后再重新开始。即当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。例如,分配给第一个应用的内存块的最大地址是128K,则在第一个应用释放该内存地址后,第二个应用申请内存块,则从128K以后为第二个内存块分配地址。此外也可以设计跟时间相关的散列函数,这样可以让保留的内存地址尽量散列在整个内存地址空间。因为应用程序通常使用的内存只有几百KB,加上模拟器进程的内存开销可能只有几十MB,将几十MB的内存块散列到2G或者更大的空间里,能让无效指针指向有效内存区域这种情况出现的概率非常非常小,可以提高非法内存访问被检测到的可能性。具体的跟时间相关的散列函数属于现有技术,本实施例对此不做具体限定。
本发明提供的方法实施例的有益效果是:通过直接接管内存分页的内存申请接口,根据内存分页的大小为应用分配内存块,并在内存块的一端加入保护页,可以对内存非法读写都进行检测,同时其检测的覆盖率更高,此外,在检测到内存非法读写时,可以在模拟器环境下实时中断代码执行,开发人员可以准确知道在什么情况下代码的什么位置进行了非法的内存读写。
实施例3
参见图5,本发明实施例提供了一种应用内存管理装置,包括:接管模块301,分配模块 302和添加模块303。
接管模块301,用于接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
分配模块302,用于根据所述操作内存分页的内存申请接口提供的内存分页的大小,为所述应用分配内存块;
添加模块303,用于在为所述应用分配的内存块的开始或结束位置加入保护页,所述保护页用于为调试器提供异常检测。
其中,分配模块302具体用于:
为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐,并在所述分配的内存块的开始位置预留保护内存分页字节;所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,
则所述添加模块303具体用于包括:
在为所述应用分配的内存块的结束位置加入保护页;
或在所述分配的内存块的结束位置预留保护内存分页字节,
则所述添加模块303具体用于:
在为所述应用分配的内存块的开始位置加入保护页。
本实施例中,分配模块还用于:
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
本发明提供的装置实施例的有益效果是:通过直接接管内存分页的内存申请接口,根据内存分页的大小为应用分配内存块,并在内存块的一端加入保护页,可以对内存非法读写都进行检测,同时其检测的覆盖率更高。
本实施例提供的装置,具体可以与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种应用内存管理方法,其特征在于,所述方法包括:
接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐;
如果在所述分配的内存块的开始位置预留保护内存分页字节,则在为所述应用分配的内存块的结束位置加入保护页;
如果在所述分配的内存块的结束位置预留保护内存分页字节,则在为所述应用分配的内存块的开始位置加入保护页;
其中,所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,所述保护页用于为调试器提供异常检测;
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述应用在读写所述保护页时,操作系统产生异常信息,所述调试器捕捉到所述异常信息后,中断所述应用的进行,使分配给所述应用的内存块被挂起。
3.一种应用内存管理装置,其特征在于,所述装置包括:
接管模块,用于接收到应用的申请内存请求后,查询操作内存分页的内存申请接口;
分配模块,用于为所述应用分配内存块,并将所述分配的内存块与所述操作内存分页的内存申请接口提供的内存分页的大小对齐;
添加模块,用于如果在所述分配的内存块的开始位置预留保护内存分页字节,则在为所述应用分配的内存块的结束位置加入保护页;如果在所述分配的内存块的结束位置预留保护内存分页字节,则在为所述应用分配的内存块的开始位置加入保护页;
其中,所述保护内存分页字节的属性为不可读写或是不为所述应用提交内存,所述保护页用于为调试器提供异常检测;
所述分配模块还用于:
当所述应用释放所述分配的内存块后,在其它应用申请内存时,从所述应用释放的内存块的最大地址之后,为所述其它应用分配内存块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110418187.3A CN103164290B (zh) | 2011-12-14 | 2011-12-14 | 应用内存管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110418187.3A CN103164290B (zh) | 2011-12-14 | 2011-12-14 | 应用内存管理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103164290A CN103164290A (zh) | 2013-06-19 |
CN103164290B true CN103164290B (zh) | 2017-08-04 |
Family
ID=48587402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110418187.3A Active CN103164290B (zh) | 2011-12-14 | 2011-12-14 | 应用内存管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103164290B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107291917A (zh) * | 2017-06-28 | 2017-10-24 | 郑州云海信息技术有限公司 | 一种同步linux内核与网络文件系统读写块大小的方法 |
CN117573377B (zh) * | 2024-01-15 | 2024-06-25 | 摩尔线程智能科技(北京)有限责任公司 | 内存管理方法、装置、设备及存储介质 |
CN117648196B (zh) * | 2024-01-29 | 2024-04-26 | 苏州元脑智能科技有限公司 | 一种内存分配的保护方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581108A (zh) * | 2003-07-31 | 2005-02-16 | 深圳市中兴通讯股份有限公司南京分公司 | 一种具有内存保护功能的内存管理方法 |
CN1652616A (zh) * | 2004-02-07 | 2005-08-10 | 华为技术有限公司 | 一种自适应的系统管理方法 |
CN1673979A (zh) * | 2004-03-24 | 2005-09-28 | 华为技术有限公司 | 一种内存分配方法 |
CN1924826A (zh) * | 2005-09-02 | 2007-03-07 | 中兴通讯股份有限公司 | 一种非法内存读写的检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8387049B2 (en) * | 2005-07-15 | 2013-02-26 | International Business Machines Corporation | Facilitating processing within computing environments supporting pageable guests |
-
2011
- 2011-12-14 CN CN201110418187.3A patent/CN103164290B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581108A (zh) * | 2003-07-31 | 2005-02-16 | 深圳市中兴通讯股份有限公司南京分公司 | 一种具有内存保护功能的内存管理方法 |
CN1652616A (zh) * | 2004-02-07 | 2005-08-10 | 华为技术有限公司 | 一种自适应的系统管理方法 |
CN1673979A (zh) * | 2004-03-24 | 2005-09-28 | 华为技术有限公司 | 一种内存分配方法 |
CN1924826A (zh) * | 2005-09-02 | 2007-03-07 | 中兴通讯股份有限公司 | 一种非法内存读写的检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103164290A (zh) | 2013-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101835250B1 (ko) | 트랜잭셔널 메모리를 사용한 비인가 메모리 수정 및 액세스의 검출 | |
CN102129410B (zh) | 提供扩展的存储器保护 | |
US7000225B2 (en) | Method for inserting global breakpoints | |
US20170286323A1 (en) | Memory access protection apparatus and methods | |
US7702955B2 (en) | Method and apparatus for detecting a fault condition and restoration thereafter using user context information | |
US9449169B2 (en) | Block storage virtualization on commodity secure digital cards | |
US20120072906A1 (en) | Memory Overcommit by Using an Emulated IOMMU in a Computer System without a Host IOMMU | |
CN102831068B (zh) | 一种内存操作记录的处理方法及装置 | |
US20070208954A1 (en) | Method and system for designating and handling confidential memory allocations | |
US20150199279A1 (en) | Method and system for method for tracking transactions associated with a system memory management unit of a portable computing device | |
CN108920253B (zh) | 一种无代理的虚拟机监控系统和监控方法 | |
CN103164290B (zh) | 应用内存管理方法和装置 | |
CN108898012B (zh) | 检测非法程序的方法和装置 | |
US20180239550A1 (en) | Optimizable Heap for Embedded and Similar Systems with Enhanced Debugging and Self-Healing | |
US9176821B2 (en) | Watchpoint support system for functional simulator | |
US20100005265A1 (en) | Method for isolating objects in memory region | |
US8910004B2 (en) | Information processing apparatus, and method of controlling information processing apparatus | |
CN114647624A (zh) | 块级cdp中数据库一致点的捕获方法、系统、存储介质 | |
US8151086B2 (en) | Early detection of an access to de-allocated memory | |
US8484620B2 (en) | Implementing performance impact reduction of watched variables | |
CN106909509A (zh) | 一种虚拟机进程代码的无代理分页式度量系统和方法 | |
US7350045B2 (en) | Dynamic memory heap tagging | |
CN117149644A (zh) | 内存溢出检测方法、装置、操作系统、设备及存储介质 | |
CN111913806A (zh) | 一种内存区域的管理方法、电子设备和存储介质 | |
CN112464231A (zh) | 基于虚拟机的威胁检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |