CN110764914B - 内存改写的定位方法及装置 - Google Patents
内存改写的定位方法及装置 Download PDFInfo
- Publication number
- CN110764914B CN110764914B CN201911031504.9A CN201911031504A CN110764914B CN 110764914 B CN110764914 B CN 110764914B CN 201911031504 A CN201911031504 A CN 201911031504A CN 110764914 B CN110764914 B CN 110764914B
- Authority
- CN
- China
- Prior art keywords
- memory
- address
- memory space
- size
- page table
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/508—Monitor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种内存改写的定位方法及装置,该方法包括:接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知。该方案可以实现自动定位内存改写,相对于现有技术可以节省人力资源,提升定位效率。
Description
技术领域
本发明涉及通信技术领域,尤指一种内存改写的定位方法及装置。
背景技术
随着嵌入式系统复杂度的提升,应用程序规模的扩大,有时会出现内存改写的情况,这可能是由于代码逻辑错误等等原因导致的,例如,应用程序的线程可能会继续使用已释放的内存空间,该内存空间若被应用程序的其他线程申请,则会导致该内存空间中的数据被改写,从而引发内存改写。
内存改写并不会立刻引发异常,可能在过了很长时间之后才会出现异常,中央处理器(Central Processing Unit,CPU)发出异常通知,此时需要技术人员针对应用程序的代码进行逐一排查,来确定引发内存改写的代码,并对确定出的代码进行修改,来克服内存改写的问题。
上述方案中,在定位内存改写时,需要技术人员来完成,这样就会浪费大量人力资源,并且定位效率非常低。
发明内容
本发明实施例提供一种内存改写的定位方法及装置,用以解决现有技术中存在的浪费大量人力资源,并且定位效率非常低的问题。
根据本发明实施例,提供一种内存改写的定位方法,应用于设备的中央处理器CPU中,包括:
接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;
确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;
若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;
发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知。
可选的,还包括:
接收所述应用程序的第二线程发送的携带申请内存大小的内存申请请求;
计算所述申请内存大小对应的实际内存大小;
确定所述页表中满足所述实际内存大小且访问权限是有权限的第二内存空间;
在所述第二内存空间的头部写入标识信息和所述实际内存大小;
获取所述第二内存空间的起始地址,得到第二内存地址;
向所述第二线程发送携带所述第二内存地址的内存申请响应。
具体的,计算所述申请内存大小对应的实际内存大小,具体包括:
将内存单元的大小减1,得到所述内存单元的掩码;
计算所述申请内存大小、预设头部大小与所述内存单元的掩码的和值;
将所述和值与所述内存单元的掩码进行逻辑与运算,得到所述申请内存大小对应的实际内存大小。
可选的,还包括:
接收所述应用程序的第三线程发送的携带第三内存地址的内存释放请求;
确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型;
若确定所述第三内存空间是所述可定位类型,则在所述页表中设置所述第三内存空间的访问权限是无权限;
向所述第三线程发送携带所述第三内存地址的内存释放响应。
具体的,确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型,具体包括:
从以所述第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以所述第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以所述第三内存地址为起始地址的第三内存空间不是可定位类型。
可选的,确定所述第三内存空间是所述可定位类型之后,还包括:
确定所述第三内存空间的地址范围;
在所述应用程序的已释放内存缓存队列中保存所述第三内存空间的地址范围;
确定所述已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到所述页表的最大值;
若确定所述已释放内存缓存队列包括的地址范围对应的内存大小已经达到所述页表的最大值,则从所述已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将所述页表中所述设定个数的内存空间的访问权限重置为有权限。
可选的,发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知之后,还包括:
回收所述页表和所述已释放内存缓存队列。
根据本发明实施例,还提供一种内存改写的定位装置,应用于设备的CPU中,包括:
第一接收模块,用于接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;
第一确定模块,用于确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;
第二确定模块,用于若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;
发出模块,用于发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知。
可选的,还包括:
第二接收模块,用于接收所述应用程序的第二线程发送的携带申请内存大小的内存申请请求;
计算模块,用于计算所述申请内存大小对应的实际内存大小;
第三确定模块,用于确定所述页表中满足所述实际内存大小且访问权限是有权限的第二内存空间;
写入模块,用于在所述第二内存空间的头部写入标识信息和所述实际内存大小;
获取模块,用于获取所述第二内存空间的起始地址,得到第二内存地址;
第一发送模块,用于向所述第二线程发送携带所述第二内存地址的内存申请响应。
具体的,所述计算模块,用于计算所述申请内存大小对应的实际内存大小,具体用于:
将内存单元的大小减1,得到所述内存单元的掩码;
计算所述申请内存大小、预设头部大小与所述内存单元的掩码的和值;
将所述和值与所述内存单元的掩码进行逻辑与运算,得到所述申请内存大小对应的实际内存大小。
可选的,还包括:
第三接收模块,用于接收所述应用程序的第三线程发送的携带第三内存地址的内存释放请求;
第四确定模块,用于确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型;
设置模块,用于若确定所述第三内存空间是所述可定位类型,则在所述页表中设置所述第三内存空间的访问权限是无权限;
第二发送模块,用于向所述第三线程发送携带所述第三内存地址的内存释放响应。
具体的,所述第四确定模块,用于确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型,具体用于:
从以所述第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以所述第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以所述第三内存地址为起始地址的第三内存空间不是可定位类型。
可选的,所述第四确定模块,还用于:
确定所述第三内存空间是所述可定位类型之后,确定所述第三内存空间的地址范围;
在所述应用程序的已释放内存缓存队列中保存所述第三内存空间的地址范围;
确定所述已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到所述页表的最大值;
若确定所述已释放内存缓存队列包括的地址范围对应的内存大小已经达到所述页表的最大值,则从所述已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将所述页表中所述设定个数的内存空间的访问权限重置为有权限。
可选的,还包括回收模块,用于:
在所述发出模块发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知之后,回收所述页表和所述已释放内存缓存队列。
本发明有益效果如下:
本发明实施例提供一种内存改写的定位方法及装置,通过接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知。该方案中,可以在应用程序的页表中将已经被释放的部分被监控内存空间的访问权限设置为无权限,若接收到应用程序的线程发送的携带内存地址的内存访问请求后,首先确定在应用程序的页表中以该内存地址为起始地址的内存空间的访问权限是否是无权限,若确定在页表中该内存空间的访问权限是无权限,说明该地址空间被监控,则可以确定该内存空间被改写,发出携带应用程序的执行位置和函数调用关系表的CPU异常通知,从而可以实现自动定位内存改写,相对于现有技术可以节省人力资源,提升定位效率。
附图说明
图1为本发明实施例中一种内存改写的定位方法的流程图;
图2为本发明实施例中一种应用程序的线程申请内存空间的过程;
图3为本发明实施例中一个内存空间的结构示意图;
图4为本发明实施例中一种应用程序的线程释放内存空间的过程;
图5为本发明实施例中一种内存改写的定位装置的结构示意图。
具体实施方式
针对现有技术中存在的浪费大量人力资源,并且定位效率非常低的问题,本发明实施例提供一种内存改写的定位方法,应用于设备的CPU中,该方法的流程如图1所示,执行步骤如下:
S11:接收应用程序的第一线程发送的携带第一内存地址的内存访问请求。
CPU中通常会运行多个应用程序,每个应用程序会有多个线程,其中发出内存访问请求的线程可以定义为第一线程,CPU为线程分配内存空间时,只会通知线程该内存空间的起始地址,该起始地址可以定义为第一内存地址,因此,第一线程发送内存访问请求时,可以携带该第一内存地址。
S12:确定在应用程序的页表中以第一内存地址为起始地址的第一内存空间的访问权限是否是无权限。
页表中保存各个内存空间的访问权限,可以是有权限和无权限,其中,页表中已经被释放的部分被监控内存空间的访问权限是无权限,这部分被监控内存空间就是可能会被改写的内存空间。
S13:若确定在页表中第一内存空间的访问权限是无权限,则确定第一内存空间被改写。
由于在页表中第一内存空间的访问权限是无权限,则说明第一内存空间已经被释放且有可能会被改写,而此时又有线程要访问,因此可以确定第一内存空间被改写。
S14:发出携带应用程序的执行位置和函数调用关系表的CPU异常通知。
由于应用程序是在CPU中执行的,因此,CPU可以获取到应用程序的执行位置和函数调用关系表,然后可以发出携带应用程序的执行位置和调用函数关系表的CPU异常通知。后续,可以进一步基于应用程序的执行位置和函数调用关系表采用栈回溯的方法就可以确定出异常代码。
该方案中,可以在应用程序的页表中将已经被释放的部分被监控内存空间的访问权限设置为无权限,若接收到应用程序的线程发送的携带内存地址的内存访问请求后,首先确定在应用程序的页表中以该内存地址为起始地址的内存空间的访问权限是否是无权限,若确定在页表中该内存空间的访问权限是无权限,说明该地址空间被监控,则可以确定该内存空间被改写,发出携带应用程序的执行位置和函数调用关系表的CPU异常通知,从而可以实现自动定位内存改写,相对于现有技术可以节省人力资源,提升定位效率。
一种可选的实施方式,上述方法还包括应用程序的线程申请内存空间的过程,如图2所示,具体包括:
S21:接收应用程序的第二线程发送的携带申请内存大小的内存申请请求。
应用程序的第二线程需要申请内存时,会首先确定申请内存大小,然后向CPU发送携带申请内存大小的内存申请请求。
S22:计算申请内存大小对应的实际内存大小。
在本实施例中,申请内存大小并不是实际内存大小,因此需要进行计算确定。
S23:确定页表中满足实际内存大小且访问权限是有权限的第二内存空间。
由于页表中已经被释放的部分被监控内存空间的访问权限是无权限,因此,需要确定页表中满足实际内存大小且访问权限是有权限的内存空间,该内存空间可以定义为第二内存空间。
S24:在第二内存空间的头部写入标识信息和实际内存大小。
可以在第二内存空间预留一个头部,在头部中写入标识信息和实际内存大小,以便于后续释放内存空间时使用。
S25:获取第二内存空间的起始地址,得到第二内存地址。
S26:向第二线程发送携带第二内存地址的内存申请响应。
可以直接通过内存申请响应将第二内存地址发送给第二线程,以便于第二内存地址使用第二内存地址对应的第二内存空间。
其中,上述S22中计算申请内存大小对应的实际内存大小,实现过程具体包括:
将内存单元的大小减1,得到内存单元的掩码;
计算申请内存大小、预设头部大小与内存单元的掩码的和值;
将和值与内存单元的掩码进行逻辑与运算,得到申请内存大小对应的实际内存大小。
内存单元是内存的最小单元,通常一个内存单元的大小为4K,将4K-1,得到0xfff,这就是内存单元的掩码;还需要为内存空间设置头部,该头部的大小可以定义为预设头部大小,每个内存空间的预留头部大小都是一样的,可以根据实际需要进行设定。如图3所示为一个内存空间的结构示意图,其中,PAGE_MASK为内存单元的掩码,对于4K大小的内存单元,该值为0xfff;预设头部头为HEAD_SIZE,用于存放实际内存大小(size)和标识信息(flag);申请内存大小为need_size,即space的大小,则需要分配的实际内存大小actual_size为(need_size+HEAD_SIZE+PAGE_MASK)&(~PAGE_MASK),即为内存单元的整数倍,实际内存大小可能超过申请内存大小与预设头部头的大小的和,超过的部分可以定义为fill,fill的大小为actual_size–need_size–HEAD_SIZE。
一种可选的实施方式,上述方法还包括应用程序的线程释放内存的过程,如图4所示,具体包括:
S41:接收应用程序的第三线程发送的携带第三内存地址的内存释放请求。
应用程序的第三线程需要释放内存时,会向CPU发送携带内存地址的内存释放请求,该内存地址可以定义为定位第三内存地址。
S42:确定以第三内存地址为起始地址的第三内存空间是否是可定位类型。
以第三内存地址为起始地址的内存空间可以定义为第三内存空间。
应用程序可以使用的内存中,有的可以采用本实施例的方法进行申请和释放,有的不可以采用本实施例的方法进行申请和释放,可以通过内存空间是否是可定位类型来进行区分,因此,需要首先确定第三内存空间的类型是否是可定位类型。
S43:若确定第三内存空间是可定位类型,则在页表中设置第三内存空间的访问权限是无权限。
通过在页表中设置第三内存空间的访问权限是无权限,以表示第三内存空间已被释放且被监控。
S44:向第三线程发送携带第三内存地址的内存释放响应。
通过S41-S44就可以实现应用程序的线程释放内存。
其中,上述S42中确定以第三内存地址为起始地址的第三内存空间是否是可定位类型,实现过程具体包括:
从以第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以第三内存地址为起始地址的第三内存空间不是可定位类型。
在确定内存空间是否是可定位类型时,可以根据内存空间的头部的标识信息来确定,若标识信息为空,则说明内存空间不是可定位类型,若标识信息不为空,则说明内存空间是可定位类型。
一种可选的实施方式,上述S43中确定第三内存空间是可定位类型之后,还包括:
确定第三内存空间的地址范围;
在应用程序的已释放内存缓存队列中保存第三内存空间的地址范围;
确定已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到页表的最大值;
若确定已释放内存缓存队列包括的地址范围对应的内存大小已经达到页表的最大值,则从已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将页表中设定个数的内存空间的访问权限重置为有权限。
通常CPU分配给应用程序使用的内存不会是无限大的,为了更好地管理这些内存,可以设置已释放内存缓存队列,将已经释放的内存空间的地址范围保存在已释放内存缓存队列中,然后确定已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到页表的最大值,若确定已释放内存缓存队列包括的地址范围对应的内存大小已经达到页表的最大值,则按照先入先出的原则,从已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围,并将页表中设定个数的内存空间的访问权限重置为有权限,以便于后续应用程序的线程申请内存空间。其中,设定个数可以根据实际需要进行设定,例如可以设定为3个、5个等等。
一种可选的实施方式,上述S14中发出携带应用程序的执行位置和函数调用关系表的CPU异常通知之后,还包括:
回收页表和已释放内存缓存队列。
在CPU发出携带应用程序的执行位置和函数调用关系表的CPU异常通知之后,说明该应用程序存在内存改写的问题,需要终止该应用程序进行调整,因此,可以回收该应用程序的页表和已释放内存缓存队列,以便于分配给其他应用程序使用。
其中,上述涉及到的第一线程、第二线程、以及第三线程可以相同也可以不同。
基于同一发明构思,本发明实施例提供一种内存改写的定位装置,应用于设备的CPU中,该装置的结构如图5所示,包括:
第一接收模块51,用于接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;
第一确定模块52,用于确定在应用程序的页表中以第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,页表中已经被释放的部分被监控内存空间的访问权限是无权限;
第二确定模块53,用于若确定在页表中第一内存空间的访问权限是无权限,则确定第一内存空间被改写;
发出模块54,用于发出携带应用程序的执行位置和函数调用关系表的CPU异常通知。
该方案中,可以在应用程序的页表中将已经被释放的部分被监控内存空间的访问权限设置为无权限,若接收到应用程序的线程发送的携带内存地址的内存访问请求后,首先确定在应用程序的页表中以该内存地址为起始地址的内存空间的访问权限是否是无权限,若确定在页表中该内存空间的访问权限是无权限,说明该地址空间被监控,则可以确定该内存空间被改写,发出携带应用程序的执行位置和函数调用关系表的CPU异常通知,从而可以实现自动定位内存改写,相对于现有技术可以节省人力资源,提升定位效率。
可选的,上述装置还包括:
第二接收模块,用于接收应用程序的第二线程发送的携带申请内存大小的内存申请请求;
计算模块,用于计算申请内存大小对应的实际内存大小;
第三确定模块,用于确定页表中满足实际内存大小且访问权限是有权限的第二内存空间;
写入模块,用于在第二内存空间的头部写入标识信息和实际内存大小;
获取模块,用于获取第二内存空间的起始地址,得到第二内存地址;
第一发送模块,用于向第二线程发送携带第二内存地址的内存申请响应。
具体的,计算模块,用于计算申请内存大小对应的实际内存大小,具体用于:
将内存单元的大小减1,得到内存单元的掩码;
计算申请内存大小、预设头部大小与内存单元的掩码的和值;
将和值与内存单元的掩码进行逻辑与运算,得到申请内存大小对应的实际内存大小。
可选的,上述装置还包括:
第三接收模块,用于接收应用程序的第三线程发送的携带第三内存地址的内存释放请求;
第四确定模块,用于确定以第三内存地址为起始地址的第三内存空间是否是可定位类型;
设置模块,用于若确定第三内存空间是可定位类型,则在页表中设置第三内存空间的访问权限是无权限;
第二发送模块,用于向第三线程发送携带第三内存地址的内存释放响应。
具体的,第四确定模块,用于确定以第三内存地址为起始地址的第三内存空间是否是可定位类型,具体用于:
从以第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以第三内存地址为起始地址的第三内存空间不是可定位类型。
可选的,第四确定模块,还用于:
确定第三内存空间是可定位类型之后,确定第三内存空间的地址范围;
在应用程序的已释放内存缓存队列中保存第三内存空间的地址范围;
确定已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到页表的最大值;
若确定已释放内存缓存队列包括的地址范围对应的内存大小已经达到页表的最大值,则从已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将页表中设定个数的内存空间的访问权限重置为有权限。
可选的,还包括回收模块,用于:
在发出模块发出携带应用程序的执行位置和函数调用关系表的CPU异常通知之后,回收页表和已释放内存缓存队列。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的可选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括可选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种内存改写的定位方法,应用于设备的中央处理器CPU中,其特征在于,包括:
接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;
确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;
若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;
发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知;
接收应用程序的第三线程发送的携带第三内存地址的内存释放请求;
确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型;
若确定所述第三内存空间是所述可定位类型,则在所述页表中设置所述第三内存空间的访问权限是无权限;
向所述第三线程发送携带所述第三内存地址的内存释放响应;
确定所述第三内存空间的地址范围;
在所述应用程序的已释放内存缓存队列中保存所述第三内存空间的地址范围;确定所述第三内存空间是所述可定位类型之后,还包括:
确定所述已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到所述页表的最大值;
若确定所述已释放内存缓存队列包括的地址范围对应的内存大小已经达到所述页表的最大值,则从所述已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将所述页表中所述设定个数的内存空间的访问权限重置为有权限。
2.如权利要求1所述的方法,其特征在于,还包括:
接收所述应用程序的第二线程发送的携带申请内存大小的内存申请请求;
计算所述申请内存大小对应的实际内存大小;
确定所述页表中满足所述实际内存大小且访问权限是有权限的第二内存空间;
在所述第二内存空间的头部写入标识信息和所述实际内存大小;
获取所述第二内存空间的起始地址,得到第二内存地址;
向所述第二线程发送携带所述第二内存地址的内存申请响应。
3.如权利要求2所述的方法,其特征在于,计算所述申请内存大小对应的实际内存大小,具体包括:
将内存单元的大小减1,得到所述内存单元的掩码;
计算所述申请内存大小、预设头部大小与所述内存单元的掩码的和值;
将所述和值与所述内存单元的掩码进行逻辑与运算,得到所述申请内存大小对应的实际内存大小。
4.如权利要求1所述的方法,其特征在于,确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型,具体包括:
从以所述第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以所述第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以所述第三内存地址为起始地址的第三内存空间不是可定位类型。
5.根据权利要求1所述的方法,其特征在于,发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知之后,还包括:
回收所述页表和所述已释放内存缓存队列。
6.一种内存改写的定位装置,应用于设备的CPU中,其特征在于,包括:
第一接收模块,用于接收应用程序的第一线程发送的携带第一内存地址的内存访问请求;
第一确定模块,用于确定在所述应用程序的页表中以所述第一内存地址为起始地址的第一内存空间的访问权限是否是无权限,所述页表中已经被释放的部分被监控内存空间的访问权限是无权限;
第二确定模块,用于若确定在所述页表中所述第一内存空间的访问权限是无权限,则确定所述第一内存空间被改写;
发出模块,用于发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知;
第三接收模块,用于接收所述应用程序的第三线程发送的携带第三内存地址的内存释放请求;
第四确定模块,用于确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型;
设置模块,用于若确定所述第三内存空间是所述可定位类型,则在所述页表中设置所述第三内存空间的访问权限是无权限;
第二发送模块,用于向所述第三线程发送携带所述第三内存地址的内存释放响应;
所述第四确定模块,还用于:
确定所述第三内存空间是所述可定位类型之后,确定所述第三内存空间的地址范围;
在所述应用程序的已释放内存缓存队列中保存所述第三内存空间的地址范围;
确定所述已释放内存缓存队列包括的地址范围对应的内存大小是否已经达到所述页表的最大值;
若确定所述已释放内存缓存队列包括的地址范围对应的内存大小已经达到所述页表的最大值,则从所述已释放内存缓存队列中删除最早接收到的设定个数的内存空间的地址范围;
并将所述页表中所述设定个数的内存空间的访问权限重置为有权限。
7.如权利要求6所述的装置,其特征在于,还包括:
第二接收模块,用于接收所述应用程序的第二线程发送的携带申请内存大小的内存申请请求;
计算模块,用于计算所述申请内存大小对应的实际内存大小;
第三确定模块,用于确定所述页表中满足所述实际内存大小且访问权限是有权限的第二内存空间;
写入模块,用于在所述第二内存空间的头部写入标识信息和所述实际内存大小;
获取模块,用于获取所述第二内存空间的起始地址,得到第二内存地址;
第一发送模块,用于向所述第二线程发送携带所述第二内存地址的内存申请响应。
8.如权利要求7所述的装置,其特征在于,所述计算模块,用于计算所述申请内存大小对应的实际内存大小,具体用于:
将内存单元的大小减1,得到所述内存单元的掩码;
计算所述申请内存大小、预设头部大小与所述内存单元的掩码的和值;
将所述和值与所述内存单元的掩码进行逻辑与运算,得到所述申请内存大小对应的实际内存大小。
9.如权利要求6所述的装置,其特征在于,所述第四确定模块,用于确定以所述第三内存地址为起始地址的第三内存空间是否是可定位类型,具体用于:
从以所述第三内存地址为起始地址的第三内存空间的头部获取标识信息;
若获取的标识信息不为空,则确定以所述第三内存地址为起始地址的第三内存空间是可定位类型;
若获取的标识信息为空,则确定以所述第三内存地址为起始地址的第三内存空间不是可定位类型。
10.根据权利要求6所述的装置,其特征在于,还包括回收模块,用于:
在所述发出模块发出携带所述应用程序的执行位置和函数调用关系表的CPU异常通知之后,回收所述页表和所述已释放内存缓存队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911031504.9A CN110764914B (zh) | 2019-10-28 | 2019-10-28 | 内存改写的定位方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911031504.9A CN110764914B (zh) | 2019-10-28 | 2019-10-28 | 内存改写的定位方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110764914A CN110764914A (zh) | 2020-02-07 |
CN110764914B true CN110764914B (zh) | 2022-09-20 |
Family
ID=69333006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911031504.9A Active CN110764914B (zh) | 2019-10-28 | 2019-10-28 | 内存改写的定位方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110764914B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012119446A1 (zh) * | 2011-09-20 | 2012-09-13 | 华为技术有限公司 | 一种内存监控方法及装置 |
CN109857566A (zh) * | 2019-01-25 | 2019-06-07 | 天翼爱动漫文化传媒有限公司 | 一种内存读写过程的资源锁定算法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294606A (zh) * | 2013-05-08 | 2013-09-11 | 天脉聚源(北京)传媒科技有限公司 | 一种分配内存及检测内存溢出的方法和装置 |
CN107729751A (zh) * | 2016-08-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 数据检测方法及装置 |
CN107133144B (zh) * | 2017-05-02 | 2020-03-17 | 山东浪潮商用系统有限公司 | 一种动态监测堆内存使用错误的内存监测装置及方法 |
CN108388517A (zh) * | 2018-03-14 | 2018-08-10 | 深圳怡化电脑股份有限公司 | 一种内存检测方法、装置、设备及存储介质 |
CN108509273A (zh) * | 2018-03-22 | 2018-09-07 | 杭州迪普科技股份有限公司 | 一种内存处理方法及装置 |
-
2019
- 2019-10-28 CN CN201911031504.9A patent/CN110764914B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012119446A1 (zh) * | 2011-09-20 | 2012-09-13 | 华为技术有限公司 | 一种内存监控方法及装置 |
CN109857566A (zh) * | 2019-01-25 | 2019-06-07 | 天翼爱动漫文化传媒有限公司 | 一种内存读写过程的资源锁定算法 |
Non-Patent Citations (1)
Title |
---|
不可信系统平台下的敏感信息管理系统;谢学智等;《清华大学学报(自然科学版)》;20151115(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110764914A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9128615B2 (en) | Storage systems that create snapshot queues | |
US9639459B2 (en) | I/O latency and IOPs performance in thin provisioned volumes | |
CN112214313B (zh) | 内存分配方法及相关设备 | |
CN109800083B (zh) | 一种微服务协同调用的方法、装置、系统及存储介质 | |
WO2016123908A1 (zh) | 一种内存越界的检测方法及装置 | |
CN110737453A (zh) | 安全芯片的升级方法、装置及安全芯片 | |
US20100011360A1 (en) | Lock Windows for Reducing Contention | |
US20160224268A1 (en) | Extendible input/output data mechanism for accelerators | |
US11429315B1 (en) | Flash queue status polling | |
US8392653B2 (en) | Methods and systems for releasing and re-allocating storage segments in a storage volume | |
CN116149559A (zh) | 队列处理方法、装置、服务器、电子设备和存储介质 | |
CN105243003A (zh) | 内存分配的监测方法及装置 | |
US9619336B2 (en) | Managing production data | |
CN109284193B (zh) | 一种基于多线程的分布式数据处理方法及服务器 | |
CN110764914B (zh) | 内存改写的定位方法及装置 | |
US9778969B2 (en) | Automatic memory leak detection | |
CN105512091A (zh) | 一种内存分配方法及装置 | |
CN111625358B (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN106406771B (zh) | 日志记录方法及日志记录器 | |
EP3188026B1 (en) | Memory resource management method and apparatus | |
US20150347320A1 (en) | ENCRYPTION FOR SOLID STATE DRIVES (SSDs) | |
CN117234729A (zh) | 动态内存保护方法、装置、计算机设备及存储介质 | |
CN1307558C (zh) | 通信系统中分系统间的虚拟内存分配管理方法 | |
CN114157717A (zh) | 一种微服务动态限流的系统及方法 | |
CN107678866B (zh) | 一种基于嵌入式操作系统的分区通信方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |