掌桥专利:专业的专利平台
掌桥专利
首页

适用于ARM平台的内核保护方法、访问方法及装置

文献发布时间:2023-06-19 12:14:58


适用于ARM平台的内核保护方法、访问方法及装置

技术领域

本公开涉及内核安全领域,特别是涉及一种适用于ARM平台的内核保护方法、访问方法及装置。

背景技术

task_struct是Linux内核中的一个重要数据结构,是每个进程和线程(在内核中线程也是一个进程)的进程描述符。task_struct结构体中存储了进程的进程名、uid、栈地址指针、父进程指针等几乎所有进程的重要信息。

thread_info是Linux内核中与task_struct相关的另一个重要数据结构,存储了当前进程(线程)的重要描述信息。

thread_info的存储位置比较特殊,它与内核栈共用8KB的内存空间,位于内核栈的底端,其中存储了对应进程的task_struct结构体指针以及addr_limit等重要数据结构。

内核中要获取当前task_struct结构体指针,通过调用current宏就可以完成,而current宏的实现原理就是通过当前栈指针sp,计算出thread_info地址,再通过thread_info即可获取当前task指针。

所以如果攻击者能够获取到内核执行代码执行机会,就可以很容易的通过栈指针找到task_struct的重要数据,进一步修改cred信息,提升权限。

另外,thread_info放在栈上,也很容易受到栈溢出影响导致重要数据被覆写,也可能被用于权限提升。

因此,需要一种方案,来解决因thread_info的上述存储结构导致的内核易被攻击问题。

发明内容

本公开要解决的一个技术问题是提供一种内核保护方案,解决因thread_info的现有存储结构导致的内核易被攻击问题。

根据本公开的第一个方面,提供了一种适用于ARM平台的内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及在全局数组中存储进程描述符task_struct结构体所对应的指针。

可选地,在全局数组中存储进程描述符task_struct结构体所对应的指针的步骤包括:将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,其中,全局数组中的元素为指针,元素的下标为中央处理器的标识。

可选地,该方法还包括:通过协处理器指令获取中央处理器的标识;基于获取到的中央处理器的标识,访问全局数组中与标识对应的指针。

可选地,访问全局数组中与标识对应的指针的步骤包括:读取全局数组中与标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体;以及/或者对全局数组中与标识对应的指针执行写操作,以修改标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。

可选地,该方法还包括:在访问全局数组中与标识对应的指针的过程中,关闭中断;在访问完毕后,打开中断。

可选地,访问全局数组中与标识对应的指针的过程的步骤是在临界区执行的。

根据本公开的第二个方面,还提供了一种内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。

根据本公开的第三个方面,还提供了一种进程描述符task_struct结构体的访问方法,其特征在于,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体。

根据本公开的第四个方面,还提供了一种进程信息thread_info结构体的访问方法,其特征在于,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。

根据本公开的第五个方面,还提供了一种内核保护方法,包括:将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及在全局数组中存储进程描述符task_struct结构体所对应的指针。

根据本公开的第六个方面,还提供了一种适用于ARM平台的内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。

根据本公开的第七个方面,还提供了一种内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。

根据本公开的第八个方面,还提供了一种进程描述符task_struct结构体的访问装置,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该装置包括:获取模块,用于获取中央处理器的标识;读取模块,用于基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;访问模块,用于基于读取到的指针,访问当前进程描述符task_struct结构体。

根据本公开的第九个方面,还提供了一种进程信息thread_info结构体的访问装置,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该装置包括:获取模块,用于获取中央处理器的标识;读取模块,用于基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;访问模块,用于基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。

根据本公开的第十个方面,还提供了一种内核保护装置,包括:第一存储模块,用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中;以及第二存储模块,用于在全局数组中存储进程描述符task_struct结构体所对应的指针。

根据本公开的第十一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如上述第一个方面至第五个方面中任一方面述及的方法。

根据本公开的第十二个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如上述第一个方面至第五个方面中任一方面述及的方法。

由此,通过将thread_info从栈上分离出来存储到task_struct中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。而通过在全局数组中存储task_struct所对应的指针,可以绕过硬件限制,不依赖于CPU架构,使得通过代码即可完成task_struct指针的存储和访问。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了传统的thread_info存储结构示意图。

图2示出了本公开的thread_info存储结构示意图。

图3示出了根据本公开一个实施例的对全局数组进行写访问的示意图。

图4示出了根据本公开一个实施例的对全局数组进行读访问的示意图。

图5示出了根据本公开一个实施例的适用于ARM平台的内核保护装置的结构示意图。

图6示出了根据本公开另一个实施例的内核保护装置的结构示意图。

图7示出了根据本公开一个实施例的进程描述符task_struct结构体的访问装置的结构示意图。

图8示出了根据本公开一个实施例的进程信息thread_info结构体的访问装置的结构示意图。

图9示出了根据本公开一实施例的计算设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本公开改变了传统的thread_info存储方式,将进程信息thread_info结构体从内核栈移除,存储到进程描述符task_struct结构体中。通过将thread_info从栈上分离出来存储到task_struct中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。

图1示出了传统的thread_info存储结构示意图。

图2示出了本公开的thread_info存储结构示意图。

如图1所示,在传统方案中,thread_info存储了对应进程的task_struct结构体指针以及addr_limit等重要数据结构,攻击者可以通过thread_info访问task_struct,进一步修改task_struct中的cred信息,来提升权限。

如图2所示,本公开将thread_info从栈上分离出来存储到task_struct中,使得原有的thread_info与task_struct逻辑访问关系就反过来了。原来是通过thread_info来访问task_struct,现在变成通过task_struct才能访问到thread_info。如此可以避免通过thread_info访问task_struct而带来的内核被攻击风险。

在传统方案中,是通过thread_info来找到task_struct的指针,本公开将thread_info存储到task_struct中时,原有的通过thread_info访问task_struct的逻辑不再成立,因此需要找到一个地方来存储current_task的指针。

考虑到多核情况下,每个中央处理器(CentralProcessingUnit,简称CPU)运行过程中都有一个当前正在调度运行的进程,因此这个current_task指针的存储,应该优选地是各个CPU互相独立的全局变量。

为此本公开提出,可以在全局数组中存储进程描述符task_struct结构体所对应的指针。具体地,可以将各个CPU中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,其中,全局数组中的元素为指针,元素的下标为CPU的标识。此处述及的CPU的标识用于标识CPU,可以是但不限于cpuid。

作为示例,全局数组可以记为current_task[cpuid],其中current_task可以视为数组名称,数组大小就是CPU数量,数组元素为CPU中当前进程描述符task_struct结构体所对应的指针,数组下标就是cpuid。

在全局数组中存储task_struct结构体的指针的方式,可以绕过硬件限制,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问。

本公开的这种在全局数组中存储task_struct结构体的指针的方式,可以适用于多种平台,特别适用于硬件结构不支持以全局变量的形式存储t ask_struct指针的平台,例如ARM平台(也即ARM32平台)。

举例来说,在ARM64平台中具有sp_el0寄存器,el0代表用户态,这个寄存器用于存储用户态sp指针。在进入内核时,sp_el0将会被存储到栈上,在出内核时会被恢复,所以在内核中sp_el0实际上是一个闲置的状态,可以用来存储task_struct指针。在X86\X86_64平台中per_cpu是数组数据结构,系统的每一个CPU对应一个元素,X86上的per_cpu变量是基于fs/gs段寄存器寻址实现的,X86上是fs,X86_64上是gs。

而ARM平台(也即ARM32平台)上没有类似el_sp0的寄存器来存储task_struct指针。另外在ARM上访问per_cpu变量需要开关抢占,开关抢占是需要访问thread_info->preempt_count的,这样的话就需要去获取thread_info,同样无法实现。其中preempt_count用于表示该进程是否可以被抢占。抢占是指现行进程在运行过程中,如果有重要或紧迫的进程到达(其状态必须为就绪),则现运行进程将被迫放弃处理器,系统将处理器立刻分配给新到达的进程。

在全局数组中存储task_struct结构体的指针的方式,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问,因此本公开的方案特别适用于ARM平台。

在本公开中,可以通过获取中央处理器的标识(例如cpuid)来找到task_struct的指针,进而访问task_struct或者task_struct中的thread_info。

获取cpuid的方式也是需要注意的,因为传统的thread_info->cpu方式在这里就不适用了,因为无法提前获取thread_info,逻辑上走不通。

本公开可以通过协处理器指令获取标识,然后基于获取到的标识,访问全局数组中与标识对应的指针,从而实现task_struct(或task_struct中的thread_info)的读写访问。关于协处理器指令以及通过协处理器指令获取cpuid的具体指令形式,本公开不再赘述。

作为示例,在基于获取到的标识访问全局数组中与标识对应的指针时,可以读取全局数组中与标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体;以及/或者对全局数组中与标识对应的指针执行写操作,以修改标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。

进一步地,考虑到多核情况,虽然各个CPU间互相独立,互不影响,但在同一个CPU上,在访问当前进程的task_struct的过程中,当前进程可能被抢占,导致出现同步问题,关闭抢占需要访问thread_info中的preempt_count,逻辑上存在问题。为此,本公开提出可以在访问全局数组时通过关中断来解决CPU间的同步问题。

作为示例,可以在访问全局数组中与标识对应的指针的过程中,关闭中断,在访问完毕后,打开中断。关闭中断也即关闭中断服务,打开中断也即恢复中断服务。

中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

在本公开中,访问全局数组中与标识对应的指针的过程的步骤可以是在临界区执行的。临界区指的是访问共用资源的程序片段,进入临界区段时其他线程或是进程必须等待。

图3示出了根据本公开一个实施例的对全局数组进行写访问的示意图。

如图3所示,在开始执行写访问过程时,可以关闭中断,然后通过协处理器指令获取cpuid,然后对全局数组执行写操作,以更新全局数组,例如可以修改cpuid对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。在写访问完毕后再恢复中断。其中整个流程可以在临界区执行。

图4示出了根据本公开一个实施例的对全局数组进行读访问的示意图。

如图4所示,在开始执行读访问过程时,可以关闭中断,然后通过协处理器指令获取cpuid,然后对全局数组执行读操作,以读取全局数组,例如可以读取全局数组中与所述标识对应的指针,以便基于读取到的指针访问当前进程描述符task_struct结构体,进而还可以访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。在读访问完毕后再恢复中断。其中整个流程可以在临界区执行。

本公开还提出了一种进程描述符task_struct结构体的访问方法,进程描述符task_struct结构体中存储有进程信息thread_info结构体,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体。关于方法涉及的细节可以参见上文相关描述,此处不再赘述。

本公开还提出了一种进程信息thread_info结构体的访问方法,进程信息thread_info结构体被存储到进程描述符task_struct结构体中,该方法包括:获取中央处理器的标识;基于获取到的中央处理器的标识,读取全局数组中与标识对应的指针,全局数组包括一个或多个元素,元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为中央处理器的标识;基于读取到的指针,访问当前进程描述符task_struct结构体中的进程信息thread_info结构体。关于方法涉及的细节可以参见上文相关描述,此处不再赘述。

综上,本公开的方案至少具有如下创新及有益效果。

1、将thread_info从栈上分离出来,移入task_struct结构体中,可以避免通过thread_info访问task_struct而带来的风险,并且可以解决因栈溢出影响导致重要数据被覆写的问题。

2、采用全局数组存储task_struct的指针,可以绕过硬件限制,不依赖于CPU架构,通过代码即可完成task_struct指针的存储和访问。

由于架构差异,ARM平台没有ARM64上的sp_el0,也没有类似X86\X86_64的基于段寄存器寻址的per_cpu变量实现,使得因硬件架构平台限制导致ARM平台不能采取其他平台中的内核保护方案。本公开采取软件方式实现,利用全局数组替代寄存器存储task指针,可以绕过硬件限制,使得本公开的方案可以适用于ARM平台。

3、采用协处理器指令获取cpuid。传统获取cpuid的方式是通过thread_info->cpu,但这里本身就是为了访问thread_info,因此行不通,需要换另一种方式,就是采用ARM协处理器指令来实现,绕过逻辑上的问题。取得当前cpuid做为数组下标,就可以对全局数组进行访问。

4、通过开关中断确保全局数组的访问同步问题。由于使用全局数组,需要保证同步问题。如果通过spin_lock锁去保证同步,在spin_lock中需要关抢占(preempt_disable()),是需要访问thread_info->preempt_count,这样和前面提到的访问thread_info->cpu一样,逻辑上就陷入循环走不通了,因此通过spin_lock来保证多处理器下全局数组同步是走不通的。

图5示出了根据本公开一个实施例的适用于但不限于ARM平台的内核保护装置的结构示意图。内核保护装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图5所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面就内核保护装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图5,内核保护装置500包括第一存储模块510和第二存储模块520。

第一存储模块510用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中。

第二存储模块520用于在全局数组中存储进程描述符task_struct结构体所对应的指针。其中,第二存储模块520可以将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,所述全局数组中的元素为所述指针,元素的下标为所述中央处理器的标识。

作为示例,内核保护装置500还可以包括获取模块和访问模块,获取模块可以用于通过协处理器指令获取所述中央处理器的标识;访问模块可以用于基于获取到的所述中央处理器的标识,访问所述全局数组中与所述标识对应的指针。

访问模块可以读取所述全局数组中与所述标识对应的指针,以便基于读取到的指针访问所述当前进程描述符task_struct结构体;并且/或者访问模块还可以对所述全局数组中与所述标识对应的指针执行写操作,以修改所述标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。

作为示例,内核保护装置500还可以包括关闭模块和打开模块。关闭模块用于在访问模块访问所述全局数组中与所述标识对应的指针的过程中,关闭中断;打开模块用于在访问模块访问完毕后,打开中断。其中,访问模块可以在临界区执行所述访问所述全局数组中与所述标识对应的指针的过程的操作。

图6示出了根据本公开另一个实施例的内核保护装置的结构示意图。在本实施例中,内核保护装置可以适用于但不限于ARM平台。内核保护装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图6所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面就内核保护装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图6,内核保护装置600包括第一存储模块610和第二存储模块620。

第一存储模块610用于将进程信息thread_info结构体存储到进程描述符task_struct结构体中。第二存储模块620用于在全局数组中存储进程描述符task_struct结构体所对应的指针。

作为示例,第二存储模块620可以用于将至少部分中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中。其中,第二存储模块620可以将各个中央处理器中当前进程描述符task_struct结构体所对应的指针存储到全局数组中,所述全局数组中的元素为所述指针,元素的下标为所述中央处理器的标识。

作为示例,内核保护装置600还可以包括获取模块和访问模块,获取模块可以用于通过协处理器指令获取所述中央处理器的标识;访问模块可以用于基于获取到的所述中央处理器的标识,访问所述全局数组中与所述标识对应的指针。

访问模块可以读取所述全局数组中与所述标识对应的指针,以便基于读取到的指针访问所述当前进程描述符task_struct结构体;并且/或者访问模块还可以对所述全局数组中与所述标识对应的指针执行写操作,以修改所述标识对应的中央处理器中当前进程描述符task_struct结构体所对应的指针。

作为示例,内核保护装置600还可以包括关闭模块和打开模块。关闭模块用于在访问模块访问所述全局数组中与所述标识对应的指针的过程中,关闭中断;打开模块用于在访问模块访问完毕后,打开中断。其中,访问模块可以在临界区执行所述访问所述全局数组中与所述标识对应的指针的过程的操作。

图7示出了根据本公开一个实施例的进程描述符task_struct结构体的访问装置的结构示意图。在本实施例中,访问装置可以适用于但不限于ARM平台。访问装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图7所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面就访问装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图7,访问装置700包括获取模块710、读取模块720以及访问模块730。

获取模块710用于获取中央处理器的标识。

读取模块720用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识。

访问模块730用于基于读取到的指针,访问所述当前进程描述符task_struct结构体。

图8示出了根据本公开一个实施例的进程信息thread_info结构体的访问装置的结构示意图。在本实施例中,访问装置可以适用于但不限于ARM平台。访问装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图8所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面就访问装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图8,访问装置800包括获取模块810、读取模块820以及访问模块830。

获取模块810用于获取中央处理器的标识。

读取模块820用于基于获取到的所述中央处理器的标识,读取全局数组中与所述标识对应的指针,所述全局数组包括一个或多个元素,所述元素为中央处理器中当前进程描述符task_struct结构体所对应的指针,元素的下标为所述中央处理器的标识。

访问模块830用于基于读取到的指针,访问所述当前进程描述符task_struct结构体中的进程信息thread_info结构体。

图9示出了根据本公开一实施例可用于实现上述内核保护方法或访问方法的计算设备的结构示意图。

参见图9,计算设备900包括存储器910和处理器920。

处理器920可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器920可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器920可以使用定制的电路实现,例如特定用途集成电路(ASIC,Application Specific Integrated Circuit)或者现场可编程逻辑门阵列(FPGA,Field Programmable Gate Arrays)。

存储器910可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器920或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器910可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器910可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。

存储器910上存储有可执行代码,当可执行代码被处理器920处理时,可以使处理器920执行上文述及的内核保护方法或访问方法。

上文中已经参考附图详细描述了根据本发明的适用于ARM平台的内核保护方法、访问方法、装置及计算设备。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

相关技术
  • 适用于ARM平台的内核保护方法、访问方法及装置
  • 一种基于ARM指针验证的内核敏感数据完整性保护方法
技术分类

06120113228581