CN113672424A - 修复异常任务的方法及装置 - Google Patents

修复异常任务的方法及装置 Download PDF

Info

Publication number
CN113672424A
CN113672424A CN202110957074.4A CN202110957074A CN113672424A CN 113672424 A CN113672424 A CN 113672424A CN 202110957074 A CN202110957074 A CN 202110957074A CN 113672424 A CN113672424 A CN 113672424A
Authority
CN
China
Prior art keywords
task
function
stack
abnormal
determining
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
Application number
CN202110957074.4A
Other languages
English (en)
Other versions
CN113672424B (zh
Inventor
刘宇佳
黄琳
简云定
伏伟
曹鸿健
张婉桥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202110957074.4A priority Critical patent/CN113672424B/zh
Publication of CN113672424A publication Critical patent/CN113672424A/zh
Application granted granted Critical
Publication of CN113672424B publication Critical patent/CN113672424B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error 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/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error 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/0706Error 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/0715Error 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本说明书实施例提供了修复异常任务的方法及装置。该方法通过搭载有实时操作系统RTOS的设备执行,该设备中配置有异常处理函数和调试组件,该方法包括:响应于确定该设备当前执行的任务将要从第一任务切换到第二任务,检测第一任务是否发生缓冲区溢出;若检测结果为是,则将第一任务确定为异常任务;利用异常处理函数调用调试组件,使得调试组件将异常任务的第一任务函数替换为目标函数。

Description

修复异常任务的方法及装置
技术领域
本说明书实施例涉及计算机技术领域,具体地,涉及修复异常任务的方法及装置。
背景技术
RTOS(Real Time Operating System,实时操作系统)一般是指具有如下功能或特点的操作系统,即,当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行。
RTOS相比其他操作系统更加注重实时与轻量,但在设计时并未考虑安全问题。近年来随着搭载有RTOS的设备(可简称为RTOS设备)的数量增多,安全漏洞的威胁也被放大。
因此,迫切需要一种合理、可靠的方案,可以提升RTOS设备的安全性。
发明内容
本说明书实施例提供了修复异常任务的方法及装置,能有效提升RTOS设备的安全性。
第一方面,本说明书实施例提供了修复异常任务的方法,通过搭载有实时操作系统RTOS的设备执行,所述设备中配置有异常处理函数和调试组件,所述方法包括:响应于确定所述设备当前执行的任务将要从第一任务切换到第二任务,检测所述第一任务是否发生缓冲区溢出;若检测结果为是,则将所述第一任务确定为异常任务;利用所述异常处理函数调用所述调试组件,使得所述调试组件将所述异常任务的第一任务函数替换为目标函数。
在一些实施例中,在所述将所述异常任务的第一任务函数替换为目标函数之前,还包括:从预设的函数集合中选取出一个函数作为目标函数。
在一些实施例中,所述函数集合包括无限循环函数和/或与所述异常任务有关的第二任务函数。
在一些实施例中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:当所述函数集合包括所述无限循环函数时,选取所述无限循环函数作为目标函数。
在一些实施例中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:当所述函数集合包括所述第二任务函数时,若所述异常任务包括多个子任务,并且所述第二任务函数是所述多个子任务之一的任务函数,则选取所述第二任务函数作为目标函数。
在一些实施例中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:当所述函数集合包括所述无限循环函数和所述第二任务函数时,确定所述第一任务函数是否与所述第二任务函数相同;若确定结果为是,则选取所述无限循环函数作为目标函数;若确定结果为否,则选取所述第二任务函数作为目标函数。
在一些实施例中,所述设备包括ARM处理器,所述ARM处理器包括所述调试组件和闪存地址重载及断点单元FPB,所述FPB包括重映射函数;以及所述将所述异常任务的第一任务函数替换为目标函数,包括:利用所述重映射函数,将所述第一任务函数重映射为所述目标函数。
在一些实施例中,在将所述无限循环函数作为目标函数的情况下,在所述将所述异常任务的第一任务函数替换为目标函数之后,还包括:向所述设备所属的用户呈现用于进行异常提示的提示信息。
在一些实施例中,在将所述无限循环函数作为目标函数的情况下,在所述将所述异常任务的第一任务函数替换为目标函数之后,还包括:响应于检测到所述第二任务执行完成,控制所述设备重启。
在一些实施例中,所述异常处理函数包括所述RTOS自带的HOOK函数,或者开发人员编写的中断处理函数。
在一些实施例中,所述检测所述第一任务是否发生缓冲区溢出,包括:检测所述第一任务是否发生栈溢出,和/或检测所述第一任务是否发生堆溢出。
在一些实施例中,所述检测所述第一任务是否发生栈溢出,包括:根据所述第一任务的栈空间的生长方向,修改所述栈空间的栈顶指针;确定修改后的所述栈顶指针指向的地址是否包含在所述栈空间的地址范围内;若确定结果为是,则确定所述第一任务未发生栈溢出;若确定结果为否,则确定所述第一任务发生栈溢出。
在一些实施例中,所述生长方向为从高地址向低地址生长;以及所述修改所述栈空间的栈顶指针,包括:将所述栈顶指针递减1。
在一些实施例中,所述检测所述第一任务是否发生栈溢出,包括:确定栈空间栈底第一预设字节的内容是否与第一标记信息相同;其中,所述第一标记信息是所述栈空间进行初始化时,针对栈底第一预设字节的内容进行初始化的信息;
若确定结果为是,则确定所述第一任务未发生栈溢出;若确定结果为否,则确定所述第一任务发生栈溢出。
在一些实施例中,所述检测所述第一任务是否发生堆溢出,包括:确定堆空间底部第二预设字节的内容是否与第二标记信息相同;其中,所述第二标记信息是所述第一任务的堆空间进行初始化时,针对底部第二预设字节的内容进行初始化的信息;若确定结果为是,则确定所述第一任务未发生堆溢出;若确定结果为否,则确定所述第一任务发生堆溢出。
第二方面,本说明书实施例提供了一种修复异常任务的装置,应用于搭载有实时操作系统RTOS的设备,所述设备中配置有异常处理函数和调试组件,所述装置包括:检测单元,被配置成响应于确定所述设备当前执行的任务将要从第一任务切换到第二任务,检测所述第一任务是否发生缓冲区溢出;确定单元,被配置成若所述检测单元的检测结果为是,则将所述第一任务确定为异常任务;修复单元,被配置成利用所述异常处理函数调用所述调试组件,使得所述调试组件将所述异常任务的第一任务函数替换为目标函数。
第三方面,本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
第四方面,本说明书实施例提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现如第一方面中任一实现方式描述的方法。
第五方面,本说明书实施例提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
本说明书的上述实施例提供的修复异常任务的方法及装置,可以在确定RTOS设备当前执行的任务将要从第一任务切换到第二任务时,检测第一任务是否发生缓冲区溢出,并在检测到第一任务发生缓冲区溢出时,将第一任务确定为异常任务,以及利用异常处理函数调用调试组件,使得调试组件将该异常任务的第一任务函数替换为目标函数。由此,可以在无须人为干预的情况下在线修复异常任务,使得RTOS设备继续执行能正常执行的任务(如第二任务等),避免RTOS设备一旦检测到缓冲区溢出就直接崩溃,整机重启。这样,能有效提高RTOS设备的安全性。
附图说明
为了更清楚地说明本说明书披露的多个实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书披露的多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本说明书的一些实施例可以应用于其中的一个示例性系统架构图;
图2是修复异常任务的方法的一个实施例的流程图;
图3是异常任务修复过程的一个示意图;
图4是异常任务修复过程的一个示意图;
图5是修复异常任务的装置的一个结构示意图。
具体实施方式
下面结合附图和实施例对本说明书作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。在不冲突的情况下,本说明书中的实施例及实施例中的特征可以相互组合。另外,本说明书中的“第一”、“第二”等词,仅用于信息区分,不起任何限定作用。
如前所述,RTOS相比其他操作系统更加注重实时与轻量,但在设计时并未考虑安全问题。近年来随着RTOS设备的数量增多,安全漏洞的威胁也被放大。
基于此,本说明书的一些实施例提供了修复异常任务的方法,通过该方法,能有效提升RTOS设备的安全性。具体地,图1示出了适用于这些实施例的示例性系统架构图。
如图1所示,系统架构可以包括RTOS设备100。在一些实施例中,RTOS设备100可以是嵌入式设备。在一些实施例中,RTOS设备100可以是IOT(Internet of Things,物联网)设备。
RTOS设备100可以配置有异常处理函数和调试组件。异常处理函数可以用于进行异常处理,通常在识别出异常任务时调用。调试组件可以用于对RTOS设备100进行调试,并且能供异常处理函数调用。需要指出,调试组件能使开发人员控制代码的执行流程、修改变量值等。另外,调试组件可以包含由开发人员编写的针对异常任务的修复逻辑。
实践中,RTOS设备100可以用于进行多任务处理,其在同一时刻处理多个任务中的一个任务。通常,RTOS设备100中配置有调度器,调度器可以根据设定的调度策略,对多个任务进行调度。其中,调度策略一般是调度器用来决定哪个任务在哪个时间点执行的算法。例如,该多个任务包括如图1中示出的任务A和任务B,RTOS设备100当前执行的任务为任务A,当任务B的执行时间到来时,调度器可以决定将当前执行的任务从任务A切换到任务B。
目前,攻击者可以通过任务的缓冲区溢出来实现设备崩溃、远程任意代码执行等。另外,如果任务的缓冲区空间较小,也容易导致任务发生缓冲区溢出。为了确保RTOS设备100的安全性,在当前执行的任务将要从任务A切换到任务B时,RTOS设备100可以通过检测任务A是否发生缓冲区溢出,来识别任务A是否为异常任务。在识别出任务A为异常任务时,RTOS设备100可以利用异常处理函数调用调试组件,使得调试组件对该异常任务进行修复。
具体地,RTOS设备100例如可以包括用于控制异常任务修复的组件(如图1中示出的修复处理组件)、装置或单元等。以修复处理组件为例,如图1所示,RTOS设备100可以利用修复处理组件对任务A进行异常任务识别。当识别出任务A为异常任务时,修复处理组件可以调用异常处理函数,其中,异常处理函数的输入参数可以包括该异常任务的任务信息。该任务信息例如可以包括但不限于该异常任务的任务句柄、任务标识和/或任务名称。接着,异常处理函数可以调用调试组件,并将该任务信息作为该调试组件的输入参数,从而使得该调试组件根据该任务信息定位到该异常任务,并将该异常任务的任务函数替换为目标函数。
之后,RTOS设备100可以继续将当前执行的任务切换到任务B,使得任务B正常执行。这样,可以避免RTOS设备100一旦检测到缓冲区溢出就直接崩溃,整机重启。由此,能有效提高RTOS设备100的安全性。
下面,结合具体的实施例,描述上述方法的具体实施步骤。需要说明,为了便于区分不同任务的任务函数,下文中将异常任务的任务函数称为第一任务函数。
参看图2,其示出了修复异常任务的方法的一个实施例的流程200。该方法的执行主体可以为搭载有RTOS的设备(例如图1所示的RTOS设备100),RTOS,或者如前所述的修复处理组件等,在此不做具体限定。该方法包括以下步骤:
步骤202,响应于确定设备当前执行的任务将要从第一任务切换到第二任务,检测第一任务是否发生缓冲区溢出;
步骤204,若检测结果为是,则将第一任务确定为异常任务;
步骤208,利用异常处理函数调用调试组件,使得调试组件将异常任务的第一任务函数替换为目标函数。
下面,以RTOS设备为执行主体为例,对以上各步骤做进一步说明。
在步骤202中,RTOS设备可以响应于确定当前执行的任务将要从第一任务(如图1中示出的任务A)切换到第二任务(如图1中示出的任务B),检测第一任务是否发生缓冲区溢出。
实践中,RTOS设备中的调度器在决定将当前执行的任务从第一任务切换到第二任务时,可以向RTOS设备发送切换提示信息,RTOS设备可以根据该切换提示信息,获知当前执行的任务将要从第一任务切换到第二任务。可选地,RTOS设备中可以配置有起切换提示作用的第一参数,调度器可以根据第一任务和第二任务更新第一参数的参数值。RTOS设备可以通过读取第一参数的参数值,获知当前执行的任务将要从第一任务切换到第二任务。
第一任务的缓冲区可以包括栈空间(可称为任务栈,或简称为栈)和/或堆空间(可简称为堆)。实践中,堆和栈均是数据结构。堆用于存放任务函数中的对象,并且堆的生长方向为从低地址向高地址生长。栈用于存放任务函数的参数值、局部变量的值、返回地址等。栈的生长方向可以为从高地址向低地址生长,也可以为从低地址向高地址生长。目前,多数栈的生长方向为从高地址向低地址生长。另外,栈具有只能从栈的顶端存取数据,以及数据的存取符合后进先出的原则等特性。
基于以上对堆和栈的描述,检测第一任务是否发生缓冲区溢出可以包括,检测第一任务是否发生栈溢出,和/或检测第一任务是否发生堆溢出。具体地,对于第一任务的栈空间和堆空间,RTOS设备可以先检测该栈空间和该堆空间中的任意一者是否发生溢出。若检测到该者发生溢出,则可以执行步骤204;否则,可以接着检测另一者是否发生溢出。若检测到该另一者发生溢出,则可以执行步骤204;否则,可以结束对上述流程200的执行。
在检测第一任务是否发生栈溢出时,RTOS设备可以采用各种检测方法。
作为一种栈溢出检测实现方式,可以根据第一任务的栈空间的生长方向,修改栈空间的栈顶指针。而后,确定修改后的栈顶指针指向的地址是否包含在栈空间的地址范围内。若确定结果为是,则确定第一任务未发生栈溢出。若确定结果为否,则确定第一任务发生栈溢出。其中,当栈空间的生长方向为从高地址向低地址生长时,可以将栈顶指针递减1。当栈空间的生长方向为从低地址向高地址生长时,可以将栈顶指针递增1。
作为另一种栈溢出检测实现方式,可以确定栈空间栈底第一预设字节的内容是否与第一标记信息相同。其中,第一标记信息是栈空间进行初始化时,针对栈底第一预设字节的内容进行初始化的信息。若确定结果为是,则确定第一任务未发生栈溢出。若确定结果为否,则意味着栈空间中原有的第一标记信息已被覆盖,从而可确定第一任务发生栈溢出。需要指出,第一预设字节的长度,以及第一标记信息的具体内容,可根据实际需求设定,在此不做具体限定。
作为又一种栈溢出检测实现方式,为了确保栈溢出检测结果的准确度,可以结合前两种栈溢出检测实现方式,检测第一任务是否发生栈溢出。
例如,可以先采用第一种栈溢出检测实现方式,确定修改后的栈顶指针指向的地址是否包含在栈空间的地址范围内。若确定结果为否,则确定第一任务发生栈溢出。若确定结果为是,则接着采用第二种栈溢出检测实现方式,确定栈空间栈底第一预设字节的内容是否与第一标记信息相同;若二者相同,则确定第一任务未发生栈溢出;若二者不相同,则确定第一任务发生栈溢出。
再例如,可以先采用第二种栈溢出检测实现方式,确定栈空间栈底第一预设字节的内容是否与第一标记信息相同。若确定结果为否,则确定第一任务发生栈溢出。若确定结果为是,则接着采用第一种栈溢出检测实现方式,确定修改后的栈顶指针指向的地址是否包含在栈空间的地址范围内;若该指向的地址包含在该地址范围内,则确定第一任务未发生栈溢出;若该指向的地址未包含在该地址范围内,则确定第一任务发生栈溢出。
在检测第一任务是否发生堆溢出时,RTOS设备也可以采用各种检测方法。
作为一种堆溢出检测实现方式,可以确定堆空间底部第二预设字节的内容是否与第二标记信息相同。其中,第二标记信息是第一任务的堆空间进行初始化时,针对底部第二预设字节的内容进行初始化的信息。若确定结果为是,则确定第一任务未发生堆溢出。若确定结果为否,则意味着堆空间中原有的第二标记信息已被覆盖,从而可确定第一任务发生堆溢出。需要指出,第二预设字节的长度,以及第二标记信息的具体内容,可以根据实际需求设定,在此不做具体限定。
作为另一种堆溢出检测实现方式,可以确定堆空间中第一位置处的内容是否与第三标记信息相同。其中,第一位置原有的内容为第三标记信息,堆空间中第二位置原有的内容为指向其他函数的指针;第一位置和第二位置相邻,且第一位置的地址高于第二位置的地址。若确定结果为是,则确定第一任务未发生堆溢出。若确定结果为否,则意味着第一位置原有的第三标记信息已被覆盖,从而可确定第一任务发生堆溢出。需要指出,第三标记信息的具体内容,可以根据实际需求设定,在此不做具体限定。
应该理解,以上描述的栈溢出检测实现方式和堆溢出检测实现方式,仅是示例性的实现方式,实际应用中还可以采用其他检测方式,在此不做具体限定。
当在步骤202中检测到第一任务发生缓冲区溢出时,例如具体检测到第一任务发生栈溢出或堆溢出,可以接着执行步骤204,将第一任务确定为异常任务。
接着,在步骤208中,RTOS设备可以利用异常处理函数调用调试组件,使得调试组件将异常任务的第一任务函数替换为目标函数。
作为一个示例,目标函数可以是预先设定的用于替换各种任务函数的通用函数。例如,目标函数可以为无限循环函数。其中,无限循环函数包括但不限于while(1)。
需要说明,异常处理函数可以是RTOS自带的HOOK函数(也可称为钩子函数),或者开发人员编写的中断处理函数,在此不做具体限定。以现有的FreeRTOS为例,FreeRTOS自带的用于堆栈溢出处理的HOOK函数,一般为vApplicationStackOverflowHook()。
在一些实施例中,调试组件可以直接将第一任务函数替换为目标函数。
在一些实施例中,RTOS设备可以包括ARM处理器,ARM处理器可以包括调试组件和FPB(Flash Patch Breakpoint,闪存地址重载及断点单元),FPB可以包括重映射函数。该重映射函数一般为remap()。调试组件可以利用重映射函数,将第一任务函数重映射为目标函数。
在一些实施例中,目标函数也可以是RTOS设备针对第一任务函数选定的。具体地,在步骤208之前,还可以包括:步骤206,从预设的函数集合中选取出一个函数作为目标函数。
其中,函数集合可以包括无限循环函数和/或与异常任务有关的第二任务函数。其中,当异常任务包括多个子任务时,第二任务函数可以是该多个子任务之一的任务函数。作为示例,假设异常任务用于处理多种报文,该多种报文的报文类别包括M1、M2、M3,异常任务的多个子任务分别为用于处理M1类别的报文的子任务1,用于处理M2类别的报文的子任务2,以及用于处理M3类别的报文的子任务3,第二任务函数可以是子任务1、子任务2和子任务3这三者中任一者的任务函数。
作为一种实现方式,当函数集合包括无限循环函数时,可以选取无限循环函数作为目标函数。
作为另一种实现方式,当函数集合包括第二任务函数时,若异常任务包括多个子任务,并且第二任务函数是该多个子任务之一的任务函数,则可以选取第二任务函数作为目标函数。
作为又一种实现方式,当函数集合包括无限循环函数和第二任务函数时,确定第一任务函数是否与第二任务函数相同。若确定结果为是,则意味着第一任务函数实际上是替换后的任务函数,例如在此之前已利用第二任务函数对第一任务函数对应的原始任务函数进行替换,从而可选取无限循环函数作为目标函数。若确定结果为否,则选取第二任务函数作为目标函数。
需要说明,基于最后一种实现方式选定目标函数,可以实现如图3示出的异常任务修复过程。如图3所示,在异常任务包括多个子任务时,可以将异常任务的任务函数替换为该多个子任务之一的任务函数。这样,能对异常任务进行降级,从而改变RTOS设备的功能。后续,若替换后的任务函数所属的任务再次被判定为异常任务,则可以将该替换后的任务函数替换为无限循环函数。
图2对应的实施例提供的修复异常任务的方法,可以将发生缓冲区溢出的任务确定为异常任务,并利用异常处理函数调用调试组件,使得调试组件将该异常任务的任务函数替换为目标函数。由此,可以在无须人为干预的情况下在线修复异常任务,使得RTOS设备继续执行能正常执行的任务,避免RTOS设备一旦检测到缓冲区溢出就直接崩溃,整机重启。这样,能有效提高RTOS设备的安全性。
实践中,在步骤208执行完成后,调度器一般会挂起目标函数,并将当前执行的任务切换到第二任务,从而使得第二任务正常执行。
在一些实施例中,在目标函数为无限循环函数的情况下,在将第一任务函数替换为无限循环函数后,RTOS设备可以向用户呈现用于进行异常提示的提示信息,和/或响应于检测到第二任务执行完成,控制设备重启。
具体地,在目标函数为无限循环函数的情况下,RTOS设备可以执行如图4示出的异常任务修复过程。如图4所示,在RTOS设备如标号402所示,将第一任务函数替换为无限循环函数后,可以接着如标号404所示,向用户呈现用于进行异常提示的提示信息。然后,可以如标号406所示,响应于检测到第二任务执行完成,控制设备重启。
采用图4示出的异常任务修复过程,不仅可以向用户进行异常提示,而且当第二任务不方便中断时,例如第二任务正在上传/下载大文件数据等,能进行应急,至少确保第二任务能正常执行完成。
需要说明,对提示信息的呈现,以及对设备重启的控制,可以具体由调试组件执行,在此不做具体限定。
进一步参考图5,本说明书提供了一种修复异常任务的装置的一个实施例,该装置可以应用于搭载有RTOS的设备(例如图1所示的RTOS设备100),或者RTOS等。
如图5所示,本实施例的修复异常任务的装置500包括:检测单元501、确定单元502和修复单元503。其中,检测单元501被配置成响应于确定设备当前执行的任务将要从第一任务切换到第二任务,检测第一任务是否发生缓冲区溢出;确定单元502被配置成若检测单元501的检测结果为是,则将第一任务确定为异常任务;修复单元503被配置成利用异常处理函数调用调试组件,使得调试组件将异常任务的第一任务函数替换为目标函数。
在一些实施例中,上述装置500还可以包括:选取单元(图中未示出),被配置成从预设的函数集合中选取出一个函数作为目标函数。
在一些实施例中,函数集合包括无限循环函数和/或与异常任务有关的第二任务函数。
在一些实施例中,选取单元可以进一步被配置成:当函数集合包括无限循环函数时,选取无限循环函数作为目标函数。
在一些实施例中,选取单元可以进一步被配置成:当函数集合包括第二任务函数时,若异常任务包括多个子任务,并且第二任务函数是该多个子任务之一的任务函数,则选取第二任务函数作为目标函数。
在一些实施例中,选取单元可以进一步被配置成:当函数集合包括无限循环函数和第二任务函数时,确定第一任务函数是否与第二任务函数相同;若确定结果为是,则选取无限循环函数作为目标函数;若确定结果为否,则选取第二任务函数作为目标函数。
在一些实施例中,上述设备包括ARM处理器,ARM处理器包括调试组件和闪存地址重载及断点单元FPB,FPB包括重映射函数;以及修复单元503可以进一步被配置成:利用重映射函数,将第一任务函数重映射为目标函数。
在一些实施例中,在将无限循环函数作为目标函数的情况下,修复单元503还可以被配置成:在将异常任务的第一任务函数替换为目标函数之后,向设备所属的用户呈现用于进行异常提示的提示信息。
在一些实施例中,在将无限循环函数作为目标函数的情况下,修复单元503还可以被配置成:在将异常任务的第一任务函数替换为目标函数之后,响应于检测到第二任务执行完成,控制设备重启。
需要说明,以上各单元的具体处理及其带来的技术效果可参考相关方法实施例中的相关说明,在此不再赘述。
本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的修复异常任务的方法。
本说明书实施例还提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现以上各方法实施例分别描述的修复异常任务的方法。
本说明书实施例还提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的修复异常任务的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的保护范围之内。

Claims (18)

1.一种修复异常任务的方法,通过搭载有实时操作系统RTOS的设备执行,所述设备中配置有异常处理函数和调试组件,所述方法包括:
响应于确定所述设备当前执行的任务将要从第一任务切换到第二任务,检测所述第一任务是否发生缓冲区溢出;
若检测结果为是,则将所述第一任务确定为异常任务;
利用所述异常处理函数调用所述调试组件,使得所述调试组件将所述异常任务的第一任务函数替换为目标函数。
2.根据权利要求1所述的方法,其中,在所述将所述异常任务的第一任务函数替换为目标函数之前,还包括:
从预设的函数集合中选取出一个函数作为目标函数。
3.根据权利要求2所述的方法,其中,所述函数集合包括无限循环函数和/或与所述异常任务有关的第二任务函数。
4.根据权利要求3所述的方法,其中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:
当所述函数集合包括所述无限循环函数时,选取所述无限循环函数作为目标函数。
5.根据权利要求3所述的方法,其中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:
当所述函数集合包括所述第二任务函数时,若所述异常任务包括多个子任务,并且所述第二任务函数是所述多个子任务之一的任务函数,则选取所述第二任务函数作为目标函数。
6.根据权利要求3所述的方法,其中,所述从预设的函数集合中选取出一个函数作为目标函数,包括:
当所述函数集合包括所述无限循环函数和所述第二任务函数时,确定所述第一任务函数是否与所述第二任务函数相同;
若确定结果为是,则选取所述无限循环函数作为目标函数;
若确定结果为否,则选取所述第二任务函数作为目标函数。
7.根据权利要求1所述的方法,其中,所述设备包括ARM处理器,所述ARM处理器包括所述调试组件和闪存地址重载及断点单元FPB,所述FPB包括重映射函数;以及
所述将所述异常任务的第一任务函数替换为目标函数,包括:
利用所述重映射函数,将所述第一任务函数重映射为所述目标函数。
8.根据权利要求3所述的方法,其中,在将所述无限循环函数作为目标函数的情况下,在所述将所述异常任务的第一任务函数替换为目标函数之后,还包括:
向所述设备所属的用户呈现用于进行异常提示的提示信息。
9.根据权利要求3所述的方法,其中,在将所述无限循环函数作为目标函数的情况下,在所述将所述异常任务的第一任务函数替换为目标函数之后,还包括:
响应于检测到所述第二任务执行完成,控制所述设备重启。
10.根据权利要求1所述的方法,其中,所述异常处理函数包括所述RTOS自带的HOOK函数,或者开发人员编写的中断处理函数。
11.根据权利要求1-10之一所述的方法,其中,所述检测所述第一任务是否发生缓冲区溢出,包括:
检测所述第一任务是否发生栈溢出,和/或检测所述第一任务是否发生堆溢出。
12.根据权利要求11所述的方法,其中,所述检测所述第一任务是否发生栈溢出,包括:
根据所述第一任务的栈空间的生长方向,修改所述栈空间的栈顶指针;
确定修改后的所述栈顶指针指向的地址是否包含在所述栈空间的地址范围内;
若确定结果为是,则确定所述第一任务未发生栈溢出;
若确定结果为否,则确定所述第一任务发生栈溢出。
13.根据权利要求12所述的方法,其中,所述生长方向为从高地址向低地址生长;以及
所述修改所述栈空间的栈顶指针,包括:
将所述栈顶指针递减1。
14.根据权利要求11所述的方法,其中,所述检测所述第一任务是否发生栈溢出,包括:
确定栈空间栈底第一预设字节的内容是否与第一标记信息相同;其中,所述第一标记信息是所述栈空间进行初始化时,针对栈底第一预设字节的内容进行初始化的信息;
若确定结果为是,则确定所述第一任务未发生栈溢出;
若确定结果为否,则确定所述第一任务发生栈溢出。
15.根据权利要求11所述的方法,其中,所述检测所述第一任务是否发生堆溢出,包括:
确定堆空间底部第二预设字节的内容是否与第二标记信息相同;其中,所述第二标记信息是所述第一任务的堆空间进行初始化时,针对底部第二预设字节的内容进行初始化的信息;
若确定结果为是,则确定所述第一任务未发生堆溢出;
若确定结果为否,则确定所述第一任务发生堆溢出。
16.一种修复异常任务的装置,应用于搭载有实时操作系统RTOS的设备,所述设备中配置有异常处理函数和调试组件,所述装置包括:
检测单元,被配置成响应于确定所述设备当前执行的任务将要从第一任务切换到第二任务,检测所述第一任务是否发生缓冲区溢出;
确定单元,被配置成若所述检测单元的检测结果为是,则将所述第一任务确定为异常任务;
修复单元,被配置成利用所述异常处理函数调用所述调试组件,使得所述调试组件将所述异常任务的第一任务函数替换为目标函数。
17.一种计算机可读存储介质,其上存储有计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-15中任一项所述的方法。
18.一种计算设备,包括存储器和处理器,其中,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-15中任一项所述的方法。
CN202110957074.4A 2021-08-19 2021-08-19 修复异常任务的方法及装置 Active CN113672424B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110957074.4A CN113672424B (zh) 2021-08-19 2021-08-19 修复异常任务的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110957074.4A CN113672424B (zh) 2021-08-19 2021-08-19 修复异常任务的方法及装置

Publications (2)

Publication Number Publication Date
CN113672424A true CN113672424A (zh) 2021-11-19
CN113672424B CN113672424B (zh) 2024-06-14

Family

ID=78544191

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110957074.4A Active CN113672424B (zh) 2021-08-19 2021-08-19 修复异常任务的方法及装置

Country Status (1)

Country Link
CN (1) CN113672424B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB489545A (en) * 1937-01-25 1938-07-25 Standard Telephones Cables Ltd Improvements in or relating to electrical communication systems
JP2000181746A (ja) * 1998-12-18 2000-06-30 Toshiba Corp デバッグサポート付プロセッサ、及びデバッグ機能実行制御方法
CN101169753A (zh) * 2007-11-26 2008-04-30 中兴通讯股份有限公司 一种记录导致系统异常的函数的方法
CN101176061A (zh) * 2005-04-22 2008-05-07 Nxp股份有限公司 数字信号处理器上多任务的实现
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统
CN102073529A (zh) * 2011-01-30 2011-05-25 华为技术有限公司 超级内核组件的升级方法和计算机系统
CN106371940A (zh) * 2015-07-21 2017-02-01 腾讯科技(深圳)有限公司 一种程序崩溃解决方法及装置
CN108268770A (zh) * 2018-02-05 2018-07-10 烽火通信科技股份有限公司 一种栈溢出检测系统及方法
CN110287123A (zh) * 2019-07-03 2019-09-27 武汉斗鱼鱼乐网络科技有限公司 一种绕过ios系统调试检测的方法及装置
CN111241537A (zh) * 2019-12-23 2020-06-05 北京元心科技有限公司 任务栈溢出检测方法及系统
CN112904437A (zh) * 2021-01-14 2021-06-04 支付宝(杭州)信息技术有限公司 基于隐私保护的隐藏组件的检测方法及隐藏组件检测装置

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB489545A (en) * 1937-01-25 1938-07-25 Standard Telephones Cables Ltd Improvements in or relating to electrical communication systems
JP2000181746A (ja) * 1998-12-18 2000-06-30 Toshiba Corp デバッグサポート付プロセッサ、及びデバッグ機能実行制御方法
CN101176061A (zh) * 2005-04-22 2008-05-07 Nxp股份有限公司 数字信号处理器上多任务的实现
CN101169753A (zh) * 2007-11-26 2008-04-30 中兴通讯股份有限公司 一种记录导致系统异常的函数的方法
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统
CN102073529A (zh) * 2011-01-30 2011-05-25 华为技术有限公司 超级内核组件的升级方法和计算机系统
CN106371940A (zh) * 2015-07-21 2017-02-01 腾讯科技(深圳)有限公司 一种程序崩溃解决方法及装置
CN108268770A (zh) * 2018-02-05 2018-07-10 烽火通信科技股份有限公司 一种栈溢出检测系统及方法
CN110287123A (zh) * 2019-07-03 2019-09-27 武汉斗鱼鱼乐网络科技有限公司 一种绕过ios系统调试检测的方法及装置
CN111241537A (zh) * 2019-12-23 2020-06-05 北京元心科技有限公司 任务栈溢出检测方法及系统
CN112904437A (zh) * 2021-01-14 2021-06-04 支付宝(杭州)信息技术有限公司 基于隐私保护的隐藏组件的检测方法及隐藏组件检测装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘长勇;王宜怀;孙亚军;: "GEC架构下RTOS对外接口函数重映射机制", 计算机系统应用, no. 08, 15 August 2020 (2020-08-15) *
刘露平;方勇;刘亮;龙刚;: "基于动态插桩的缓冲区溢出漏洞检测技术研究", 信息安全与通信保密, no. 04, 10 April 2015 (2015-04-10) *

Also Published As

Publication number Publication date
CN113672424B (zh) 2024-06-14

Similar Documents

Publication Publication Date Title
US9727343B2 (en) Apparatus and method for handling exception events
US8136097B2 (en) Thread debugging device, thread debugging method and information storage medium
US8271450B2 (en) Monitoring a data structure in a virtual machine and determining if memory pages containing the data structure are swapped into or out of guest physical memory
US7774636B2 (en) Method and system for kernel panic recovery
US8006246B2 (en) Apparatus for forcibly terminating thread blocked on input/output operation and method for the same
EP3462324B1 (en) Pointers in a memory managed system
US20100083275A1 (en) Transparent user mode scheduling on traditional threading systems
US7228543B2 (en) Technique for reaching consistent state in a multi-threaded data processing system
EP4012554B1 (en) Chip patching method and chip
US11663034B2 (en) Permitting unaborted processing of transaction after exception mask update instruction
US20050027957A1 (en) Apparatus and method for control of write filter
CN105550029A (zh) 一种进程调度方法及装置
US20120226842A1 (en) Enhanced prioritising and unifying interrupt controller
EP2495656B1 (en) Enhanced prioritising and unifying interrupt controller
CN113672424B (zh) 修复异常任务的方法及装置
CN111563000B (zh) 一种文件生成方法、智能终端及存储介质
US9417987B2 (en) Advisory warning and workaround indications to user when stopped between load and store conditional instructions while using source level debuggers
US7664800B2 (en) Apparatus and method for managing resource on java environment
JPH11134204A (ja) スタック保護装置
Hölscher et al. Examining and Supporting Multi-Tasking in EV3OSEK
US20130152105A1 (en) Lock free use of non-preemptive system resource
JP2016173746A (ja) 情報処理装置及びその制御方法、プログラム
JP3797274B2 (ja) ファームウェアディスパッチ方式,方法,およびプログラム
CN117971626A (zh) 基于多进程协程模型的共享内存泄漏检测方法
GB2500844A (en) Selecting either base level or further level stack when processing data in current further level exception state above base level

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