[发明专利]基于紧凑内存池的内存访问异常监控方法在审
申请号: | 202210682081.2 | 申请日: | 2022-06-15 |
公开(公告)号: | CN115080343A | 公开(公告)日: | 2022-09-20 |
发明(设计)人: | 史晓华;付全发 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F11/30 | 分类号: | G06F11/30 |
代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 周长琪 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 紧凑 内存 访问 异常 监控 方法 | ||
本发明提供了一种基于紧凑内存池的内存访问异常监控方法,属于计算机技术领域。本发明方法对内存访问错误检测工具ASan的内存池进行优化,改进堆变量的内存分配方式,包括:对同一应用程序的堆变量,将不同大小的内存块用同一个内存池来分配存储地址;将分配的每个内存块对应红黑树的一个节点,利用内存块后端的内存保护区维护一颗红黑树;通过红黑树可以快速检索到内存块的首地址,当超过红黑树节点的地址范围时可以发现程序异常。本发明方法在保证ASan检测性能的前提下,避免产生多个碎片化的Shadow Memory,减少了ASan内存池中内存的使用浪费。
技术领域
本发明属于计算机技术领域,具体涉及一种基于紧凑内存池的内存访问异常监控方法。
背景技术
C/C++的优点使其具有极大的吸引力,并且在某些情况下必不可少:它运行速度优异、内存和磁盘空间小、成熟、执行可预测,并且它们的平台适用性几乎无与伦比,在一个平台上无需安装任何其他工具即可使用这门语言。但与Java、Golang这类运行时系统不同,C/C++语言为了出色的程序运行效率,并没有运行时系统提供的内存管理机制,需要用户手动的管理内存。这就导致C/C++程序出现了其他语言(带内存管理机制的语言)不同的漏洞,即内存安全问题。
针对C/C++程序内存安全问题,开源社区先后涌现出一大批内存安全检测工具,如:Valgrind,AddressSanitizer,HWAddressSanitizer等。ASan(AddressSanitizer)在2012年由Google开源,由于其优异的性能和额外资源消耗更低而普遍应用于程序检测中,逐渐替代了Valgrind。ASan通过源码插桩和动态链接库的方式,对程序的指针越界,释放后使用等内存安全问题进行捕获。主要是通过Shadow Memory(影子映射内存),Redzone(内存保护区)、Memory Quarantine(内存隔离区)及其他辅助数据结构完成。
由于分配给应用程序的所有内存都是可以正常访问的,并没有一个机制能够有效区分指针越界或释放后使用,因此,通过引入Shadow Memory来标识内存是否可以访问,每一个应用程序使用的内存都有一块Shadow Memory与之对应,当程序可以访问这块内存时,置Shadow Memory为自然数,当该内存不可访问时,则置为负数。如图1所示,为ShadowMemory的示意图。
Shadow Memory的引入,将程序的内存分门别类。接下来,就是内存安全问题归结为非法内存,使Shadow Memory可以有效区分。由于应用程序要尽可能充分的使用内存,所以两个变量之间是紧密排列的,没有间隙。ASan通过引入内存保护区用于捕获指针越界问题,当需要分配一个内存块时,在内存块的两端多分配一些内存,大小根据想要分配的内存按比例计算,称之为内存保护区。把内存保护区的Shadow Memory置为不可访问,这样当发生指针越界时,会访问到内存保护区,即可捕获到指针越界。
程序的变量分为全局变量,局部变量和堆变量。本发明主要围绕堆变量的内存分配问题。程序需要维护内存池来高效合理的分配堆变量,但由于堆变量的特殊性,内存安全检测工具使用了类似于Slab机制的内存池,但这种方式比较消耗内存。
现有类Slab内存池机制,为16B、32B、…、65536B这30种内存块,分别分配一个固定大小,如1MB大小的内存池,专门用来分配固定大小的内存块,当用完,则再分配一个1MB的内存池。如图2所示,就是两个1MB的内存池,分别用来分配16B和32B的内存块。这个内存池可以满足一个内存块的任何地址都可以定位到首地址,每个内存池都是1MB地址对齐的,k字节内存块在内存池中是k字节对齐的。由于操作系统分配物理内存的最小单位是一个物理页,一般为4KB,而在使用类Slab机制分配一块内存池,如1MB内存池来分配特定大小的内存块chunk,如16B,如果程序只分配很少次16B,如分配5次,则4KB-5*16B的内存都被浪费掉。不仅仅如此,内存块是离散的也就导致了Shadow Memory是离散的,也导致了ShadowMemory内存消耗的增长。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210682081.2/2.html,转载请声明来源钻瓜专利网。