用于独立定义的操作的堆栈安全制造技术

技术编号:24105655 阅读:67 留言:0更新日期:2020-05-09 16:50
本发明专利技术公开了用于当一个应用程序调用另一个应用程序时在与相应的应用程序相关联的堆栈之间进行交换或改变的系统和方法。

Stack security for independently defined operations

【技术实现步骤摘要】
【国外来华专利技术】用于独立定义的操作的堆栈安全相关申请的交叉引用本申请要求于2017年8月24日提交的美国临时专利申请号62/549,637的权益,该临时专利申请的全部内容以引用的方式并入本文。
技术介绍
当计算设备执行进行函数调用的应用程序时,计算设备可以在进行函数调用时使用堆栈来存储例如寄存器值、函数参数值、返回地址和局部变量。
技术实现思路
根据一个示例,一种装置可以包括至少一个处理器,并且还可以包括通信地耦合到该至少一个处理器的至少一个有形存储器模块。该至少一个有形存储器模块可以已经在其上存储有第一应用程序的软件指令和第二应用程序的软件指令,其中第二应用程序可以包括第一函数和第二函数,并且其中第一应用程序可以具有与其相关联的第一堆栈,并且第二应用程序可以具有与其相关联的第二堆栈。第一应用程序和第二应用程序的软件指令在由至少处理器执行时可以指引至少一个处理器执行第一应用程序,其中在执行第一应用程序时,堆栈指针寄存器可以指向第一堆栈。软件指令在由至少处理器执行时可以进一步指引该至少处理器在执行第一应用程序时调用第二应用程序的第一函数,其中调用该第一函数可以包括将数据值推送到第一堆栈上,并且其中堆栈指针寄存器可以在将数据值推送到第一堆栈上之后指向第一堆栈。软件指令在由至少一个处理器执行时可以进一步指引至少处理器执行第一函数,其中执行该第一函数可以包括确定堆栈指针寄存器是正在指向第一堆栈还是正在指向第二堆栈。至少部分地基于确定堆栈指针寄存器正在指向第一堆栈,软件指令在由至少处理器执行时可以进一步指引至少处理器使堆栈指针寄存器从指向第一堆栈改变为指向第二堆栈。当软件指令由至少处理器执行时可以进一步指引至少处理器从第一函数调用第二函数,使用第二堆栈执行第二函数,在第二函数完成时,将堆栈指针寄存器从指向第二堆栈改变为指向第一堆栈,返回第一应用程序,并且继续使用第一堆栈执行第一应用程序。根据另一个示例,一种装置可以包括至少一个处理器,并且还可以包括通信地耦合到该至少一个处理器的至少一个有形存储器模块。该至少一个有形存储器模块可以在其上存储有第一应用程序的软件指令和第二应用程序的软件指令。软件指令在由至少处理器执行时可以指引至少一个处理器执行第一应用程序,并且在执行第一应用程序时,调用第二应用程序的第一函数,其中调用第一函数可以包括将数据值推送到第一堆栈上,并且其中堆栈指针寄存器可以在推送数据值之后指向第一堆栈。软件指令在由至少处理器执行时可以进一步指引至少处理器在执行第一函数时将堆栈指针寄存器从指向第一堆栈改变为指向第二堆栈。软件指令在由至少处理器执行时可以进一步指引至少处理器将位于第一堆栈上的第一数据值从第一堆栈复制到第二堆栈,调用第二应用程序的第二函数,并且使用第二堆栈执行第二函数。在第二函数完成时,软件指令在由至少处理器执行时可以进一步指引至少处理器将堆栈指针寄存器从指向第二堆栈改变为指向第一堆栈。软件指令在由至少处理器执行时可以进一步指引至少处理器将位于第二堆栈上的第二数据值从第二堆栈复制到第一堆栈,返回第一应用程序,并且使用第一堆栈继续执行第一应用程序。以上优点和特征仅仅是代表性实施方案。它们不被视为是限制。在以下描述、附图和权利要求书中,实施方案的附加特征和优点将变得显而易见。附图说明图1示出了示例性计算设备。图2示出了图1的计算设备的示例性存储器配置。图3示出了图1的计算设备的另一个示例性存储器配置,并且特别地,示出了调用第二函数的第一函数的示例性执行,其中第一函数和第二函数驻留在不同的存储器分段中。图4示出了示例性代码序列,该示例性代码序列包括在执行函数之前从第一堆栈交换或改变到第二堆栈,使用第二堆栈执行该函数,然后一旦该函数完成,就从第二堆栈交换回第一堆栈。图5示出了可以在执行函数之前执行的从第一堆栈交换或改变到第二堆栈的示例性过程。图6示出了可以在执行函数之后执行的从第二堆栈交换或改变到第一堆栈的示例性过程。图7A至图7B示出了在执行函数之前和之后交换或改变堆栈的示例性过程,并且特别地,在堆栈之间进行交换时,将数据推送到这些堆栈上以及将数据从这些堆栈中弹出并且在这些堆栈之间复制数据。图8A至图8I示出堆栈的示例性状态,其中这些状态与图7A至图7B的过程中的各个点一致。图9示出了可以在执行函数之前执行的从第一堆栈交换或改变到第二堆栈的示例性代码序列。图10示出了可以在执行函数之后执行的从第二堆栈交换或改变到第一堆栈的示例性代码序列。具体实施方式参考图1,示出了示例性计算设备(例如,在本文中也被称为设备和/或计算系统和/或系统)100。计算设备100可以包括一个或多个处理器102(在本文中仅出于描述的目的被称为处理器)。处理器102可以基于MCF5275指令集架构,但是其他指令集架构也是可能的,并且本文所讨论的过程和系统不限于MCF5275架构。MCF5275指令集架构在本文中仅用于描述的目的。作为一个示例,处理器102可以是ColdFire5275微处理器,但是可以使用其他处理器。处理器102可以通过执行一个或多个基于软件和/或固件的应用程序的一个或多个指令来控制计算设备100的功能性,如本文进一步所述。处理器102可以包括一个或多个寄存器,诸如指令指针寄存器(在本文中也被称为指令指针)、堆栈指针寄存器(在本文中也被称为堆栈指针)、堆栈帧指针寄存器(在本文中也被称为堆栈帧指针)、一个或多个暂存寄存器等。出于讨论的目的,本文的示例将假定处理器102具有四个暂存寄存器。计算设备100还可以包括非易失性存储器104和可以通信地耦合到处理器102的易失性存储器106。非易失性存储器104可以是可以被擦除和重新编程的存储器。例如,非易失性存储器104可以包括一个或多个存储器设备,诸如固态驱动器(SSD),诸如固态闪存存储器、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、硬盘驱动器、光盘驱动器等,但是可以使用其他类型的非易失性存储器设备。非易失性存储器104可以是不可移动存储器和/或可移动存储器,诸如记忆棒/USB驱动器、存储器卡或任何其他类型的可移动存储器。如本文中进一步描述的,非易失性存储器104可以用于永久地存储一个或多个基于软件的应用程序(其中永久性可以例如是指应用程序在计算设备100的重启和/或重置之间保留在存储器中)。易失性存储器106可以是一个或多个存储器设备,并且可以包括例如随机存取存储器(RAM),并且可以是一个或多个集成电路的形式。存储器106可以由处理器102用于执行存储在非易失性存储器104中的基于软件的应用程序。将认识到,计算设备100可以包括其他和/或附加类型的存储器设备,包括只读存储器(ROM),以及处理器102内部/一部分的存储器。计算设备100还可以包括一个或多个网络接口控制器/电路,以用于通过一个或多个有线和/或无线通信网络和/或信道140进行通信(传输和/或接收)。例如,计算设备100可以包括使计算设备100能够通过一个或多个无线通信网络/信道(例如本文档来自技高网...

【技术保护点】
1.一种装置,其包括:/n至少一个处理器;和/n至少一个存储器模块,所述至少一个存储器模块通信地耦合到所述至少一个处理器,其中所述至少一个存储器模块在其上存储有第一应用程序的软件指令和第二应用程序的软件指令,其中所述第二应用程序包括第一函数和第二函数,其中所述第一应用程序具有与其相关联的第一堆栈,并且所述第二应用程序具有与其相关联的第二堆栈,并且其中所述第一应用程序和所述第二应用程序在由所述至少一个处理器执行时指引所述至少一个处理器:/n执行所述第一应用程序,其中在执行所述第一应用程序时,堆栈指针寄存器指向所述第一堆栈;/n在执行所述第一应用程序时,调用所述第二应用程序的所述第一函数,其中调用所述第一函数包括将数据值推送到所述第一堆栈上,并且其中所述堆栈指针寄存器在将所述数据值推送到所述第一堆栈上之后指向所述第一堆栈;/n执行所述第一函数,其中执行所述第一函数包括确定所述堆栈指针寄存器是正在指向所述第一堆栈还是正在指向所述第二堆栈;/n至少部分地基于确定所述堆栈指针寄存器正在指向所述第一堆栈,将所述堆栈指针寄存器从指向所述第一堆栈改变为指向所述第二堆栈;/n从所述第一函数调用所述第二函数;/n使用所述第二堆栈执行所述第二函数;/n在所述第二函数完成时,将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈;/n返回到所述第一应用程序;并且/n继续使用所述第一堆栈执行所述第一应用程序。/n...

【技术特征摘要】
【国外来华专利技术】20170824 US 62/549,6371.一种装置,其包括:
至少一个处理器;和
至少一个存储器模块,所述至少一个存储器模块通信地耦合到所述至少一个处理器,其中所述至少一个存储器模块在其上存储有第一应用程序的软件指令和第二应用程序的软件指令,其中所述第二应用程序包括第一函数和第二函数,其中所述第一应用程序具有与其相关联的第一堆栈,并且所述第二应用程序具有与其相关联的第二堆栈,并且其中所述第一应用程序和所述第二应用程序在由所述至少一个处理器执行时指引所述至少一个处理器:
执行所述第一应用程序,其中在执行所述第一应用程序时,堆栈指针寄存器指向所述第一堆栈;
在执行所述第一应用程序时,调用所述第二应用程序的所述第一函数,其中调用所述第一函数包括将数据值推送到所述第一堆栈上,并且其中所述堆栈指针寄存器在将所述数据值推送到所述第一堆栈上之后指向所述第一堆栈;
执行所述第一函数,其中执行所述第一函数包括确定所述堆栈指针寄存器是正在指向所述第一堆栈还是正在指向所述第二堆栈;
至少部分地基于确定所述堆栈指针寄存器正在指向所述第一堆栈,将所述堆栈指针寄存器从指向所述第一堆栈改变为指向所述第二堆栈;
从所述第一函数调用所述第二函数;
使用所述第二堆栈执行所述第二函数;
在所述第二函数完成时,将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈;
返回到所述第一应用程序;并且
继续使用所述第一堆栈执行所述第一应用程序。


2.如权利要求1所述的装置,其中将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈包括:
确定所述堆栈指针寄存器在执行所述第二函数之前从指向所述第一堆栈被改变为指向所述第二堆栈;以及
至少部分地基于确定所述堆栈指针寄存器在执行所述第二函数之前从指向所述第一堆栈被改变为指向所述第二堆栈,将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈。


3.如权利要求1所述的装置,其中所述第一应用程序和所述第二应用程序在由所述至少一个处理器执行时,进一步指引所述至少一个处理器:
在调用所述第二函数之前,将位于所述第一堆栈上的第一数据值从所述第一堆栈复制到所述第二堆栈;以及
在将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈之后,将位于所述第二堆栈上的第二数据值从所述第二堆栈复制到所述第一堆栈。


4.如权利要求3所述的装置,其中将位于所述第一堆栈上的第一数据值从所述第一堆栈复制到所述第二堆栈包括将待由所述至少一个处理器执行的指令的地址从所述第一堆栈复制到所述第二堆栈。


5.如权利要求4所述的装置,其中将位于所述第一堆栈上的第一数据值从所述第一堆栈复制到所述第二堆栈还包括将已保存到所述第一堆栈的暂存寄存器值从所述第一堆栈复制到所述第二堆栈。


6.如权利要求5所述的装置,其中将位于所述第二堆栈上的第二数据值从所述第二堆栈复制到所述第一堆栈包括将待由所述至少一个处理器执行的指令的另一个地址和已保存到所述第二堆栈的暂存寄存器值从所述第二堆栈复制到所述第一堆栈。


7.如权利要求1所述的装置,其中所述第一应用程序和所述第二应用程序在由所述至少一个处理器执行时,进一步指引所述至少一个处理器:
执行所述第二应用程序,其中在执行所述第二应用程序时,所述堆栈指针寄存器指向所述第二堆栈;并且
在执行所述第二应用程序时:
调用所述第二应用程序的所述第一函数,其中调用所述第一函数包括将数据值推送到所述第二堆栈上;
执行所述第一函数,其中执行所述第一函数包括确定所述堆栈指针寄存器是正在指向所述第一堆栈还是正在指向所述第二堆栈;
至少部分地基于确定所述堆栈指针寄存器正在指向所述第二堆栈,保持所述堆栈指针寄存器指向所述第二堆栈;
从所述第一函数调用所述第二函数;以及
使用所述第二堆栈执行所述第二函数。


8.如权利要求1所述的装置,其中所述第一应用程序和所述第二应用程序在由所述至少一个处理器执行时,进一步指引所述至少一个处理器:
在将所述堆栈指针寄存器从指向所述第一堆栈改变为指向所述第二堆栈之前,将所述至少一个过程配置为不允许进程或线程交换,直到将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈为止。


9.如权利要求1所述的装置,其中执行所述第二函数包括:
经由网络接口控制器接收第三应用程序;
将所述第三应用程序存储在所述至少一个存储器模块中;以及
在所述至少一个存储器模块内用所述第三应用程序覆写所述第一应用程序。


10.如权利要求1所述的装置,
其中所述第二应用程序还包括第三函数和第四函数;
其中执行所述第一函数还包括:
从所述第一函数调用所述第三函数并且执行所述第三函数,其中所述第三函数将所述堆栈指针寄存器从指向所述第一堆栈改变为指向所述第二堆栈;以及
从所述第一函数调用所述第四函数并且执行所述第四函数,其中所述第四函数将所述堆栈指针寄存器从指向所述第二堆栈改变为指向所述第一堆栈;并且
其中所述第一函数在调用所述第二函数之前调用所述第三函数,并且在执行所述第二函数之后调用所述第四函数。


11.如权利要求1所述的装置,其中所述第一应用程序、所述第一函数和所述第二函数在一个进程或一个线程下执行。


12.一种由至少一个处理器执行的方法,其中所述至少一个处理器通信地耦合到至少一个存储器模块,所述至少一个存储器模块在其上存储有第一应用程序的软件指令和第二应用程序的软件指令,其中所述第二应用程序包括第一函数和第二函数,并且其中所述第一应用程序具有与其相关联的第一堆栈,并且所述第二应用程序具有与其相关联的第二堆栈,所述方法包括:
由所述至少一个处理器执行所述第一应用程序,其中在执行所述第一应用程序时,堆栈指针寄存器指向所述第一堆栈;
在执行所述第一应用程序时,由所述至少一个处理器调用所述第二应用程序的所述第一函数,其中调用所述第一函数包括将数据值推送到所述第一堆栈上,并且其中所述堆栈指针寄存器在将所述数据值推送到所述第一堆栈上之后指向所述第一堆栈;
由所述至少一个处理器执行所述第一函数,其中执行所述第一函数包括确定所述堆栈指针寄存器是正在指向所述第一堆栈还是正在指向所述第二堆栈;
至少部分地基于确定所述堆栈指针寄存器正在指向所述第一堆栈,由所述至少一个处理器将所述堆栈指针寄存器从指向所述第一堆栈改变为指向所述第二堆栈;
由所述至少一个处理器从...

【专利技术属性】
技术研发人员:N·B·埃斯善斯F·卡鲁热
申请(专利权)人:路创技术有限责任公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1