【技术实现步骤摘要】
【国外来华专利技术】用于独立定义的操作的堆栈安全相关申请的交叉引用本申请要求于2017年8月24日提交的美国临时专利申请号62/549,637的权益,该临时专利申请的全部内容以引用的方式并入本文。
技术介绍
当计算设备执行进行函数调用的应用程序时,计算设备可以在进行函数调用时使用堆栈来存储例如寄存器值、函数参数值、返回地址和局部变量。
技术实现思路
根据一个示例,一种装置可以包括至少一个处理器,并且还可以包括通信地耦合到该至少一个处理器的至少一个有形存储器模块。该至少一个有形存储器模块可以已经在其上存储有第一应用程序的软件指令和第二应用程序的软件指令,其中第二应用程序可以包括第一函数和第二函数,并且其中第一应用程序可以具有与其相关联的第一堆栈,并且第二应用程序可以具有与其相关联的第二堆栈。第一应用程序和第二应用程序的软件指令在由至少处理器执行时可以指引至少一个处理器执行第一应用程序,其中在执行第一应用程序时,堆栈指针寄存器可以指向第一堆栈。软件指令在由至少处理器执行时可以进一步指引该至少处理器在执行第一应用程序时调用第二应用程序的第一函数,其中调用该第一函数可以包括将数据值推送到第一堆栈上,并且其中堆栈指针寄存器可以在将数据值推送到第一堆栈上之后指向第一堆栈。软件指令在由至少一个处理器执行时可以进一步指引至少处理器执行第一函数,其中执行该第一函数可以包括确定堆栈指针寄存器是正在指向第一堆栈还是正在指向第二堆栈。至少部分地基于确定堆栈指针寄存器正在指向第一堆栈,软件指令在由至少处理器执行时可以进一步指引至少处理器使堆栈指针寄存器从指 ...
【技术保护点】
1.一种装置,其包括:/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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。