CN117827501A - 一种内存越界防护方法以及装置 - Google Patents
一种内存越界防护方法以及装置 Download PDFInfo
- Publication number
- CN117827501A CN117827501A CN202211191966.9A CN202211191966A CN117827501A CN 117827501 A CN117827501 A CN 117827501A CN 202211191966 A CN202211191966 A CN 202211191966A CN 117827501 A CN117827501 A CN 117827501A
- Authority
- CN
- China
- Prior art keywords
- pointer
- boundary
- address
- memory block
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000000605 extraction Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 15
- 238000004891 communication Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000007689 inspection Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000002457 bidirectional effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本申请公开了一种内存越界防护方法以及装置,该方法包括:检查设备可以判断指针地址与该指针地址中的指针边界的关系,以及指针地址所在第一内存块与指针边界相应方向的第二内存块的对象标识的关系,当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同中的任一个条件满足时,确定该指针地址没有越界,通过结合指针边界和对象标识一起判断,提高了内存越界判断的准确度。
Description
技术领域
本申请实施例涉及计算机处理技术领域,尤其涉及一种内存越界防护方法以及装置。
背景技术
非内存安全语言(如C、C++等)允许编程人员使用指针类型的操作原语。一方面能够增强对内存资源的使用能力,提升程序运行效率;另一方面,错误的使用也会引发严重的隐患。内存越界是当前面临的主要难题之一,其指的是访问了当前变量允许范围以外的地址空间。内存越界不仅会影响程序运行的稳定性,还会导致控制流被劫持,隐私信息泄露等安全问题,造成重大的经济损失。
当前指针p在创建时会生成随机数作为标志位分别存入指针ID和对象ID,由于现有64位计算系统普遍使用低32/48位地址寻址,因此指针ID位于未使用的高位地址中。对象ID会存储于预留的内存空间中并使用该指针的地址索引。由于指针ID使用了指针中预留的地址空间,因而不会产生额外的存储开销。但对象ID却需要额外的存储。对象ID的存储开销来源之一是内存块的保护粒度。当以m字节作为保护粒度时,意味着每m字节需要分配一个对象ID。显然,m越小保护强度越大,但随之而来的存储开销也越大。为了权衡安全性和存储,当前方案中通常会将m定为16。然而,这意味着16字节内的数据共用一个对象ID,即无法通过ID对比的方式发现块内的越界问题和大于保护粒度的指针访问地址空间的越界问题。
发明内容
本申请提供了一种内存越界防护方法以及装置,用于提高内存越界判断的准确度。
本申请第一方面提供了一种内存越界防护方法,该方法包括:获取指针地址、指针地址所在的第一内存块的对象标识,以及第一内存块相邻的第二内存块的对象标识;从指针地址中提取指针边界,指针边界为指针地址所用的指针的地址指向边界;当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同时,确定指针地址没有越界。
上述方面中,检查设备可以判断指针地址与该指针地址中的指针边界的关系,以及指针地址所在第一内存块与指针边界相应方向的第二内存块的对象标识的关系,当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同中的任一个条件满足时,确定该指针地址没有越界,通过结合指针边界和对象标识一起判断,提高了内存越界判断的准确度。
一种可能的实施方式中,上述步骤获取指针地址以及指针地址所在的第一内存块的对象标识之前,该方法还包括:将指针边界存储在指针地址的高位地址上。
上述可能的实施方式中,利用未使用的高位地址空间标记块内合法边界,减少存储开销。
一种可能的实施方式中,上述步骤确定指针地址没有越界之后,该方法还包括:对指针地址的高位地址进行复原。
上述可能的实施方式中,及时复原指针地址的高位地址,避免因空间要求而出发异常。
一种可能的实施方式中,上述步骤将指针边界存储在指针地址的高位地址上之前,该方法还包括:接收指令,指令用于触发将指针边界存储在指针地址的高位地址上步骤。
上述可能的实施方式中,只有在收到指令才执行高位存储,提高方案的灵活性。
一种可能的实施方式中,指针边界包括上边界和下边界中的至少一个。
上述可能的实施方式中,根据需求灵活检查上边界、下边界或双向边界,提高方案的灵活性。
本申请第二方面提供了一种内存越界防护装置,可以实现上述第一方面或第一方面中任一种可能的实施方式中的方法。该装置包括用于执行上述方法的相应的单元或模块。该装置包括的单元或模块可以通过软件和/或硬件方式实现。该装置例如可以为网络设备,也可以为支持网络设备实现上述方法的芯片、芯片系统、或处理器等,还可以为能实现全部或部分网络设备功能的逻辑模块或软件。
本申请第三方面提供了一种计算机设备,包括:处理器,该处理器与存储器耦合,该存储器用于存储指令,当指令被处理器执行时,使得该计算机设备实现上述第一方面或第一方面中任一种可能的实施方式中的方法。该计算机设备例如可以为网络设备,也可以为支持网络设备实现上述方法的芯片或芯片系统等。
本申请第四方面提供了一种计算机可读存储介质,该计算机可读存储介质中保存有指令,当该指令被处理器执行时,实现前述第一方面或第一方面任一种可能的实施方式提供的方法。
本申请第五方面提供了一种计算机程序产品,计算机程序产品中包括计算机程序代码,当该计算机程序代码在计算机上执行时,实现前述第一方面或第一方面任一种可能的实施方式提供的方法。
附图说明
图1为本申请实施例提供的一种块内越界检查架构示意图;
图2为本申请实施例提供的一种内存越界防护方法的流程示意图;
图3为本申请实施例提供的一种泛化地址空间布局的示意图;
图4为本申请实施例提供的一种检查设备的结构示意图;
图5为本申请实施例提供的一种指针创建硬件逻辑示意图;
图6为本申请实施例提供的一种越界检查硬件逻辑示意图;
图7为本申请实施例提供的一种内存越界防护装置的结构示意图;
图8为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
本申请实施例提供了一种寻物指引方法以及装置,用于在末端查找阶段大大减少用户的查找时间。
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本申请,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本申请同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本申请的主旨。
下面对本申请实施例中的一些术语进行解释。
指针:非内存安全语言中一种用于存放内存地址的变量。利用指针,编程人员既可以对数据本身操作,也能够对数据本身所在的地址进行操作。
指针ID:存储在指针中未使用的高位地址空间中的ID值。与对象ID相同时,可判断未出现内存块粒度的越界行为。
对象ID:存储在特定内存区域的ID值,由对应指针的地址索引。
&为二进制中的按位与运算符。
>>为算术右移运算符。
<<为算术左移运算符。
=为赋值运算符。
==为计算机编程的二元运算符,当左边的内容与右边的内容相同时,返回1,其余时候返回0。
||为逻辑或运算符,两边任何一个值为TRUE(或者两个都为TRUE),则返回值为TRUE。如果两个运算符都是FALSE,则返回值为FALSE。
|为二进制中按位或运算符,两边相同位置上任一为1,则该位为1。
非内存安全语言(如C、C++等)允许编程人员使用指针类型的操作原语。一方面能够增强对内存资源的使用能力,提升程序运行效率;另一方面,错误的使用也会引发严重的隐患。内存越界是当前面临的主要难题之一,其指的是访问了当前变量允许范围以外的地址空间。内存越界不仅会影响程序运行的稳定性,还会导致控制流被劫持,隐私信息泄露等安全问题,造成重大的经济损失。
请参阅图1,如图1所示为本申请实施例提供的一种块内越界检查架构示意图,该架构包括中央处理器(central processing unit,CPU)11、检查模块12和缓存/内存13,其中CPU 11下发指针请求访问该指针指向的地址,检查模块12检查该指针指向的地址是否越界,当检查出该指针指向的地址越界时,则拒绝该指针的访问,若检查出该指针指向的地址没有越界,则可以继续访问在缓存/内存13中该指针指向的地址,执行相应的读写操作,缓存/内存13可以将地址上的数据反馈给CPU 11。
当前指针p在创建时会生成随机数作为标志位分别存入指针ID和对象ID,由于现有64位计算系统普遍使用低32/48位地址寻址,因此指针ID位于未使用的高位地址中。对象ID会存储于预留的内存空间中并使用该指针的地址索引。由于指针ID使用了指针中预留的地址空间,因而不会产生额外的存储开销。但对象ID却需要额外的存储。对象ID的存储开销来源之一是内存块的保护粒度。当以m字节作为保护粒度时,意味着每m字节需要分配一个对象ID。显然,m越小保护强度越大,但随之而来的存储开销也越大。为了权衡安全性和存储,当前方案中通常会将m定为16。然而,这意味着16字节内的数据共用一个对象ID,即无法通过ID对比的方式发现块内的越界问题和大于保护粒度的指针访问地址空间的越界问题。
为解决上述问题,本申请实施例提供了一种内存越界防护方法,该方法如下所述。
请参阅图2,如图2所示为本申请实施例提供的一种内存越界防护方法的流程示意图,该方法包括:
步骤201.检查设备获取指针地址、指针地址所在的第一内存块的对象标识,以及第一内存块相邻的第二内存块的对象标识。
本实施例中,内存分为一个个内存块,当使用指针访问内存地址时,检查装置可以从该指针中提取该指针访问的在内存块中的指针地址,其中,该指针地址所在的内存块为第一内存块,检查设备也可以相应获取该第一内存块的对象标识。
步骤202.检查设备从指针地址中提取指针边界,指针边界为指针地址所用的指针的地址指向边界。
本实施例中,指针地址中还存储有该指针的指针边界,该指针边界为创建时某长度的指针所在地址范围边界,示例性的,假设指针p的长度为4,它能够合法操纵地址0x…0至0x…3,则指针边界包括0x…0和0x…3。
由于正常指针没有包含该指针边界,本申请实施例在创建指针时还需要将该指针边界保存在指针地址中。在一个示例中,由于指针地址中存在还未使用的高位地址,则本申请实施例可以将指针边界存储在指针地址的高位地址上,使用了指针中预留的地址空间,因而不会产生额外的存储开销。
示例性的,请参阅图3,如图3所示为本申请实施例提供的一种泛化地址空间布局的示意图,地址空间共计包括n位,其中低q位是预留信息和地址信息。q至p-1位为指针ID。p至n位用于存储块内边界值。其中Lower代表了块内的下边界,占据m-p位;Upper代表了块内的上边界,占据n-m+1位。其中,Lower和Upper的位置可以互相替换,图3中仅为示例。假定内存标记方案的保护粒度为m字节(即m字节使用相同的ID)。此时,Upper和Lower都需要L(log2m)位,共计占用2L空间。
由于现实地址预留的可用空间A不一定满足2L空间,则若L≤A<2L,可以只存储上边界或下边界来满足上边界或下边界的越界检查。若A≥2L,则可以同时存储上边界和下边界来同时满足上边界和下边界的双向越界检查。本申请实施例以双向越界检查为例。
具体的,指针创建的流程可以是,修改malloc,kmalloc等指针创建族的函数逻辑,对于返回地址依据图3所述的标记分别执行公式1和2,完成边界的赋值记录。其中ptr为指针地址,length为当前指针指向空间的长度(单位为字节),mask为二进制数据,包含t个连续的1,2t为当前内存标记方案的保护粒度。例如,保护粒度为16字节时,t为4。
Upper=((ptr+length-1)&mask)<<m (1)
Lower=(ptr&mask)<<p (2)
则检查设备从指针地址从获取指针边界的方式可以是,上边界为(ptr>>m)&mask,下边界为(ptr>>p)&mask。
步骤203.当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同时,检查设备确定指针地址没有越界。
本实施例中,当检查设备确定指针边界后,即可确定根据指针地址是否在该指针边界范围内,或者该指针指向空间的长度大于内存块长度时,在指针边界相应方向的第二内存块的对象标识与第一内存块的对象标识相同,则可以确定该指针地址没有越界,其中,该第二内存块可以为一个或多个,此处不作限定。指针边界为上边界时第二内存块为第一内存块的后一个内存块,指针边界为下边界时第二内存块为第一内存块的前一个内存块。
具体的,比较过程会分别判断上边界(公式3)和下边界(公式4)是否合法。如果符合条件,则可以执行后续的访问操作,否则需要触发异常警告。
((ptr>>m)&mask)>(ptr&mask)||(IDi==IDi+1) (3)
((ptr>>p)&mask)<(ptr&mask)||(IDi==IDi-1) (4)
示例性的,当指针长度小于内存块长度时,假设指针指向内存长度为4,内存块为16字节,内存块地址空间为0x…0000至0x…1111,指针上边界为0x…0100,(ptr>>m)&mask==0100,指针下边界为0x…0001,(ptr>>p)&mask==0001,若接收到指针的指针地址为0x…0011,ptr&mask==0011,由于0100>0011>0001,则该指针地址同时满足公式3和公式4,且可以确定该指针地址没有越界。
当指针长度小于内存块长度时,假设指针指向内存长度为4,内存块为16字节,内存块地址空间为0x…0000至0x…1111,指针上边界为0x…0100,(ptr>>m)&mask==0100,指针下边界为0x…0001,(ptr>>p)&mask==0001,若接收到指针的指针地址为0x…0101,ptr&mask==0101,由于0101>0001,但0101≮0100,且该指针地址所在的第一内存块的对象标识与该第一内存块右边的第二内存块的对象标识不同,则该指针地址同时满足公式4但不满足公式3,则确定该指针地址越界。
当指针长度大于内存块长度时,假设指针指向内存长度为20,内存块为16字节,内存块1地址空间为0x…0000至0x…1111,内存块2地址空间为0x…10000至0x…11111,此时内存块1和内存块2的对象标识相同,且与其他内存块的对象标识不同,指针上边界为0x…10111,(ptr>>m)&mask==0111,指针下边界为0x…0100,(ptr>>p)&mask==0100,若接收到指针的指针地址为0x…0101,则ptr&mask==0101,由于0111>0101>0100,则该指针地址同时满足公式3和公式4,且可以确定该指针地址没有越界。
当指针长度大于内存块长度时,假设指针指向内存长度为20,内存块为16字节,内存块1地址空间为0x…0000至0x…1111,内存块2地址空间为0x…10000至0x…11111,此时内存块1和内存块2的对象标识相同,且与其他内存块的对象标识不同,指针上边界为0x…10111,(ptr>>m)&mask==0111,指针下边界为0x…0100,(ptr>>p)&mask==0100,若接收到指针的指针地址为0x…10000,则ptr&mask==0000,虽然0111>0000≯0100,但是公式4中第二内存块为内存块2,内存块1和内存块2的对象标识相同,则该指针地址同时满足公式3和公式4,该指针地址没有越界。
若接收到的指针的指针地址为0x…11000,则ptr&mask==1000,0111≯1000>0100,公式3中第二内存块为内存块2的后一个内存块,由于该后一个内存块与内存块2的对象标识不同,则该指针地址不满足公式3,该指针地址越界。
由于指针高位地址填入了块内边界,若系统要求该空间符合特定要求,则需要先恢复成指定数值后再执行访问操作,本申请实施例可以对该指针地址的高位地址进行复原,即将该指针地址的高位地址恢复成指定数值,示例性的,若要求该未用空间全部为1时,可执行公式5完成复原,此时的maskr包含n-p+1个1。
ptr|=((ptr>>p)|maskr)<<p (5)
本申请实施例中,指针边界包括上边界和下边界,但在实际应用中也可以只选择其中一个边界进行检查,可适用于只需要单向检查的场景,此处不作限定。
本申请实施例中,是否要执行本申请实施例的内存越界防护方法还可以通过用户的指令确定,通过该指令触发在创建的指针的高位地址上存储该指针的指针边界,以满足后续的边界判断步骤。该指令可以通过点击按钮或者其他方式实现,此处不作限定。
应用程序在运行过程中会对其自身数据进行读写以完成预设的功能。其中,检查设备只有在程序执行指针创建和指针引用(读写指针指向的数据)操作时才会触发,如图4所示的检查设备的结构示意图,具体涉及如下模块:全局配置模块41、边界赋值模块42、边界提取模块43、ID提取模块44、对比模块45和指针复原模块46,其中,
全局配置模块41:该模块主要记录了当前系统的配置信息。包括是否启用越界检查机制,边界防御粒度,即仅保护上(或下)边界还是双向边界同时保护,边界信息在指针中放置的偏移位置。需要额外说明的是,无论是指针创建还是指针应用操作都需要使用该模块的信息。
边界赋值模块42:当程序在创建指针时,该模块会从全局配置模块41中读取信息,并结合指针的基址和长度,向特定空间写入边界值用于后续越界检查。
边界提取模块43:在出现指针引用时,与边界赋值模块类似,该模块依据全局配置信息中读取的信息,从指定的指针地址空间中读取之前存放的边界信息。
ID提取模块44:前述中已说明本专利是基于内存标记方案的改进,因此可复用该方案中相邻内存块的对象ID和自身的指针ID用于辅助内存越界校验。
对比模块45:对比模块依据传入的边界值和ID信息完成是否越界的检查。若出现块内越界,则会触发异常阻止本次访问;反之,则会正常完成请求。对比模块仅负责判断块内是否存在越界问题。跨块的越界检查依然由内存标记方案解决。
指针复原模块46:由于边界赋值模块会向指针中未使用的高位空间填入边界值。而部分系统要求该地址空间内的值为特定值才能合法访问。对于该类系统,本发明引入了指针复原模块,即在完成对比模块的校验后,会将指针高位转位特定值会才会下发请求,避免触发异常。注意,本模块仅复原本次发送的指针,指针本身依旧维持着原有的边界信息以保证后续的校验。
上面讲述了纯软件方式,下面对软硬协同的方式进行描述。
1、指针创建的处理流程:
引入特殊的存储指令,使硬件感知对应地址需要存储边界值。指令格式如下:mem_store(ptr,length,p,m,mask)。硬件处理逻辑如图5所示的指针创建硬件逻辑示意图,实际的计算结果与公式1和公式2等价。
2、指针引用的处理流程:
a)ID提取复用现有内存标记方案,保证获取对当前地址对应的ID(记为IDi),以及临近地址的对象ID即可(记为IDi-1和IDi+1)。
b)在获得对象ID之后,边界提取和越界检查可以在一条指令内完成。设计指令mem_compare(ptr,p,m,mask)传入参数,参照图6所示的越界检查硬件逻辑示意图,按照如图6所示的逻辑即将公式3和公式4的判断逻辑硬化实现。若判断符合条件,即可允许该请求下发。同理,依旧需要复原为符合当前系统对未用空间要求的地址后才可以执行后续操作。
本申请实施例中,检查设备可以判断指针地址与该指针地址中的指针边界的关系,以及指针地址所在第一内存块与指针边界相应方向的第二内存块的对象标识的关系,当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同中的任一个条件满足时,确定该指针地址没有越界,通过结合指针边界和对象标识一起判断,提高了内存越界判断的准确度。
进一步的,本申请实施例使用了空闲的高位地址空间存储指针的块内边界值,无需增加存储开销,且为后续能够完成越界检查提供了条件。
上面讲述了内存越界防护方法,下面对执行该方法的装置进行描述。
请参阅图7,如图7所示为本申请实施例提供的一种内存越界防护装置的结构示意图,该装置70包括:
获取单元701,用于获取指针地址、指针地址所在的第一内存块的对象标识,以及第一内存块相邻的第二内存块的对象标识;
提取单元702,用于从指针地址中提取指针边界,指针边界为指针地址所用的指针的地址指向边界;
确定单元703,用于当指针地址在指针边界的范围内,或第一内存块的对象标识与在指针边界相应方向的第二内存块的对象标识相同时,确定指针地址没有越界。
获取单元701用于执行图2方法实施例中的步骤201,提取单元702用于执行图2方法实施例中的步骤202,确定单元703用于执行图2方法实施例中的步骤203。
可选的,装置70还包括存储单元704,存储单元704具体用于:
将指针边界存储在指针地址的高位地址上。
可选的,装置70还包括复原单元705,复原单元705具体用于:
对指针地址的高位地址进行复原。
可选的,装置70还包括接收单元706,接收单元706具体用于:
接收指令,指令用于触发将指针边界存储在指针地址的高位地址上步骤。
可选的,指针边界包括上边界和下边界中的至少一个。
图8所示,为本申请的实施例提供的计算机设备80的一种可能的逻辑结构示意图。计算机设备80包括:处理器801、通信接口802、存储系统803以及总线804。处理器801、通信接口802以及存储系统803通过总线804相互连接。在本申请的实施例中,处理器801用于对计算机设备80的动作进行控制管理,例如,处理器801用于执行图2的方法实施例中检查设备所执行的步骤。通信接口802用于支持计算机设备80进行通信。存储系统803,用于存储计算机设备80的程序代码和数据。
其中,处理器801可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器801也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线804可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
装置70中的接收单元706相当于计算机设备80中的通信接口802,装置70中的获取单元701、提取单元702、确定单元703、存储单元704和复原单元705相当于计算机设备80中的处理器801。
本实施例的计算机设备80可对应于上述图2方法实施例中的检查设备,该计算机设备80中的通信接口802可以实现上述图2方法实施例中的检查设备所具有的功能和/或所实施的各种步骤,为了简洁,在此不再赘述。
应理解以上装置中单元的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且装置中的单元可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分单元以软件通过处理元件调用的形式实现,部分单元以硬件的形式实现。例如,各个单元可以为单独设立的处理元件,也可以集成在装置的某一个芯片中实现,此外,也可以以程序的形式存储于存储器中,由装置的某一个处理元件调用并执行该单元的功能。此外这些单元全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件又可以成为处理器,可以是一种具有信号的处理能力的集成电路。在实现过程中,上述方法的各步骤或以上各个单元可以通过处理器元件中的硬件的集成逻辑电路实现或者以软件通过处理元件调用的形式实现。
在一个例子中,以上任一装置中的单元可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integratedcircuit,ASIC),或,一个或多个微处理器(digital singnal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA),或这些集成电路形式中至少两种的组合。再如,当装置中的单元可以通过处理元件调度程序的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,CPU)或其它可以调用程序的处理器。再如,这些单元可以集成在一起,以片上系统(system-on-a-chip,SOC)的形式实现。
在本申请的另一个实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的处理器执行该计算机执行指令时,设备执行上述方法实施例中检查设备所执行的方法。
在本申请的另一个实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中。当设备的处理器执行该计算机执行指令时,设备执行上述方法实施例中检查设备所执行的方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-onlymemory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (13)
1.一种内存越界防护方法,其特征在于,包括:
获取指针地址、所述指针地址所在的第一内存块的对象标识,以及所述第一内存块相邻的第二内存块的对象标识;
从所述指针地址中提取指针边界,所述指针边界为所述指针地址所用的指针的地址指向边界;
当所述指针地址在所述指针边界的范围内,或所述第一内存块的对象标识与在所述指针边界相应方向的所述第二内存块的对象标识相同时,确定所述指针地址没有越界。
2.根据权利要求1所述的方法,其特征在于,所述获取指针地址以及所述指针地址所在的第一内存块的对象标识之前,所述方法还包括:
将所述指针边界存储在所述指针地址的高位地址上。
3.根据权利要求2所述的方法,其特征在于,所述确定所述指针地址没有越界之后,所述方法还包括:
对所述指针地址的高位地址进行复原。
4.根据权利要求2或3所述的方法,其特征在于,所述将所述指针边界存储在所述指针地址的高位地址上之前,所述方法还包括:
接收指令,所述指令用于触发所述将所述指针边界存储在所述指针地址的高位地址上步骤。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述指针边界包括上边界和下边界中的至少一个。
6.一种内存越界防护装置,其特征在于,包括:
获取单元,用于获取指针地址、所述指针地址所在的第一内存块的对象标识,以及所述第一内存块相邻的第二内存块的对象标识;
提取单元,用于从所述指针地址中提取指针边界,所述指针边界为所述指针地址所用的指针的地址指向边界;
确定单元,用于当所述指针地址在所述指针边界的范围内,或所述第一内存块的对象标识与在所述指针边界相应方向的所述第二内存块的对象标识相同时,确定所述指针地址没有越界。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括存储单元,所述存储单元具体用于:
将所述指针边界存储在所述指针地址的高位地址上。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括复原单元,所述复原单元具体用于:
对所述指针地址的高位地址进行复原。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括接收单元,所述接收单元具体用于:
接收指令,所述指令用于触发所述将所述指针边界存储在所述指针地址的高位地址上步骤。
10.根据权利要求6-9任一项所述的装置,其特征在于,所述指针边界包括上边界和下边界中的至少一个。
11.一种计算机设备,其特征在于,包括:处理器以及存储器,
所述处理器用于执行所述存储器中存储的指令,使得所述计算机设备执行权利要求1至5中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在所述计算机上运行时,使得所述计算机执行如权利要求1至5中任一项所述的方法。
13.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上执行时,所述计算机执行如权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211191966.9A CN117827501A (zh) | 2022-09-28 | 2022-09-28 | 一种内存越界防护方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211191966.9A CN117827501A (zh) | 2022-09-28 | 2022-09-28 | 一种内存越界防护方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117827501A true CN117827501A (zh) | 2024-04-05 |
Family
ID=90506479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211191966.9A Pending CN117827501A (zh) | 2022-09-28 | 2022-09-28 | 一种内存越界防护方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117827501A (zh) |
-
2022
- 2022-09-28 CN CN202211191966.9A patent/CN117827501A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101050554B1 (ko) | 개발 인터페이스에 대한 적용성을 가진 데이터 처리 시스템내의 마스킹 | |
US3576544A (en) | Storage protection system | |
US4525777A (en) | Split-cycle cache system with SCU controlled cache clearing during cache store access period | |
US10671548B2 (en) | Memory initialization detection system | |
WO2013160724A1 (en) | Data processing system and method for operating a data processing system | |
CN112464221A (zh) | 内存访问行为的监控方法及系统 | |
US4851989A (en) | Data processing apparatus with a virtual storage address boundary check circuit | |
EP2645249A1 (en) | Information processing apparatus, and method of controlling information processing apparatus | |
CN113485647A (zh) | 数据写入方法、数据读出方法及先进先出存储器 | |
CN113177045A (zh) | 数据提取方法、装置、可计算存储设备及数据请求设备 | |
CN117827501A (zh) | 一种内存越界防护方法以及装置 | |
US9639477B2 (en) | Memory corruption prevention system | |
CN111381905B (zh) | 一种程序处理方法、装置及设备 | |
CN116501665A (zh) | 数据寄存器访问方法、装置、可读存储介质及电子设备 | |
CN112463288A (zh) | 基于插桩的行为监控方法及系统 | |
CN112463287A (zh) | 基于插桩的访问请求处理方法及系统 | |
CN112463286A (zh) | 用于虚拟机操作系统的异常事件监控方法及系统 | |
CN114697440B (zh) | 网络管理方法及移动终端 | |
JPS599937B2 (ja) | 情報処理装置 | |
CN110597641A (zh) | 一种线性地址空间的布局方法及计算装置 | |
CN114610577A (zh) | 一种目标资源的锁定方法、装置、设备和介质 | |
CN113886087A (zh) | 一种应用内存管理方法、装置、设备及存储介质 | |
CN114116524A (zh) | 一种创建安全页表及访问内存的方法及装置 | |
CN112035379A (zh) | 存储空间的使用方法、装置、存储介质以及电子装置 | |
CN115934581B (zh) | 一种跨进程内存的处理方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |