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

一种固件和用户程序隔离保护方法及终端

文献发布时间:2023-06-19 10:16:30


一种固件和用户程序隔离保护方法及终端

技术领域

本发明涉及计算机技术领域,特别涉及一种固件和用户程序隔离保护方法及终端。

背景技术

目前小型PLC基本采用MCU单片机实现。其中编译型的PLC是将PLC的程序(即用户程序)在PC上编译完成后下载到MCU中执行。

然而现有技术中,由于没有做权限的保护,用户程序可以轻易的读取到MCU所有内存和固件,极易被破解,另外,PLC程序运行错误会影响到固件的正常运行。

因此,需要一种固件和用户程序隔离保护方法及终端,能够提高安全性,且当PLC死机时,不会影响PLC固件的正常运行。

发明内容

(一)要解决的技术问题

为了解决现有技术的上述问题,本发明提供一种固件和用户程序隔离保护方法及终端,能够提高安全性,且当PLC死机时,不会影响PLC固件的正常运行。

(二)技术方案

为了达到上述目的,本发明采用的一种技术方案为:

一种固件和用户程序隔离保护方法,包括步骤:

将SRAM划分为第一区域、第二区域和第三区域;

配置所述第一区域对固件不可写、可读和可执行,对用户程序不可读写和不可执行;

配置所述第二区域对固件和用户程序均不可写、可读和可执行;

配置所述第三区域对固件可写、可读和不可执行,对用户程序不可写、可读和可执行;

固件调用用户程序时,先切换状态到所述第二区域执行再调用用户程序;

用户程序调用固件时,先切换状态到所述第二区域执行再调用固件的系统程序。

为了达到上述目的,本发明采用的一种技术方案为:

一种固件和用户程序隔离保护终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:

将SRAM划分为第一区域、第二区域和第三区域;

配置所述第一区域对固件不可写、可读和可执行,对用户程序不可读写和不可执行;

配置所述第二区域对固件和用户程序均不可写、可读和可执行;

配置所述第三区域对固件可写、可读和不可执行,对用户程序不可写、可读和可执行;

固件调用用户程序时,先切换状态到所述第二区域执行再调用用户程序;

用户程序调用固件时,先切换状态到所述第二区域执行再调用固件的系统程序。

(三)有益效果

本发明的有益效果在于:通过将SRAM划分为第一区域、第二区域和第三区域;配置所述第一区域对固件不可写、可读和可执行,对用户程序不可读写和不可执行;配置所述第二区域对固件和用户程序均不可写、可读和可执行;配置所述第三区域对固件可写、可读和不可执行,对用户程序不可写、可读和可执行;固件调用用户程序时,先切换状态到所述第二区域执行再调用用户程序;用户程序调用固件时,先切换状态到所述第二区域执行再调用固件的系统程序,安全性更高,且当PLC死机时,不会影响PLC固件的正常运行。

附图说明

图1为本发明实施例的固件和用户程序隔离保护方法的流程图;

图2为本发明实施例的固件和用户程序隔离保护终端的整体结构示意图。

【附图标记说明】

1:固件和用户程序隔离保护终端;

2:存储器;

3:处理器。

具体实施方式

为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。

实施例一

请参照图1,一种固件和用户程序隔离保护方法,包括步骤:

将SRAM划分为第一区域、第二区域和第三区域;

配置所述第一区域对固件不可写、可读和可执行,对用户程序不可读写和不可执行;

配置所述第二区域对固件和用户程序均不可写、可读和可执行;

配置所述第三区域对固件可写、可读和不可执行,对用户程序不可写、可读和可执行;

固件调用用户程序时,先切换状态到所述第二区域执行再调用用户程序;

用户程序调用固件时,先切换状态到所述第二区域执行再调用固件的系统程序。

所述的固件调用用户程序时,先切换状态到所述第二区域执行再调用用户程序具体为:

固件调用用户程序时,先通过SVC异常切换到用户态,新建与所述用户态相对应的第一堆栈;

将要调用的用户程序的地址和参数压入所述第一堆栈中,并调用所述第二区域的第一函数执行所述用户程序;

执行完成后,将返回值作为SVC异常的参数,SVC异常切换回特权态,完成用户程序的调用。

所述的用户程序调用固件时,先切换状态到所述第二区域执行再调用固件具体为:

用户程序调用固件时,先调用SVC异常切换到特权态,新建与所述特权态相对应的第二堆栈;

将要调用的系统程序的编号和参数压入所述第二堆栈中,并调用所述第二区域的第二函数执行所述系统程序;

执行完成后,将执行结果作为SVC异常的参数,SVC异常切换回用户态,完成固件的调用。

实施例二

本实施例和实施例一的区别在于,本实施例将结合具体的应用场景,进一步说明本发明上述固件和用户程序隔离保护方法是如何实现的:

1、MPU的配置

(1)将SRAM分为3个区域A(第一区域)、B(第二区域)和C(第三区域)区域;

(2)将A区域设置为固件不可写,可读,可执行,梯形图(用户程序)不可以读写执行;

(3)将B区域设置为固件和梯形图不可写,可读,可执行

(4)将C区域设置为固件可以写,可以读,不可执行,梯形图不可写,可读,可执行;

(5)通过A区域的配置,使得梯形图无法访问和执行固件的系统程序;

(6)通过C区域的配置,使得固件可以更新梯形图程序,但是不可以直接执行梯形图程序。由于用户程序仅能在C区域执行,在C区域是固件(特权态)不能执行的程序。从而保证梯形图不会在特权态执行,从而限制其访问;

(7)B区域作为固件和梯形图都可以执行的区域,作用在于提供固件和梯形图程序相互切换区域。固件要切换到梯形图先切换状态到此区域执行再调用梯形图。梯形图要切换回固件,先切换到此区域再切换到固件。

2、PLC固件调用PLC程序的执行

(1)由于固件无法直接调用执行梯形图,所以通过SVC的异常来进行切换;

(2)本流程的目的在于:通过SVC异常保存特权态当前寄存器到特权态的栈,并且新建一个用户态的梯形图栈用于执行用户程序,SVC退出后使用梯形图栈执行梯形图,梯形图执行完成后返回亦然。

(3)PLC固件调用SVC异常,设置异常退出后切换到用户态;

(4)新建一个空的用户态栈UserStack(第一堆栈),此栈为向下生长的栈;

(5)设置UserStack[0]为调用特权态要调用的梯形图函数的地址;

(6)设置UserStack[-1]为调用特权态要调用的梯形图函数的参数;

(7)设置UserStack[-6]为定义在B区域的函数,为异常退出后执行的函数CallUserAppInPSP;

(8)将UserStack设置为系统的用户态的栈;

(9)设置异常退出后切换到用户态,并使用用户态栈;

(10)通过5-9的设置,使得异常退出后处于用户态,使用UserStack为用户态的栈,调用位于内存B区域的CallUserAppInPSP(void*userapp,void*param)函数(第一函数);

(11)由于ARM CPU特性,UserStack[0]即为形参userapp的值,UserStack[-1]为形参param的值;

(12)CallUserAppInPSP函数中将实际调用UserStack[0]执行;

(13)当梯形图函数执行完成后,返回CallUserAppInPSP;

(14)CallUserAppInPSP调用SVC异常,并将返回值作为SVC异常的参数;

(15)将系统栈SysStack[0]设置为UserStack[0],即为SVC异常的返回值;

(16)设置SVC异常返回后为特权态,使用特权态栈;

(17)SVC异常返回;

(18)结束。

3、PLC程序调用固件的提供的功能函数

(1)由于梯形图无法直接调用固件的程序,所以通过一个SVC异常来进行CPU特权态的切换和栈的切换。从而让梯形图可以调用固件提供的功能。

(2)PLC程序调用位于B区域的SystemCallInPSP函数,并将要调用的系统函数的编号,系统函数的参数作为函数SystemCallInPSP的参数

(3)SystemCallInPSP调用SVC异常,将要调用的函数编号和参数作为SVC参数;

(4)SVC异常中,新建一个特权态的栈SysStack2(第二堆栈),此栈为向下生长的栈。

(5)将SysStack2[0]设置为调用的系统函数的编号;

(6)将SysStack2[-1]设置为调用的系统函数的参数;

(7)设置SysStack2[-6]为定义在B区域的函数,为异常退出后执行的函数SystemCallInMSP;

(8)将系统的特权态的栈从SysStack改为SysStack2;

(9)通过5-8的设置,使得异常退出后切换到特权态,并使用特权态栈,执行位于B区域的函数SystemCallInMSP(第二函数);

(10)SystemCallInMSP根据系统函数的编号,执行对应的函数。

(11)执行完成后,调用SVC异常,并将执行结果作为SVC异常的参数。

(12)将用户栈UserStack[0]设置为SysStack2[0];

(13)将系统特权态栈重新设置回SysStack;

(14)设置SVC异常返回后为用户态,使用用户态栈。

(15)异常返回SystemCallInPSP;

(16)结束。

4、SVC异常如何传递参数和返回值

(1)根据AAPCS(Arm Procedure Call Standard)的规定;

(2)函数的参数0,1,2的值存储在寄存器R0,R1,R2。

(3)函数的返回值也存储在寄存器R0

(4)所以

__asm int SVC_0(int returnval)

{

SVC 0

BX LR//NEVER EXECUTE

}

参数returnval将保存在R0,进入SVC异常后,可以通过异常前的栈的栈顶来访问。

当调用SVC异常后,如果SVC异常通过修改异常前的栈的栈顶的值,则此时R0为修改后的栈顶的值。当BX LR时,R0则作为函数SVC_0的返回值。

5、SVC自动入栈

(1)根据ARM参考手册的定义,当进入异常后,R0-R3,R12,LR,PC,xPSR将自动入异常前所使用的栈。这是CPU自动完成的。

实施例三

请参照图2,一种固件和用户程序隔离保护终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现实施例一中的各个步骤。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种固件和用户程序隔离保护方法及终端
  • 一种用户身份保护方法、用户终端和核心网
技术分类

06120112480848