CN117806958A - 一种堆栈数据越界检测方法、装置、电子设备及存储介质 - Google Patents
一种堆栈数据越界检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117806958A CN117806958A CN202311844295.6A CN202311844295A CN117806958A CN 117806958 A CN117806958 A CN 117806958A CN 202311844295 A CN202311844295 A CN 202311844295A CN 117806958 A CN117806958 A CN 117806958A
- Authority
- CN
- China
- Prior art keywords
- detection
- area
- boundary crossing
- data
- detection area
- 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 60
- 238000001514 detection method Methods 0.000 claims abstract description 527
- 238000013500 data storage Methods 0.000 claims abstract description 38
- 238000002955 isolation Methods 0.000 claims abstract description 34
- 230000000903 blocking effect Effects 0.000 claims abstract description 11
- 238000012545 processing Methods 0.000 claims description 14
- 238000012795 verification Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 7
- 238000005516 engineering process Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 7
- 230000002159 abnormal effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000003190 augmentative effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本发明涉及计算机技术领域,特别涉及一种堆栈数据越界检测方法、装置、电子设备及存储介质。该方法通过为目标线程分配堆栈,堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;再通过对第一检测区和第二检测区进行检测从而确定当前堆栈是否存在数据越界情况,快速定位越界来源。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种堆栈数据越界检测方法、装置、电子设备及存储介质。
背景技术
进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位。线程是进程的子任务,是中央处理器(Central Processing Unit,简称CPU)调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。
但是,由于同一进程内的多个线程通常共用同一地址空间,使得线程之间比较容易互相读写其他线程的堆栈,尤其是线程存在缺陷,保存数据越界溢出,可能踩坏其他线程堆栈,导致其他线程崩溃。所以如何快速检测线程堆栈的越界行为,避免线程越界导致的其他线程的崩溃成为了亟需解决的问题。
发明内容
为了解决现有技术的问题,本申请实施例提供了一种堆栈数据越界检测方法、装置、电子设备及存储介质。所述技术方案如下:
一方面,提供了一种堆栈数据越界检测方法,所述方法包括:
确定待执行的目标线程;
为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;
对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值;
若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。
可选的,隔离区位于内部越界检测区和外部越界检测区之间;对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值,包括:
获取外部越界检测区内的数据和内部越界检测区内的数据;
对外部越界检测区内的数据和第一预设字符段进行校验处理,生成外部越界检测区内的检测值;
对内部越界检测区内的数据和第二预设字符段进行校验处理,生成内部越界检测区内的检测值。
可选的,预设检测值包括第一预设检测值和第二预设检测值;所述方法还包括:
对第一预设字符段进行校验处理,生成第一预设检测值;
对第二预设字符段进行校验处理,生成第二预设检测值。
可选的,若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果,包括:
若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值符合第二预设检测值,则生成第二检测结果;第二检测结果表征目标线程的堆栈存在外部数据越界情况;
若外部越界检测区的检测值符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第三检测结果;第二检测结果表征目标线程的堆栈存在本堆栈数据越界情况;
若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第四检测结果;第二检测结果表征目标线程的堆栈同时存在外部数据和本堆栈数据越界情况。
可选的,对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值之后,还包括:
若外部越界检测区的检测值和内部越界检测区的检测值均符合预设检测值,则生成第五检测结果;第五检测结果表征目标线程对应的堆栈不存在数据越界情况。
可选的,在为待执行的目标线程分配堆栈过程中,所述方法还包括:
将隔离区对应的访问权限模式设置成只读模式。
另一方面,提供了一种数据越界检测装置,所述装置包括:
确定模块,用于确定待执行的目标线程;
分配模块,用于为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;
检测模块,用于对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值;
生成模块,用于若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。
另一方面,提供了一种电子设备,包括处理器和存储器,存储器中存储有至少一条指令或者至少一段程序,至少一条指令或者至少一段程序由处理器加载并执行以实现上述任一方面的堆栈数据越界检测方法。
另一方面,提供了一种计算机可读存储介质,计算机可读存储介质中存储有至少一条指令或者至少一段程序,至少一条指令或者至少一段程序由处理器加载并执行以实现如上述任一方面的堆栈数据越界检测方法。
另一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述任一方面的堆栈数据越界检测方法。
本申请实施例通过确定待执行的目标线程;为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值;若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。如此情况下,能够通过对第一检测区和第二检测区进行检测从而确定当前堆栈是否存在数据越界情况,后续可以根据检测结果快速定位越界来源,避免数据进一步的越界而造成的程序错误。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种实施环境的示意图;
图2是本申请实施例提供的一种堆栈数据越界检测方法的流程示意图;
图3是一种虚拟地址与物理地址的映射示意图;
图4是本申请实施例提供的一种堆栈的结构示意图;
图5是本申请实施例提供的一种数据越界检测装置的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,其所示为本申请实施例提供的一种实施环境的示意图。如图1所示,该应用环境可以包括终端10,以及位于终端10上的数据越界检测装置101,数据越界检测装置101通过先确定待执行的目标线程,然后为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值;若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。
示例性的,具体可以通过判断外部越界检测区的检测值和内部越界检测区的检测值与对应的预设检测值的比对情况,来确定数据越界的来源,从而可以指导相关开发人员或者修复程序对存在错误的程序进行修复。
示例性的,终端10可以包括但不限于智能手机、台式计算机、平板电脑、笔记本电脑、智能音箱、数字助理、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、智能可穿戴设备等类型的电子设备。可选的,电子设备上运行的操作系统可以包括但不限于安卓系统、IOS系统、Linux系统、Windows系统、Unix系统等。
示例性的,终端10还可以结合服务器来实现对堆栈数据的越界检测,例如,可以通过终端10确定待执行的目标线程,然后为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;然后将内部越界检测区和外部越界检测区的数据发送给服务器,基于服务器存储的检测算法对内部越界检测区和外部越界检测区的数据分别进行检测处理,得到外部越界检测区的检测值和内部越界检测区的检测值;并将外部越界检测区的检测值和内部越界检测区的检测值分别与对应的预设检测值进行判断比对,得到相应的检测结果,再将检测结果发送给终端10。具体的,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
本实施例中,上述服务器以及终端10可以通过有线或无线通信方式进行直接或间接地连接,本公开在此不做限制。
请参阅图2,其所示为本申请实施例提供的一种堆栈数据越界检测方法的流程示意图,所述方法可以包括:
S201:确定待执行的目标线程。
示例性的,本方法可以是应用于基于C语言构建的底层架构系统。具体可以是应用于单核处理器,也可以是多核处理中,为了方便描述本申请方案,以下将以该方法应用于单核处理器中进行阐述。
示例性的,步骤S201可以具体阐述为:获取所述目标处理器对应的线程待执行队列;在当前线程在所述目标处理器上执行完成的情况下,按照线程待执行队列中的执行时序从所述线程待执行队列中确定出下一时刻的待执行线程标识;将所述下一时刻的待执行线程确定为所述待执行的目标线程。一般,在单核处理器中,同一时间段,只有一个线程A在处理器上运行,其他线程(如线程B,线程C,线程D)一般在线程待执行队列中,当处理器上的线程A对应的运行时间完成时,调度器会按照预设规则从线程待执行队列中挑选下一个运行的线程(这里可以称为待执行的目标线程,如线程B),同时线程A重新放到线程待执行队列中。此时,在目标线程执行前就会为其创建相应的堆栈,简单来说,线程的堆栈是用来存储其执行过程中的数据的,本申请实施例中,主要要是堆栈中的数据存储区域来存储其执行过程中的数据的。可选的,本申请中的每个线程的堆栈可以在线程第一次执行前创建,具体可以基于线程的标识来创建,后续线程再执行时,就不需要重复创建相应的堆栈了,具体的,后续目标线程在所述目标处理器上执行过程中,向对应的堆栈进行数据读写的过程可以包括:基于目标线程的标识获取所述目标线程对应的堆栈的虚拟地址;基于所述目标线程对应的堆栈的虚拟地址,从地址映射表(也可以称为页表)中确定出所述目标线程对应的堆栈的物理地址;地址映射表表征各线程的虚拟地址和物理地址的映射关系;基于所述目标线程对应的堆栈的物理地址,向对应的堆栈进行数据读写。
请参阅图3,虚拟地址与物理地址之间可以通过页表来映射,页表是存储在内存里的,内存管理单元(Memory Management Unit,MMU)的一个重要功能是使系统能够运行多个任务,作为在其自己的专用虚拟内存空间中运行的独立程序,其工作内容之一就是将虚拟内存地址转换成物理地址。具体的,可以通过将整个虚拟和物理内存空间切成一段段固定尺寸的大小,即对虚拟和物理内存空间进行分页,这样一个连续并且尺寸固定的内存空间,可以称为页。在分页机制下,虚拟地址分为两部分,页号和页内偏移,页号作为页表的索引,页表包含物理页每页所在物理内存的基地址,这个基地址与页内偏移的组合就形成了物理内存地址。采用该种方式可以使内存空间中的内存碎片更少,提高了内存的利用率。可选的,后续可以通过对页表的访问权限的控制来控制对相关物理内存的访问。访问权限可以控制一个区域(也可以是一个页)的可读写情况,具体包括以下4种情况:可读且可写,不可读且可写,可读且不可写,不可读且可写,当设置成可读且不可写(即只读)模式时,则说明不可向该区域写入数据,但可以从该区域读取数据。
示例性的,可以将对页表中不同地址区域的访问权限按照以下规则进行分类,包括00,01,10,11,当选择00时,表示该区域的访问权限为对第一类访问对象(具体可以属于非特权访问类,如应用类)不可读写,对第二类访问对象(具体可以属于特权访问类,如系统核类、监控程序类和虚拟机类)可读写;当选择01时,表示该区域的访问权限为对第一类访问对象为可读写,对第二类访问对象为可读写;当选择10时,表示该区域的访问权限为对第一类访问对象为不可读写,对第二类访问对象为可读且不可写;当选择11时,表示该区域的访问权限为对第一类访问对象为可读且不可写,对第二类访问对象为可读且不可写。
S203:为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界。
通常,同一进程内的多个线程通常共用同一地址空间,使得线程之间比较容易互相读写其他线程的堆栈,尤其是线程存在缺陷,保存数据越界溢出,可能踩坏其他线程堆栈,导致其他线程崩溃。请参阅图4,其所示是本申请实施例提供的一种堆栈的结构示意图。通过在为线程分配堆栈时,在堆栈的数据存储区的前后端分别设置一个检测区,具体的,可以将位于数据储存区前端的检测区称为第一检测区,将位于数据存储区后端的检测区称为第二检测区,其中,第一检测区和第二检测区均包括外部越界检测区(A区和D区)、隔离区(E区和F区)和内部越界检测区(B区和C区);内部越界检测区(B区和C区)靠近数据存储区;隔离区(E区和F区)位于同一检测区内的内部越界检测区和外部越界检测区之间,可以将隔离区对应的访问权限模式设置成只读模式,从而使得隔离区阻挡外部越界检测区与内部越界检测区的数据之间的互相越界,此时,当数据越界外溢到隔离区时,会触发操作系统的异常保护机制,阻止数据越界写入目标区,例如,当数据存储区的数据外溢到B区后,当继续外溢到E区,就会触发操作系统的异常保护机制,阻止数据越界写入A区。当其他线程的数据外溢到A区后,当继续外溢到E区,就会触发操作系统的异常保护机制,阻止数据越界写入B区,这样防止其他线程或本线程越界破坏有用数据。
S205:对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值。
在一个示例性的实施例中,步骤S205的具体实施方式可以包括:获取外部越界检测区内的数据和内部越界检测区内的数据;对外部越界检测区内的数据和第一预设字符段进行校验处理,生成外部越界检测区内的检测值;对内部越界检测区内的数据和第二预设字符段进行校验处理,生成内部越界检测区内的检测值。可选的,第一预设字符段可以是对外部越界检测区赋的值,第二预设字符段可以是对内部越界检测区赋的值。第一预设字符段和第二预设字符段可以是相同的值也可以是不同的值,具体的,可以是magic值(如0Xab,0Xcd等)。上述校验处理具体可以是一种单向加密算法,一种不可逆的加密方式,也属于一种哈希算法。该算法在加密过程中,在得到明文后,经过加密算法得到密文,不需要使用密钥。具体的,可以采用消息摘要算法第5版(Message Digest Algorithm 5,MD5)来对数据进行加密处理,当原数据发生改变,哪怕只是修改1个字节,所得到的MD5值都有很大的区别。所以当内部越界检测区域和外部越界检测区域的存在数据时,将其与预设字符段作为原数据进行MD5加密处理,就可以得到相应的MD5,后续,将其与预设检测值进行比较,如果二者相同,则说明不存数据越界,二者不相同,则说明存在数据越界。
示例性的,在步骤S205之后,或者在S205执行的过程中,同时对第一预设字符段和第二预设字符段进行校验处理,具体的,对第一预设字符段进行校验处理,生成第一预设检测值;对第二预设字符段进行校验处理,生成第二预设检测值。需要说明的是,以上生成外部越界检测区内的检测值、第一预设检测值、内部越界检测区内的检测值和第二预设检测值的方式必须是相同的,如可以都是基于MD5算法生成的,也可以是基于其他的单向加密算法,如MD1,MD2,MD3等,当然,还可以采用其他校验方式得到上述检测值和预设检测值,如循环冗余校验(Cyclic Reduandancy Check,CRC)。但无论是哪种检测算法,都是需要基于对应区的数据和赋予的预设字符段来算出检测值和对应的预设检测值。
S207:若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。
示例性的,预设检测值包括第一预设检测值和第二预设检测值,具体计算第一预设检测值和第二预设检测值的方法详见上述描述。
在一个示例性的实施例中,步骤S207可以具体包括:若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值符合第二预设检测值,则生成第二检测结果;第二检测结果表征目标线程的堆栈存在外部数据越界情况;若外部越界检测区的检测值符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第三检测结果;第二检测结果表征目标线程的堆栈存在本堆栈数据越界情况;若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第四检测结果;第二检测结果表征目标线程的堆栈同时存在外部数据和本堆栈数据越界情况。延续上述示例,请继续参阅图4,以第一检测区为例,当B区的检测值与第二预设检测值不相同,则说明B区存在外溢数据,数据越界来源是本线程,当A区的检测值与第一预设检测值不相同,则说明A区存在外溢数据,数据越界来源是其他线程。
在一个示例性的实施例中,步骤S205之后,所述还包括:若外部越界检测区的检测值和内部越界检测区的检测值均符合预设检测值,则生成第五检测结果;第五检测结果表征目标线程对应的堆栈不存在数据越界情况。例如,当B区的检测值等于第二预设检测值,A区的检测值等于第一预设检测值,则说明A区和B区均不存在外溢数据,本堆栈不存数据越界的情况。
可以理解的是,对上述第一检测区和第二检测区中的内外部越界检测区的数据进行检测的过程不需要实时进行,可以是在特定的时间节点进行,例如可以是在线程切换时,或者其他某些比较重要的时间节点进行,还可以设置预设的检测时间节点,例如每隔5分钟或者10分钟进行一次检测。
示例性的,当检测到检测值与预设检测值不一致的情况,或者触发了操作系统的异常机制(即数据外溢到隔离区)时,还会生成异常提示信息,异常提示信息表征目标线程存在数据外溢情况。
由本申请实施例的上述技术方案可见,本申请实施例通过为目标线程分配堆栈,堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;在程序运行时,在某些位置检查这些上述内部越界检测区和外部越界检测区的检测值是否改变,以确定是谁越界导致的。
与上述几种实施例提供的堆栈数据越界检测方法相对应,本申请实施例还提供一种数据越界检测装置,由于本申请实施例提供的数据越界检测装置与上述几种实施例提供的堆栈数据越界检测方法相对应,因此前述堆栈数据越界检测方法的实施方式也适用于本实施例提供的数据越界检测装置,在本实施例中不再详细描述。
请参阅图5,其所示为本申请实施例提供的一种数据越界检测装置的结构示意图,该装置具有实现上述方法实施例中堆栈数据越界检测方法的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。如图5所示,该数据越界检测装置500可以包括:
确定模块510,用于确定待执行的目标线程;
分配模块530,用于为待执行的目标线程分配堆栈;堆栈包括数据存储区,以及分别位于数据存储区前后端的第一检测区和第二检测区;第一检测区和第二检测区均包括外部越界检测区、隔离区和内部越界检测区;内部越界检测区靠近数据存储区;隔离区用于阻挡外部越界检测区与内部越界检测区的数据之间的互相越界;
检测模块550,用于对外部越界检测区和内部越界检测区内的数据分别进行检测,得到外部越界检测区的检测值和内部越界检测区的检测值;
生成模块570,用于若外部越界检测区的检测值和内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;第一检测结果表征目标线程对应的堆栈存在数据越界情况。
在一个示例性的实施例中,隔离区位于内部越界检测区和外部越界检测区之间;检测模块,用于获取外部越界检测区内的数据和内部越界检测区内的数据;
对外部越界检测区内的数据和第一预设字符段进行校验处理,生成外部越界检测区内的检测值;
对内部越界检测区内的数据和第二预设字符段进行校验处理,生成内部越界检测区内的检测值。
在一个示例性的实施例中,预设检测值包括第一预设检测值和第二预设检测值;检测模块,用于对第一预设字符段进行校验处理,生成第一预设检测值;
对第二预设字符段进行校验处理,生成第二预设检测值。
在一个示例性的实施例中,生成模块,用于若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值符合第二预设检测值,则生成第二检测结果;第二检测结果表征目标线程的堆栈存在外部数据越界情况;
若外部越界检测区的检测值符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第三检测结果;第二检测结果表征目标线程的堆栈存在本堆栈数据越界情况;
若外部越界检测区的检测值不符合第一预设检测值,且内部越界检测区的检测值不符合第二预设检测值,则生成第四检测结果;第二检测结果表征目标线程的堆栈同时存在外部数据和本堆栈数据越界情况。
在一个示例性的实施例中,生成模块,用于若外部越界检测区的检测值和内部越界检测区的检测值均符合预设检测值,则生成第五检测结果;第五检测结果表征目标线程对应的堆栈不存在数据越界情况。
在一个示例性的实施例中,所述装置还包括:
设置模块,用于将隔离区对应的访问权限模式设置成只读模式。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请实施例提供了一种电子设备,该电子设备包括处理器和存储器,该存储器中存储有至少一条指令或者至少一段程序,该至少一条指令或者该至少一段程序由该处理器加载并执行以实现如上述方法实施例所提供的任意一种堆栈数据越界检测方法。
存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、功能所需的应用程序等;存储数据区可存储根据所述设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
本申请的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质可设置于电子设备之中以保存用于实现一种堆栈数据越界检测方法相关的至少一条指令或者至少一段程序,该至少一条指令或者该至少一段程序由该处理器加载并执行以实现上述方法实施例提供的任意一种堆栈数据越界检测方法。
本申请的实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述方法实施例提供的任意一种堆栈数据越界检测方法。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是:上述本申请实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种堆栈数据越界检测方法,其特征在于,所述方法包括:
确定待执行的目标线程;
为所述待执行的目标线程分配堆栈;所述堆栈包括数据存储区,以及分别位于所述数据存储区前后端的第一检测区和第二检测区;所述第一检测区和所述第二检测区均包括外部越界检测区、隔离区和内部越界检测区;所述内部越界检测区靠近所述数据存储区;所述隔离区用于阻挡所述外部越界检测区与所述内部越界检测区的数据之间的互相越界;
对所述外部越界检测区和所述内部越界检测区内的数据分别进行检测,得到所述外部越界检测区的检测值和所述内部越界检测区的检测值;
若所述外部越界检测区的检测值和所述内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;所述第一检测结果表征所述目标线程对应的堆栈存在数据越界情况。
2.根据权利要求1所述的方法,其特征在于,所述隔离区位于所述内部越界检测区和所述外部越界检测区之间;所述对所述外部越界检测区和所述内部越界检测区内的数据分别进行检测,得到所述外部越界检测区的检测值和所述内部越界检测区的检测值,包括:
获取所述外部越界检测区内的数据和所述内部越界检测区内的数据;
对所述外部越界检测区内的数据和第一预设字符段进行校验处理,生成外部越界检测区内的检测值;
对所述内部越界检测区内的数据和第二预设字符段进行校验处理,生成内部越界检测区内的检测值。
3.根据权利要求2所述的方法,其特征在于,所述预设检测值包括第一预设检测值和第二预设检测值;所述方法还包括:
对所述第一预设字符段进行校验处理,生成第一预设检测值;
对所述第二预设字符段进行校验处理,生成第二预设检测值。
4.根据权利要求3所述的方法,其特征在于,所述若所述外部越界检测区的检测值和所述内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果,包括:
若所述外部越界检测区的检测值不符合第一预设检测值,且所述内部越界检测区的检测值符合第二预设检测值,则生成第二检测结果;所述第二检测结果表征所述目标线程的堆栈存在外部数据越界情况;
若所述外部越界检测区的检测值符合第一预设检测值,且所述内部越界检测区的检测值不符合第二预设检测值,则生成第三检测结果;所述第二检测结果表征所述目标线程的堆栈存在本堆栈数据越界情况;
若所述外部越界检测区的检测值不符合第一预设检测值,且所述内部越界检测区的检测值不符合第二预设检测值,则生成第四检测结果;所述第二检测结果表征所述目标线程的堆栈同时存在外部数据和本堆栈数据越界情况。
5.根据权利要求1所述的方法,其特征在于,所述对所述外部越界检测区和所述内部越界检测区内的数据分别进行检测,得到所述外部越界检测区的检测值和所述内部越界检测区的检测值之后,还包括:
若所述外部越界检测区的检测值和所述内部越界检测区的检测值均符合预设检测值,则生成第五检测结果;所述第五检测结果表征所述目标线程对应的堆栈不存在数据越界情况。
6.根据权利要求1所述的方法,其特征在于,在为所述待执行的目标线程分配堆栈过程中,所述方法还包括:
将所述隔离区对应的访问权限模式设置成只读模式。
7.一种数据越界检测装置,其特征在于,所述装置包括:
确定模块,用于确定待执行的目标线程;
分配模块,用于为所述待执行的目标线程分配堆栈;所述堆栈包括数据存储区,以及分别位于所述数据存储区前后端的第一检测区和第二检测区;所述第一检测区和所述第二检测区均包括外部越界检测区、隔离区和内部越界检测区;所述内部越界检测区靠近所述数据存储区;所述隔离区用于阻挡所述外部越界检测区与所述内部越界检测区的数据之间的互相越界;
检测模块,用于对所述外部越界检测区和所述内部越界检测区内的数据分别进行检测,得到所述外部越界检测区的检测值和所述内部越界检测区的检测值;
生成模块,用于若所述外部越界检测区的检测值和所述内部越界检测区的检测值中的至少一个检测值不符合预设检测值,则生成第一检测结果;所述第一检测结果表征所述目标线程对应的堆栈存在数据越界情况。
8.一种电子设备,其特征在于,包括处理器和存储器,所述存储器中存储有至少一条指令或者至少一段程序,所述至少一条指令或者所述至少一段程序由所述处理器加载并执行以实现如权利要求1~6中任一项所述的堆栈数据越界检测方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令或者至少一段程序,所述至少一条指令或者所述至少一段程序由处理器加载并执行以实现如权利要求1~6任一项所述的堆栈数据越界检测方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现如权利要求1~6任一项所述的堆栈数据越界检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311844295.6A CN117806958A (zh) | 2023-12-28 | 2023-12-28 | 一种堆栈数据越界检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311844295.6A CN117806958A (zh) | 2023-12-28 | 2023-12-28 | 一种堆栈数据越界检测方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117806958A true CN117806958A (zh) | 2024-04-02 |
Family
ID=90432742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311844295.6A Pending CN117806958A (zh) | 2023-12-28 | 2023-12-28 | 一种堆栈数据越界检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117806958A (zh) |
-
2023
- 2023-12-28 CN CN202311844295.6A patent/CN117806958A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210240638A1 (en) | Mitigating security vulnerabilities with memory allocation markers in cryptographic computing systems | |
KR20170067740A (ko) | 운영 체제 공격으로부터 애플리케이션 기밀사항을 보호하는 기법 | |
JP2018506784A (ja) | 認証された制御スタック | |
EP3757860B1 (en) | Providing improved efficiency for metadata usages | |
CN109558372B (zh) | 用于安全处理器的设备和方法 | |
US20230129140A1 (en) | Multi-ring shared, traversable, and dynamic advanced database | |
CN110554911A (zh) | 内存访问与分配方法、存储控制器及系统 | |
US9158690B2 (en) | Performing zero-copy sends in a networked file system with cryptographic signing | |
CN113485716B (zh) | 防内存越界的程序编译方法及装置 | |
CN108985096B (zh) | 一种Android SQLite数据库安全增强、安全操作方法以及装置 | |
US8621606B1 (en) | Systems and methods for identifying external functions called by untrusted applications | |
CN106909509A (zh) | 一种虚拟机进程代码的无代理分页式度量系统和方法 | |
CN113672237A (zh) | 防内存越界的程序编译方法及装置 | |
CN107276998B (zh) | 一种基于OpenSSL的性能优化方法及装置 | |
US20160196119A1 (en) | Apparatus and Methods for Virtual and Interface Method Calls | |
US6785883B1 (en) | Software system for tracing data | |
CN117806958A (zh) | 一种堆栈数据越界检测方法、装置、电子设备及存储介质 | |
US20170075817A1 (en) | Memory corruption prevention system | |
CN111435323A (zh) | 信息的传输方法、装置、终端、服务器及存储介质 | |
CN106991058B (zh) | 预取文件处理方法及装置 | |
CN113961302A (zh) | 资源分配方法、装置、电子设备及存储介质 | |
US20190042116A1 (en) | Techniques for preventing memory corruption | |
US11604651B2 (en) | Methods and devices for hardware characterization of computing devices | |
US20240192872A1 (en) | Method and system for tracking memory usage | |
CN113569231B (zh) | 多进程的mpu保护方法、装置及电子设备 |
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 |