CN117591333A - 线程栈溢出检测方法、装置、系统、芯片和介质 - Google Patents
线程栈溢出检测方法、装置、系统、芯片和介质 Download PDFInfo
- Publication number
- CN117591333A CN117591333A CN202410070166.4A CN202410070166A CN117591333A CN 117591333 A CN117591333 A CN 117591333A CN 202410070166 A CN202410070166 A CN 202410070166A CN 117591333 A CN117591333 A CN 117591333A
- Authority
- CN
- China
- Prior art keywords
- stack space
- pmp
- thread
- target
- configuring
- 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.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 39
- 238000000034 method Methods 0.000 claims abstract description 53
- 230000008569 process Effects 0.000 claims abstract description 20
- 238000004590 computer program Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 238000003491 array Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000011897 real-time detection Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- COCAUCFPFHUGAA-MGNBDDOMSA-N n-[3-[(1s,7s)-5-amino-4-thia-6-azabicyclo[5.1.0]oct-5-en-7-yl]-4-fluorophenyl]-5-chloropyridine-2-carboxamide Chemical compound C=1C=C(F)C([C@@]23N=C(SCC[C@@H]2C3)N)=CC=1NC(=O)C1=CC=C(Cl)C=N1 COCAUCFPFHUGAA-MGNBDDOMSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
- G06F11/0763—Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0715—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/073—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种线程栈溢出检测方法、装置、系统、芯片和介质,所述方法包括:确定线程栈空间,并根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。采用该方法能够进行线程栈溢出的实时检测。
Description
技术领域
本发明涉及计算机软件技术领域,特别是涉及一种线程栈溢出检测方法、装置、系统、芯片和介质。
背景技术
在实时操作系统(RTOS,Real Time Operating System)的嵌入式系统中,每个线程都有独立的栈空间,在使用局部大变量或者函数调用链太深的情况下,可能会导致线程栈溢出,从而导致嵌入式系统出现问题,因此需要对线程栈的溢出进行检测。在相关技术中的线程栈溢出检测存在检测不及时、资源耗费大的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够实现所有线程栈溢出的及时检测、降低资源耗费的线程栈溢出检测方法、装置、系统、芯片和介质。
一种线程栈溢出检测方法,包括:
确定线程栈空间,并根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
一种线程栈溢出检测装置,包括:
确定模块,用于确定线程栈空间;
第一配置模块,用于根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
第二配置模块,用于在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
检测模块,用于在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
一种嵌入式系统,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述线程栈溢出检测方法的步骤。
一种芯片,包括上述嵌入式系统。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述线程栈溢出检测方法的步骤。
上述线程栈溢出检测方法、装置、电子设备和介质,通过利用PMP表项设置目标栈空间的访问权限为读写权限,设置线程栈空间中除目标栈空间之外的栈空间的访问权限为只读权限,在执行目标线程的过程中,根据PMP表项对目标栈空间的溢出进行检测,从而能够实现对目标栈空间溢出的实时检测,提高线程栈溢出检测的效率和实时性,并且配置的PMP表项仅涉及目标栈空间和目标栈空间之外的栈空间这两部分,能够避免耗费额外的内存和内存保护模块的管理单元。
附图说明
图1为一个实施例中线程栈溢出检测方法的流程示意图;
图2为一个实施例中线程栈空间的示意图;
图3为一个实施例中栈空间分配的流程示意图;
图4为一个实施例中配置PMP表项的流程示意图;
图5为一个实施例中检测目标栈空间溢出的流程示意图;
图6为一个实施例中线程栈溢出检测的交互示意图;
图7为一个实施例中线程栈溢出检测装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
RTOS的嵌入式系统中的每个线程都有独立的栈空间,用于保存线程的局部变量、函数调用栈等信息,如果线程的栈空间不足以容纳这些信息,就会发生栈溢出的情况。
在一般情况下,如果线程中定义了过多的局部大数组,这些数组会占用大量的栈空间,导致栈空间不足,发生栈溢出。如果线程中存在过多的函数调用,每次函数调用都会在栈上分配一部分空间,当函数调用链太深时,栈空间可能会耗尽,发生栈溢出。
栈溢出会篡改相关数据,如果没有及时检测到栈溢出,可能会导致系统崩溃。即使系统没有立刻崩溃,但在运行一段时间后经常会导致一些奇怪的问题,难以定位。基于此,在相关技术中,提供了以下几种线程栈溢出检测方法:
(1)在线程上下文切换时,内核会检测当前栈指针是否在有效栈空间内,如果栈指针不在有效栈空间内,说明发生了栈溢出,再通过栈指针与栈顶/栈底的比较,进一步确认发生上溢或下溢。
(2)在线程创建时,将线程栈顶的最后16个字节都赋值一个特殊的值,在进行栈溢出检测的时候,触发一次内核调度,然后内核检测栈顶的最后16个字节的内容,如果与预设的值不一致,表示可能发生了栈溢出。
(3)借助于处理器的内存保护模块(如物理内存保护(PMP,Physical MemoryProtection)),在创建线程的时候,栈空间可以分配多一些,例如多分配256字节(最小值取决于内存保护模块支持的最小保护单元大小),这样在内核换入某个线程的时候,使用PMP表项设置栈顶256个字节的空间为不可访问,如果这个线程运行时栈顶溢出就会立刻触发系统进入异常。
上述的方法(1)和方法(2)只能在上下文切换的时候进行栈溢出的检测,使得栈溢出的检测不及时,会导致问题隐藏。在存有局部大数据变量的情况下,可能会直接跳过栈顶预设区域,导致方法(2)和方法(3)的栈溢出检测失效。在实际应用中,一般RTOS系统中会同时存在多个线程,且内存保护模块支持的管理单元个数是有限的,方法(3)会浪费很多额外的内存和内存保护模块的单元。
基于此,本申请提供一种能够实现系统所有线程栈溢出的及时检测、减少资源浪费的线程栈溢出检测方法。
以下对本申请实施例的技术方案的实现细节进行详细描述。
在一个实施例中,如图1所示,提供了一种线程栈溢出检测方法,该线程栈溢出检测方法可包括以下步骤:
步骤S101,确定线程栈空间,并根据线程栈空间配置线程栈空间管理表。
这里,首先在物理内存中划分一段连续内存区作为系统的线程栈空间使用,其中,线程栈空间的大小可以根据系统的需求和线程的特性确定。
需要说明的是,分配的线程栈空间的起始地址和结束地址都是4字节的倍数,这种对齐方式能够提高系统的性能和效率。
在确定线程栈空间之后,会对线程栈空间进行分配,其中,线程栈空间支持将所有线程的栈空间连续存放。
定义一个全局线程栈空间管理表,根据线程栈空间的分配情况,配置线程栈空间管理表,其中,线程栈空间管理表是用于记录线程栈空间的分配情况,是用来管理线程栈空间的数据结构。其中,线程栈空间管理表的每个表项包括线程ID、线程名、栈起始地址、栈空间大小等信息,其中,线程ID用于唯一标识一个线程的标识符;栈起始地址记录了为线程分配的线程栈的起始地址,表示线程栈的开始位置;栈空间大小记录了线程栈空间的大小,表示线程栈的容量。
需要说明的是,线程栈空间管理表中每个表项的栈起始地址和栈空间大小都是从确定的线程栈空间中分配的。
在实际应用中,当系统创建线程时,可以使用线程栈空间管理表中的信息作为参数传递给RTOS的线程创建接口,这样可以实现对线程栈空间的统一管理,提高系统的可用性,具体地:
在一个实施例中,确定的线程栈空间可以划分为三部分,包括两个保护区(RedZone)和一个线程栈。如图2所示,图2示出了一种线程栈空间的示意图。将线程栈空间的首尾部分划分为保护区,在实际应用中,保护区的大小可以根据需求进行调节,并且保护区的起始地址和结束地址都是4字节的倍数,预留的两个保护区用于防止首尾线程栈的下溢和上溢。线程栈空间的中间部分,也即是除去首尾的保护区之外的栈空间,被划分为线程栈,用于分配给不同的线程使用。在实际应用中,为了能够有足够的栈空间分配给不同的线程,在确定线程栈空间的时候,需要从线程的最大并发数、线程的递归深度和线程的任务复杂度,对线程栈空间的大小进行估计。
在一个实施例中,如图3所示,图3示出了一种栈空间分配的流程示意图。
步骤S301,检查线程栈空间管理表中各表项的栈空间分配情况。
步骤S302,在线程栈空间管理表中存在栈空间分配重叠或越界的情况下,发出提示信息。
这里,线程栈空间中分配的栈空间应该是相互独立的,也就是需要确保每个栈空间不会重叠或越界,如果栈空间的分配存在重叠或越界的现象,会导致内存访问冲突、栈溢出、内存泄漏等问题,从而影响线程的正常运行。
在完成线程栈空间管理表的配置后,可以遍历线程栈空间管理表中的每个表项,检查每个表项对应的栈起始地址和栈大小,检查是否存在栈空间分配重叠的情况下,如果两个表项的栈起始地址和栈大小都有重叠部分,则可以认为存在栈空间分配重叠的情况,同时还需要检查是否存在栈空间分配越界的情况,如果某个表项的栈起始地址和栈大小超出了线程栈空间的范围,则认为存在栈空间分配越界的情况。在存在栈空间分配重叠或越界的情况下,可以发出相应的提示消息,重新对线程栈空间进行分配,以确保分配正确的栈空间。
步骤S102,在执行目标线程前,根据线程栈空间管理表,配置PMP表项。
这里,在目标线程执行之前,需要根据线程栈空间管理表,配置PMP表项。
需要说明的是,在目标线程执行之前是指在零初始化数据段(BSS,Block Startedby Symbol)清零后,操作系统(Operating System)调度前,根据线程栈空间管理表,配置PMP表项。其中,BSS段清零是指在程序启动时,将BSS段中的数据全部初始化为零,BSS段是一块用于存放未初始化全局变量和静态变量的内存区域,由于未初始化的变量在内存中并没有具体的数值,所以在程序启动时需要将这些变量的内存区域清零,以确保它们的初始值为零。OS调度指的是系统对任务和线程的调度管理,通过调度策略以确认执行目标线程。
在第五代精简指令集计算机(RISC-V,Reduced Instruction Set Computer-V)架构中,PMP是一种硬件机制,用于提供对物理内存的保护和隔离,PMP可以将物理内存划分为多个区域,并为每个区域分配不同的权限和访问控制规则,每个区域设置不同的优先级,编号越小优先级越高,基于此,通过配置PMP表项,可以实现对不同区域的内存访问进行限制。
在本实施例中,主要为线程栈空间的两个不同区域分配不同的权限和访问控制规则,这两个区域分别为分配给目标线程的目标栈空间和线程栈空间中除目标栈空间之外的其他栈空间。对于目标栈空间和线程栈空间中除目标栈空间之外的其他栈空间,需要根据线程栈空间管理表进行确定。具体地,线程栈空间管理表中记载了为不同线程分配的栈空间,从而在线程栈空间管理表中能够确定目标线程对应的目标栈空间。
在确定了目标栈空间之后,利用PMP表项,将目标栈空间的访问权限配置为读写权限,也就是能够对目标栈空间进行读取和写入操作,将线程栈空间中除目标栈空间之外的其他栈空间的访问权限配置为只读权限,也就是仅能进行读取操作,而不能进行写入操作。
需要说明的是,定义任意一块内存空间的访问权限需要使用两个PMP表项,在本实施例中需要对线程栈空间的两个不同区域的访问权限进行配置,从而仅需要四个PMP表项,不需要占用过多的内存和内存保护模块的管理空间,减少了线程栈溢出检测所需要的资源。
在一个实施例中,系统能够支持多个线程并发执行,但是由于处理器资源有限,每个时刻只能有一个线程在执行,基于此,系统需要调度不同的线程来运行,当一个目标线程为被换入的线程的情况下,也就是在执行完一个线程后,需要执行目标线程,在这种情况下,需要将被换出线程的上下存储至对应的栈空间中,示例地,当发生上下文切换,假如线程B被换出,线程Y被换入,需要将线程B的上下文保存到为线程B分配的栈空间中。其中,这里的上下文是指线程在执行过程中所需要的所有信息,包括程序计数器、寄存器值、堆栈指针以及其他与线程执行状态相关的信息。
在一个实施例中,如图4所示,图4示出了一种配置PMP表项的流程示意图。
步骤S401,分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项。
这里,在RISC-V架构中,硬件上最多可配置16个PMP表项,表项号从0开始计数。在实际应用中,定义任意一块内存访问空间的访问权限需要使用两个PMP表项,基于此,在本实施例中,分配四个序号连续([i,i+3],i≥0)的PMP表项,分别为第一PMP表项(对应的序号为i)、第二PMP表项(对应的序号为i+1)、第三PMP表项(对应的序号为i+2)和第四PMP表项(对应的序号为i+3),优先级依次递减。
步骤S402,配置第三PMP表项和第四PMP表项以设置线程栈空间的访问权限为只读权限。
这里,对第三PMP表项和第四PMP表项进行配置,使用第三PMP表项和第四PMP表项设置整个线程栈空间的访问权限为只读权限。
在实际应用中,每个PMP表项是由一个地址寄存器(pmpaddr,PMP AddressRegister)和配置寄存器(pmpcfg,PMP Configuration Register)组成的,其中,配置寄存器用于描述PMP表项的配置信息,包括访问权限(读、写、执行)、地址位数、粒度等;地址寄存器用于指定PMP表项所保护的物理内存区域的起始地址和边界。
下面对第三PMP表项和第四PMP表项的配置进行详细说明。
第三PMP表项和第四PMP表项需要将整个线程栈空间的访问权限设置为只读权限,表明在进行第三PMP表项和第四PMP表项的配置过程中,需要进行访问权限的配置和控制的物理地址范围的配置。
其中,只读权限是通过配置寄存器中的R字段和W字段配置的,R字段规定了对于符合地址匹配条件的内存访问,是否允许进行读取操作。W字段规定了对于符合地址匹配条件的内存访问,是否允许进行写入操作。这里,需要将第三PMP表项和第四PMP表项的R字段设置为1,从而可以得到pmpcfgi+2.R=1和pmpcfgi+3.R=1。
除了对第三PMP表项和第四PMP表项的访问权限进行设置之外,还需要设置第三PMP表项和第四PMP表项控制的物理地址范围。其中,第三PMP表项和第四PMP表项控制的物理地址范围是由配置寄存器中的A字段和地址寄存器共同决定的,其中,这里的A字段代表表项对应的地址匹配模式。
在本实施例中,第三PMP表项的pmpaddri+2设置为线程栈空间的边界起始低地址,第四PMP表项的pmpaddri+3设置为线程栈空间的边界起始高地址。
A字段可以配置为四种不同的地址匹配模式,下面对其中的自然对齐四字节模式(NA4,Naturally Aligned Four-byte regions)和上限模式(TOR,Top of Range)进行介绍。
在NA4模式下,若pmpaddr值为yyyy…yyy,此时控制的地址范围是从yyyy…yyyy开始的4个字节。其中,第三PMP表项的A字段设置为NA4。
在TOR模式下,该PMP表项控制的地址范围由前一个PMP表项的地址寄存器(值为pmpaddri-1)和该PMP表项的地址寄存器(值为pmpaddri)共同决定,其匹配任意满足pmpaddri-1≤y<pmpaddri的地址y。其中,第四PMP表项的A字段设置为TOR。
综上,可以得到第三PMP表项的pmpcfgi+2=0x11,pmpaddri+2设置为线程栈空间的边界起始低地址;第四PMP表项的pmpcfgi+3=0x09,pmpaddri+3设置为线程栈空间的边界起始高地址。
步骤S403,根据线程栈空间管理表记录的目标栈空间的分配情况,配置第一PMP表项和第二PMP表项以设置目标栈空间的访问权限为读写权限。
这里,从线程栈空间管理表中获取目标栈空间的起始高地址和起始低地址,起始高地址和起始低地址决定了第一PMP表项和第二PMP表项控制的地址范围,再根据目标栈空间的起始低地址、起始高地址,以及需要的访问权限,对第一PMP表项和第二PMP表项进行配置,使用第一PMP表项和第二PMP表项设置目标栈空间的访问权限为读写权限。
在配置PMP表项的过程中,不同PMP表项定义的内存空间可以重叠,表项号越小优先级越高,也就是说第一PMP表项和第二PMP表项的优先权高于第三PMP表项和第四PMP表项,这个优先级的限定允许更高序号的PMP表项全面覆盖整个内存映射,同时允许较低序号的PMP表项将权限应用于特定的区域。基于此,即使第三PMP表项和第四PMP表项配置了整个线程栈空间的访问权限是只读权限,但对于目标栈空间的访问权限依然遵循第一PMP表项和第二PMP表项的配置,也就是目标栈空间的访问权限是读写权限,而不是第三表项和第四表项规定的只读权限。
下面对第一PMP表项和第二PMP表项的配置进行详细说明。
第一PMP表项和第二PMP表项需要将目标栈空间的访问权限设置为读写权限,表明在进行第一PMP表项和第二PMP表项的配置过程中,需要进行访问权限的配置和控制的物理地址范围的配置。
同样地,需要对第一PMP表项和第二PMP表项的配置寄存器和地址寄存器进行配置。
其中,读写权限是通过配置寄存器中的R字段和W字段配置的,R字段规定了对于符合地址匹配条件的内存访问,是否允许进行读取操作。W字段规定了对于符合地址匹配条件的内存访问,是否允许进行写入操作。这里,需要将第一PMP表项和第二PMP表项的R字段和W字段分别设置为1,从而可以得到pmpcfgi.RW=1和pmpcfgi+1.RW=1。
除了对第一PMP表项和第二PMP表项的访问权限进行设置之外,还需要设置第一PMP表项和第二PMP表项控制的物理地址范围。其中,第一PMP表项和第二PMP表项控制的物理地址范围是由配置寄存器中的A字段和地址寄存器共同决定的,其中,这里的A字段代表表项对应的地址匹配模式。
在本实施例中,第一PMP表项的pmpaddri设置为目标栈空间的栈顶,第二PMP表项的pmpaddri+1设置为目标栈空间的栈底。
在本实施例中,第一PMP表项的地址匹配模式为NA4,即pmpcfgiA=NA4,第二PMP表项的地址匹配模式为TOR,即pmpcfgi+1A=TOR。
综上,可以得到第一PMP表项的pmpcfgi=0x13,pmpaddri设置为目标栈空间的栈顶;第二PMP表项的pmpcfgi+1=0x0B,pmpaddri+1设置为目标栈空间的栈底。
在一个实施例中,在对第一PMP表项和第二PMP表项进行配置之前,需要先禁能第一PMP表项和第二PMP表项。禁能PMP表项意味着该PMP表项将不再起作用,即对应的物理内存区域将不再受到PMP保护,再重新针对目标线程配置第一PMP表项和第二PMP表项,以避免在修改过程中发生意外的内存访问或保护级别的变化,确保了安全性和数据的一致性。
在一个实施例中,对第一PMP表项和第二PMP表项的禁能可以通过将PMP表项的配置寄存器的A字段设置为OFF实现,在配置寄存器的A字段设置为OFF的情况下,第一PMP表项和第二PMP表项将不匹配任何地址,也就不会对线程栈空间进行写入操作,保护了线程栈空间中存储的数据。
步骤S103,在执行目标线程的过程中,根据PMP表项,对目标栈空间进行溢出检测。
这里,按照PMP表项对不同区域的访问权限的配置,限定了仅有目标栈空间的访问权限是读写权限,也就是不能对线程栈空间中除目标栈空间之外的其他空间进行写操作,从而在执行目标线程的过程中,当目标栈空间存在溢出的情况下,都会立刻触发访问处理器写权限错误异常,从而实现线程栈溢出的检测。
在实际应用中,系统在多线程环境下,将会从一个线程切换到另一个线程执行,在切换至目标线程的时候,将从目标线程对应的目标栈空间恢复上下文后,开始执行目标线程。在上下文切换过程中,系统会将目标线程的上下文保存到目标栈空间中,当系统切换回目标线程时,会将之前保存的上下文恢复到处理器中,然后目标线程将从上次中断的地方继续执行。
需要说明的是,对于线程栈溢出的检测是贯穿目标线程的整个执行过程的,从而能够做到对线程栈溢出的实时检测。
在一个实施例中,如图5所示,图5示出了检测目标栈空间溢出的流程示意图。
步骤S501,根据PMP表项,确定目标地址对应的访问权限。
步骤S502,根据目标地址对应的访问权限,检测目标栈空间是否存在溢出。
这里,在目标线程的执行过程中,可以将目标线程的相关数据存入至目标栈空间的目标地址中,而在实际应用中,往往是对目标栈空间进行的写入操作回导致目标栈空间出现栈溢出,基于此,在需要向目标地址写入数据的情况下,在PMP表项中确定目标地址对应的访问权限,从而能够根据目标地址对应的访问权限,确定目标栈空间是否存在溢出。
在一个实施例中,PMP表项限定了仅目标栈空间的访问权限是读写权限,也就是不能对其他线程栈进行数据写入操作,在这种情况下,如果目标地址对应的访问权限为只读权限的情况下,也就是不能对目标地址进行写入操作,此时会触发处理器写访问错误异常,说明目标地址已经超出了目标栈空间的范围,从而可以判定目标栈空间存在溢出。
在一个实施例中,目标栈空间的溢出可以分为上溢和下溢,在确定目标栈空间存在溢出的情况下,还可以进一步根据目标地址在线程栈空间的位置,确定目标栈空间是存在下溢还是上溢。具体地,如果目标地址位于目标栈空间的栈顶之上,可以确定目标栈空间存在上溢,如果目标地址位于目标栈空间的栈底之下,可以确定目标栈空间存在下溢。
在本实施例中,进一步确定线程栈的上溢和下溢能够提供更详细的错误信息,进而快速地定位问题和修复问题,并可以实现更精确的异常处理。
在一个实施例中,PMP表项限定了仅目标栈空间的访问权限是读写权限,也就是不能对其他线程栈进行数据写入操作,在这种情况下,如果目标地址对应的访问权限为读写权限的情况下,说明目标地址位于目标栈空间的范围内,可以判定目标栈空间不存在溢出,从而能够将目标线程的数据写入至目标地址。
本申请还提供一个应用实施例,对于线程栈溢出检测方法的应用通过应用实施例进行说明。
首先,参照图2所示,划分一块大小25KB地址连续的内存作为线程栈空间,假设地址范围为0x80000000~0x800063FF,其中,线程栈空间的首尾大小512字节划分为保护区,线程栈空间的中间部分由5个线程共享。
分配4个序号连续(如0~3)的PMP表项,其中,PMP表项2和PMP表项3用于设置整个线程栈空间的访问权限为只读权限,表项0和表项1用于设置目标线程对应的目标栈空间的访问权限为读写权限。在系统初始化时,使用PMP表2和PMP表项3将整个线程栈空间的访问权限设置为只读,即pmpaddr2= 0x20000000且pmpcfg2= 0x11,pmpaddr3= 0x20001900且pmpcfg3= 0x09。需要说明的是,原则上,pmpaddr2= 0x80000000,pmpaddr3= 0x800063FF,但是在进行PMP表项配置的时候,该地址寄存器的取值需要遵循对应的编码格式,PMP表项支持的最小粒度是4字节,在基于RISC-V指令集架构的32位处理器架构中,地址寄存器存储34位物理地址的第2至第33位,因此需要将配置的地址右移2位,从而得到为地址寄存器配置编码后的值0x20000000和0x20001900。
如图6所示,图6示出了线程栈溢出检测的交互示意图。在线程栈溢出检测的过程中,涉及到处理器、线程控制块、线程和PMP表项之间的数据交互,其中,线程控制块通常由操作系统内核维护,用于描述和控制线程的执行情况,线程控制块中的信息可以用于实现线程的上下文切换、线程的调度和管理等功能。
步骤1,在发生上下文切换,假如线程B被换出,线程Y换入,将处理器上下文保存到线程B对应的线程栈,包括机器模式异常程序计数器(MEPC,Machine Exception ProgramCounter)、函数返回地址(RA,Return Address)、指针(SP,Stack Pointer)等,其中,MEPC用于记录线程B中断时的程序计数器的值,以便在其他线程执行完毕后能够返回到正确的位置继续执行。
步骤2,在处理器上下文保存到线程B对应的线程栈后,禁能PMP表项0和1,即pmpcfg0= pmpcfg1= 0x3。再分别设置PMP表项0和PMP表项1的地址为线程Y的栈顶和栈底,其中,pmpaddr0= (0x80000000+0x200)>>2 = 0x20000080,pmpaddr1= (0x80000000 + 0x200+ 0x1000)>>2 = 0x20000480,其中,0x80000000为线程栈空间的起始低地址,0x200表示保护区的大小,其中,(0x80000000+0x200)表示目标栈空间的栈底,0x1000表示目标栈空间的栈大小,(0x80000000 + 0x200 + 0x1000)表示目标栈空间的栈顶,>>2表示将结果右移两位。最后使能PMP表项0和表项1,即pmpcfg0= 0x13,pmpcfg1= 0x0B。
步骤3,在完成PMP表项0和表1的配置后,内核从线程Y的目标栈空间恢复处理器上下文,并开始线程Y的执行。
在执行线程Y的过程中,只有线程Y分配的目标栈空间为读写权限,而其他内存区都是只读权限,如果线程Y运行过程中出现栈溢出,就会触发处理器写访问错误异常,从而实现栈溢出检测,不需要为每个线程额外划分内存做检测区域,仅使用线程栈空间的首尾大小可调的保护区,节省了内存空间。
在上述实施例中,通过确定的线程栈空间进行线程栈空间管理表的配置,并根据线程栈空间管理表对PMP表项进行配置,配置的PMP表项能够限定目标栈空间的访问权限为读写权限,而其余栈空间的访问权限为只读权限,由于只需要为两个不同的区域进行PMP表项的配置,从而能够节省了内存资源,在目标线程的执行过程中,能够根据PMP表项为每个区域分配的访问权限,实时检测是否存在栈溢出,如果执行线程出现栈溢出,都会立刻触发访问处理器写权限错误异常,从而提高了栈溢出的检测效率。
在一个实施例中,提供一种线程栈溢出检测装置,参考图7所示,该线程栈溢出装置700可包括:确定模块701、第一配置模块702、第二配置模块703、检测模块704和存储模块705。
其中,确定模块701用于确定线程栈空间,第一配置模块702用于根据线程栈空间配置线程栈空间管理表;线程栈空间管理表用于记录线程栈空间的分配情况;第二配置模块703用于在执行目标线程前,根据线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置线程栈空间中除目标栈空间之外的栈空间的访问权限为只读权限;目标栈空间表征为目标线程分配的栈空间;检测模块704用于在执行目标线程的过程中,根据PMP表项,对目标栈空间进行溢出检测。
在一个实施例中,第二配置模块703具体用于,分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项;配置第三PMP表项和第四PMP表项以设置线程栈空间的访问权限为只读权限;根据线程栈空间管理表记录的目标栈空间的分配情况,配置第一PMP表项和第二PMP表项以设置目标栈空间的访问权限为读写权限。
在一个实施例中,第二配置模块703具体用于,将第三PMP表项的地址配置为线程栈空间管理表记录的线程栈空间的边界起始低地址,并将第四PMP表项的地址配置为线程栈空间管理表记录的线程栈空间的边界起始高地址;配置第三PMP表项的地址匹配模式为自然对齐四字节模式,并配置第三PMP表项的访问权限为只读权限;配置第四PMP表项的地址匹配模式为上限模式,并配置第四PMP表项的访问权限为只读权限。
在一个实施例中,第二配置模块703具体用于,将第一PMP表项的地址配置为线程栈空间管理表记录的目标栈空间的栈顶,并将第二PMP表项的地址配置为线程栈空间管理表记录的目标栈空间的栈底;配置第一PMP表项的地址匹配模式为自然对齐四字节模式,并配置第一PMP表项的访问权限为读写权限;配置第二PMP表项的地址匹配模式为上限模式,并配置第二PMP表项的访问权限为读写权限。
在一个实施例中,在根据线程栈空间管理表记录的目标栈空间的分配情况,配置第一PMP表项和第二PMP表项以设置目标栈空间的访问权限为读写权限之前,第二配置模块703具体用于,禁能第一PMP表项和第二PMP表项。
在一个实施例中,第二配置模块703具体用于,将第一PMP表项和第二PMP表项的地址匹配模式设置为关闭。
在一个实施例中,在根据所述线程栈空间管理表,配置PMP表项之前,存储模块705用于,在目标线程为被换入线程的情况下,将被换出线程的上下文存储至被换出线程分配的栈空间中。
在一个实施例中,在根据线程栈空间配置线程栈空间管理表之前,确定模块701具体用于,将线程栈空间的首尾部分划分为保护区,并将线程栈的中间部分划分为线程栈;其中,保护区用于防止线程栈空间中的首尾线程栈的下溢和上溢;线程栈用于分配给多个线程使用。
在一个实施例中,在根据线程栈空间配置线程栈空间管理表之后,检测模块704还用于,检查线程栈空间管理表中各表项的栈空间分配情况;在线程栈空间管理表中存在栈空间分配重叠或越界的情况下,发出提示信息。
在一个实施例中,检测模块704具体用于,根据PMP表项,确定目标地址对应的访问权限;目标地址表征请求在目标线程分配的线程中写入数据的栈地址;根据目标地址对应的访问权限,检测目标栈空间是否存在溢出。
在一个实施例中,检测模块704具体用于,在PMP表项规定所述目标地址的访问权限为只读权限的情况下,确定目标栈空间存在溢出。
在一个实施例中,检测模块704具体用于,根据目标地址在线程栈空间的位置,确定目标栈空间存在上溢或下溢。
在一个实施例中,检测模块704具体用于,在PMP表项规定目标地址的访问权限为读写权限的情况下,确定目标栈空间不存在溢出,并将目标线程的数据写入至目标地址。
关于线程栈溢出装置的具体限定可以参见上文中对于线程栈溢出方法的限定,在此不再赘述。上述线程栈溢出装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供一种嵌入式系统,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现一种线程栈溢出方法。
在一个实施例中,提供一种芯片,包括嵌入式系统。
在一个实施例中,提供了一种计算机存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种线程栈溢出方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (20)
1.一种线程栈溢出检测方法,其特征在于,包括:
确定线程栈空间,并根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
2.根据权利要求1所述的方法,其特征在于,根据所述线程栈空间管理表,配置PMP表项,包括:
分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项;
配置所述第三PMP表项和所述第四PMP表项以设置所述线程栈空间的访问权限为只读权限;
根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限。
3.根据权利要求2所述的方法,其特征在于,所述配置所述第三PMP表项和所述第四PMP表项以设置所述线程栈空间的访问权限为只读权限,包括:
将所述第三PMP表项的地址配置为所述线程栈空间管理表记录的所述线程栈空间的边界起始低地址,并将所述第四PMP表项的地址配置为所述线程栈空间管理表记录的所述线程栈空间的边界起始高地址;
配置所述第三PMP表项的地址匹配模式为自然对齐四字节模式,并配置所述第三PMP表项的访问权限为只读权限;
配置所述第四PMP表项的地址匹配模式为上限模式,并配置所述第四PMP表项的访问权限为只读权限。
4.根据权利要求2所述的方法,其特征在于,所述根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限,包括:
将所述第一PMP表项的地址配置为所述线程栈空间管理表记录的所述目标栈空间的栈顶,并将所述第二PMP表项的地址配置为所述线程栈空间管理表记录的所述目标栈空间的栈底;
配置所述第一PMP表项的地址匹配模式为自然对齐四字节模式,并配置所述第一PMP表项的访问权限为读写权限;
配置所述第二PMP表项的地址匹配模式为上限模式,并配置所述第二PMP表项的访问权限为读写权限。
5.根据权利要求4所述的方法,其特征在于,在所述根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限之前,所述方法包括:
禁能所述第一PMP表项和所述第二PMP表项。
6.根据权利要求5所述的方法,其特征在于,所述禁能所述第一PMP表项和所述第二PMP表项,包括:
将所述第一PMP表项和所述第二PMP表项的地址匹配模式设置为关闭。
7.根据权利要求1所述的方法,其特征在于,在所述根据所述线程栈空间管理表,配置PMP表项之前,所述方法包括:
在所述目标线程为被换入线程的情况下,将被换出线程的上下文存储至被换出线程分配的栈空间中。
8.根据权利要求1所述的方法,其特征在于,在根据线程栈空间配置线程栈空间管理表之前,所述方法包括:
将所述线程栈空间的首尾部分划分为保护区,并将所述线程栈的中间部分划分为线程栈;其中,所述保护区用于防止所述线程栈空间中的首尾线程栈的下溢和上溢;所述线程栈用于分配给多个线程使用。
9.根据权利要求1所述的方法,其特征在于,在根据线程栈空间配置线程栈空间管理表之后,所述方法还包括:
检查所述线程栈空间管理表中各表项的栈空间分配情况;
在所述线程栈空间管理表中存在栈空间分配重叠或越界的情况下,发出提示信息。
10.根据权利要求1所述的方法,其特征在于,所述根据所述PMP表项,对所述目标栈空间进行溢出检测,包括:
根据所述PMP表项,确定目标地址对应的访问权限;所述目标地址表征请求在所述目标线程分配的线程中写入数据的栈地址;
根据所述目标地址对应的访问权限,检测所述目标栈空间是否存在溢出。
11.根据权利要求10所述的方法,其特征在于,所述根据所述目标地址对应的访问权限,检测所述目标栈空间是否存在溢出,包括:
在所述PMP表项规定所述目标地址的访问权限为只读权限的情况下,确定所述目标栈空间存在溢出。
12.根据权利要求11所述的方法,其特征在于,所述在所述PMP表项规定所述目标地址的访问权限为只读权限的情况下,确定所述目标栈空间存在溢出,包括:
根据所述目标地址在所述线程栈空间的位置,确定所述目标栈空间存在上溢或下溢。
13.根据权利要求10所述的方法,其特征在于,所述根据所述目标地址对应的访问权限,检测所述目标栈空间是否存在溢出,包括:
在所述PMP表项规定所述目标地址的访问权限为读写权限的情况下,确定所述目标栈空间不存在溢出,并将所述目标线程的数据写入至所述目标地址。
14.一种线程栈溢出装置,其特征在于,包括:
确定模块,用于确定线程栈空间;
第一配置模块,用于根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
第二配置模块,用于在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
检测模块,用于在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
15.根据权利要求14所述的装置,其特征在于,所述第二配置模块在根据所述线程栈空间管理表,配置PMP表项时,具体用于:
分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项;
配置所述第三PMP表项和所述第四PMP表项以设置所述线程栈空间的访问权限为只读权限;
根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限。
16.一种嵌入式系统,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
确定线程栈空间,并根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
17.根据权利要求16所述的嵌入式系统,其特征在于,所述处理器执行所述计算机程序时还实现以下步骤:
分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项;
配置所述第三PMP表项和所述第四PMP表项以设置所述线程栈空间的访问权限为只读权限;
根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限。
18.一种芯片,其特征在于,包括根据权利要求16至17中任一项所述的嵌入式系统。
19.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
确定线程栈空间,并根据所述线程栈空间配置线程栈空间管理表;所述线程栈空间管理表用于记录所述线程栈空间的分配情况;
在执行目标线程前,根据所述线程栈空间管理表,配置PMP表项;其中,PMP表项用于设置目标栈空间的访问权限为读写权限,并设置所述线程栈空间中除所述目标栈空间之外的栈空间的访问权限为只读权限;所述目标栈空间表征为所述目标线程分配的栈空间;
在执行所述目标线程的过程中,根据所述PMP表项,对所述目标栈空间进行溢出检测。
20.根据权利要求19所述的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时还实现以下步骤:
分配序号连续的PMP表项,分别为第一PMP表项、第二PMP表项、第三PMP表项和第四PMP表项;
配置所述第三PMP表项和所述第四PMP表项以设置所述线程栈空间的访问权限为只读权限;
根据所述线程栈空间管理表记录的所述目标栈空间的分配情况,配置所述第一PMP表项和所述第二PMP表项以设置所述目标栈空间的访问权限为读写权限。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410070166.4A CN117591333B (zh) | 2024-01-17 | 2024-01-17 | 线程栈溢出检测方法、装置、系统、芯片和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410070166.4A CN117591333B (zh) | 2024-01-17 | 2024-01-17 | 线程栈溢出检测方法、装置、系统、芯片和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117591333A true CN117591333A (zh) | 2024-02-23 |
CN117591333B CN117591333B (zh) | 2024-06-18 |
Family
ID=89913669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410070166.4A Active CN117591333B (zh) | 2024-01-17 | 2024-01-17 | 线程栈溢出检测方法、装置、系统、芯片和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117591333B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266214A1 (en) * | 2006-05-12 | 2007-11-15 | Sharp Kabushiki Kaisha | Computer system having memory protection function |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
CN107643943A (zh) * | 2016-07-20 | 2018-01-30 | 大唐移动通信设备有限公司 | 一种任务栈的管理方法及装置 |
CN109144756A (zh) * | 2017-06-27 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 一种栈溢出处理的方法及装置 |
CN211236890U (zh) * | 2019-09-30 | 2020-08-11 | 深圳市汇顶科技股份有限公司 | 栈溢出的检测装置和电子设备 |
CN112182559A (zh) * | 2020-10-09 | 2021-01-05 | Oppo广东移动通信有限公司 | 堆栈溢出检测方法、装置、电子设备和存储介质 |
CN112783652A (zh) * | 2021-01-25 | 2021-05-11 | 珠海亿智电子科技有限公司 | 当前任务的运行状态获取方法、装置、设备及存储介质 |
CN114282206A (zh) * | 2020-09-28 | 2022-04-05 | 阿里巴巴集团控股有限公司 | 栈溢出检测方法、装置、嵌入式系统和存储介质 |
CN116643907A (zh) * | 2023-06-21 | 2023-08-25 | 上海伟世通汽车电子系统有限公司 | 嵌入式系统栈溢出保护方法、电子设备及可读存储介质 |
CN117234729A (zh) * | 2023-09-25 | 2023-12-15 | 镁佳(北京)科技有限公司 | 动态内存保护方法、装置、计算机设备及存储介质 |
-
2024
- 2024-01-17 CN CN202410070166.4A patent/CN117591333B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070266214A1 (en) * | 2006-05-12 | 2007-11-15 | Sharp Kabushiki Kaisha | Computer system having memory protection function |
CN101183331A (zh) * | 2007-12-12 | 2008-05-21 | 上海华为技术有限公司 | 一种任务栈溢出检测方法、装置及计算机系统 |
CN107643943A (zh) * | 2016-07-20 | 2018-01-30 | 大唐移动通信设备有限公司 | 一种任务栈的管理方法及装置 |
CN109144756A (zh) * | 2017-06-27 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 一种栈溢出处理的方法及装置 |
CN211236890U (zh) * | 2019-09-30 | 2020-08-11 | 深圳市汇顶科技股份有限公司 | 栈溢出的检测装置和电子设备 |
CN114282206A (zh) * | 2020-09-28 | 2022-04-05 | 阿里巴巴集团控股有限公司 | 栈溢出检测方法、装置、嵌入式系统和存储介质 |
CN112182559A (zh) * | 2020-10-09 | 2021-01-05 | Oppo广东移动通信有限公司 | 堆栈溢出检测方法、装置、电子设备和存储介质 |
CN112783652A (zh) * | 2021-01-25 | 2021-05-11 | 珠海亿智电子科技有限公司 | 当前任务的运行状态获取方法、装置、设备及存储介质 |
CN116643907A (zh) * | 2023-06-21 | 2023-08-25 | 上海伟世通汽车电子系统有限公司 | 嵌入式系统栈溢出保护方法、电子设备及可读存储介质 |
CN117234729A (zh) * | 2023-09-25 | 2023-12-15 | 镁佳(北京)科技有限公司 | 动态内存保护方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117591333B (zh) | 2024-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9122575B2 (en) | Processing system having memory partitioning | |
KR100306456B1 (ko) | 오퍼레이팅시스템의재기동방법 | |
JP5254601B2 (ja) | 資源回復するための方法、情報処理システムおよびコンピュータ・プログラム | |
WO2015169145A1 (zh) | 内存管理方法和设备 | |
US9396353B2 (en) | Data allocation among devices with different data rates | |
JP4464378B2 (ja) | 同一データを纏める事で格納領域を節約する計算機システム、ストレージシステム及びそれらの制御方法 | |
US7673105B2 (en) | Managing memory pages | |
JP5044387B2 (ja) | 情報処理装置及びそのスタックポインタ更新方法 | |
US8904400B2 (en) | Processing system having a partitioning component for resource partitioning | |
CN101183331B (zh) | 一种任务栈溢出检测方法、装置及计算机系统 | |
EP1734444A2 (en) | Exchanging data between a guest operating system and a control operating system via memory mapped I/O | |
US5432929A (en) | Storage subsystem having a modifiable key-lock | |
CN105550029A (zh) | 一种进程调度方法及装置 | |
CN115617542A (zh) | 内存交换方法、装置、计算机设备及存储介质 | |
CN115629882A (zh) | 多进程中的内存的管理方法 | |
JP3600313B2 (ja) | アクセス制御システム | |
US20080168239A1 (en) | Architecture support of memory access coloring | |
CN117591333B (zh) | 线程栈溢出检测方法、装置、系统、芯片和介质 | |
CN106250328B (zh) | 存储器保护单元、存储器管理单元和微控制器 | |
JP2022014679A (ja) | 電子制御装置 | |
EP2672390B1 (en) | Memory controller | |
US20150269092A1 (en) | Information processing device and shared memory management method | |
WO2020179344A1 (ja) | 車両制御装置 | |
CN114490054A (zh) | 上下文切换方法、装置、加速单元、电子设备和片上系统 | |
WO2019044226A1 (ja) | アクセス制御装置 |
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 |