实现堆栈自适应保护的处理器的制作方法

文档序号:12801476阅读:162来源:国知局
实现堆栈自适应保护的处理器的制作方法与工艺

本发明涉及处理器技术领域,尤其涉及一种实现堆栈自适应保护的处理器。



背景技术:

随着移动支付等技术的快速普及,处理器的安全问题越来越重要。堆栈作为内存中用于存放处理器数据的空间,其中往往包含大量敏感数据,如果这些敏感数据被破坏,则会造成程序运行失败或者敏感数据泄露等严重问题。

另外,由于堆栈空间往往与指令空间使用同一片地址空间,因此,若堆栈结构被破坏,在堆栈结构中存放的数据被损坏的同时,很有可能指令信息也会被恶意篡改。常见的对处理器攻击手段中,缓冲区溢出攻击就是通过向缓冲区(例如堆栈)内不断填充非法数据,直到数据容量超出了该缓冲区容量,从而将非法溢出覆盖到与堆栈空间相邻空间上,从而达到使处理器使用该攻击者指定的指令以及数据,达到破坏原有程序正常功能或者窃取敏感数据等目的。

针对上述安全攻击,通常的做法是通过软件对堆栈进行保护,即在执行相关堆栈操作时,事先通过额外的指令对该堆栈操作内存访问指令的地址合法性进行检查,确保堆栈操作符合预期。

在实现本发明的过程中,发明人发现现有技术中至少存在如下技术问题:

现有的基于软件的堆栈保护方式不仅会显著增加程序的代码空间,从而影响程序的执行效率。为了规避上述缺点,现有很多应用程序均默认数据长度与事先分配的堆栈空间相匹配,但是这样的做法又会大大降低整个系统的安全性。



技术实现要素:

本发明提供的一种实现堆栈自适应保护的处理器,能够在保证现有程序空间以及程序执行效率不变的前提下,提供一种通过硬件实现堆栈自适应保护的处理器。

本发明提供一种实现堆栈自适应保护的处理器,所述处理器包括指令获取单元、指令译码单元、地址加法器、超级用户堆栈指针寄存器、普通用户堆栈指针寄存器、堆栈上边界寄存器、堆栈下边界寄存器和堆栈保护单元,所述处理器能够访问的内存空间包括指令区、专属内存区域、普通用户堆栈区和超级用户堆栈区;

所述指令获取单元,用于从所述指令区中获取所述堆栈读写指令,并发送所述堆栈读写指令至所述指令译码单元;

所述指令译码单元,用于对所述堆栈读写指令进行译码以得到所述内存访问偏移量,并发送所述内存访问偏移量至所述地址加法器;

所述超级用户堆栈指针寄存器,用于当所述处理器处于超级用户模式时,发送所述超级用户堆栈区的基地址至所述地址加法器;

所述普通用户堆栈指针寄存器,用于当所述处理器处于普通用户模式时,发送所述普通用户堆栈区的基地址至所述地址加法器;

所述地址加法器,用于根据所述内存访问偏移量和所述超级用户堆栈区的基地址生成所述超级用户堆栈区的访问地址,或者,根据所述内存访问偏移量和所述普通用户堆栈区的基地址生成所述普通用户堆栈区的访问地址;

所述堆栈上边界寄存器,用于从所述专属内存区域读取并写入普通用户堆栈区的上边界值或者超级用户堆栈区的上边界值;

所述堆栈下边界寄存器,用于从所述专属内存区域读取并写入普通用户堆栈区的下边界值或者超级用户堆栈区的下边界值;

所述堆栈保护单元,用于实时监测对应堆栈区的访问地址是否发生堆栈越界,并在监测到发生堆栈越界时触发堆栈越界报错。

可选地,所述堆栈上边界寄存器,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,将所述堆栈上边界寄存器中的超级用户堆栈区的上边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入普通用户堆栈区的上边界值;或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,将所述堆栈上边界寄存器中的普通用户堆栈区的上边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入所述超级用户堆栈区的上边界值。

可选地,所述堆栈下边界寄存器,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,将所述堆栈下边界寄存器中的超级用户堆栈区的下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入普通用户堆栈区的下边界值;或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,将所述堆栈下边界寄存器中的普通用户堆栈区的下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入所述超级用户堆栈区的下边界值。

可选地,所述堆栈保护单元,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,清除超级用户模式的堆栈越界使能位,开启普通用户模式的堆栈越界使能位,实时监测普通用户堆栈区的访问地址是否超出普通用户堆栈区的边界值,并当普通用户堆栈区的访问地址超出普通用户堆栈区的边界值时触发堆栈越界报错;

或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,清除普通用户模式的堆栈越界使能位,开启超级用户模式的堆栈越界使能位,实时监测超级用户堆栈区的访问地址是否超出超级用户堆栈区的边界值,并当超级用户堆栈区的访问地址超出超级用户堆栈区的边界值时触发堆栈越界报错。

可选地,所述堆栈保护单元,还用于设置所述普通用户堆栈区的边界值和所述超级用户堆栈区的边界值,将所述普通用户堆栈区的边界值和所述超级用户堆栈区的边界值存储至所述专属内存区域。

可选地,所述堆栈保护单元进行堆栈越界监测所针对的堆栈读写指令为所有类型的堆栈读写指令或者部分特定类型的堆栈读写指令。

可选地,所述堆栈上边界寄存器和所述堆栈下边界寄存器均为通用寄存器或者控制寄存器。

可选地,所述堆栈保护单元,用于在监测到发生堆栈越界时通过触发异常的方式进行堆栈越界报错。

可选地,所述堆栈保护单元,用于在监测到发生堆栈越界时通过触发处理器跳转到特定的堆栈越界处理程序的方式进行堆栈越界报错。

本发明实施例提供的实现堆栈自适应保护的处理器,所述处理器包括指令获取单元、指令译码单元、地址加法器、超级用户堆栈指针寄存器、普通用户堆栈指针寄存器、堆栈上边界寄存器、堆栈下边界寄存器和堆栈保护单元,所述处理器能够访问的内存空间包括指令区、专属内存区域、普通用户堆栈区和超级用户堆栈区。与现有技术相比,本发明能够在保证现有程序空间以及程序执行效率不变的前提下,提供一种通过硬件实现堆栈自适应保护的处理器。

附图说明

图1为本发明一实施例实现堆栈自适应保护的处理器的结构示意图;

图2为本发明的实现堆栈自适应保护的处理器进行堆栈自适应保护的工作机制示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种实现堆栈自适应保护的处理器,如图1所示,所述处理器包括指令获取单元11、指令译码单元12、地址加法器13、超级用户堆栈指针寄存器14、普通用户堆栈指针寄存器15、堆栈上边界寄存器16、堆栈下边界寄存器17和堆栈保护单元18,所述处理器能够访问的内存空间包括指令区、专属内存区域、普通用户堆栈区和超级用户堆栈区;

所述指令获取单元11,用于从所述指令区中获取所述堆栈读写指令,并发送所述堆栈读写指令至所述指令译码单元12;

所述指令译码单元12,用于对所述堆栈读写指令进行译码以得到所述内存访问偏移量,并发送所述内存访问偏移量至所述地址加法器13;

所述超级用户堆栈指针寄存器14,用于当所述处理器处于超级用户模式时,发送所述超级用户堆栈区的基地址至所述地址加法器13;

所述普通用户堆栈指针寄存器15,用于当所述处理器处于普通用户模式时,发送所述普通用户堆栈区的基地址至所述地址加法器13;

所述地址加法器13,用于根据所述内存访问偏移量和所述超级用户堆栈区的基地址生成所述超级用户堆栈区的访问地址,或者,根据所述内存访问偏移量和所述普通用户堆栈区的基地址生成所述普通用户堆栈区的访问地址;

所述堆栈上边界寄存器16,用于从所述专属内存区域读取并写入普通用户堆栈区的上边界值或者超级用户堆栈区的上边界值;

所述堆栈下边界寄存器17,用于从所述专属内存区域读取并写入普通用户堆栈区的下边界值或者超级用户堆栈区的下边界值;

所述堆栈保护单元18,用于实时监测对应堆栈区的访问地址是否发生堆栈越界,并在监测到发生堆栈越界时触发堆栈越界报错。

具体地,如图1中实线箭头所示,所述处理器处于普通用户模式,此时,所述堆栈保护单元18,用于实时监测普通用户堆栈区的访问地址是否发生堆栈越界,并在监测到发生堆栈越界时触发堆栈越界报错。

同样地,如图1中的虚心箭头所示,当所述处理器处于超级用户模式时,所述堆栈保护单元18,用于实时监测超级用户堆栈区的访问地址是否发生堆栈越界,并在监测到发生堆栈越界时触发堆栈越界报错。

本发明实施例提供的实现堆栈自适应保护的处理器,所述处理器包括指令获取单元、指令译码单元、地址加法器、超级用户堆栈指针寄存器、普通用户堆栈指针寄存器、堆栈上边界寄存器、堆栈下边界寄存器和堆栈保护单元,所述处理器能够访问的内存空间包括指令区、专属内存区域、普通用户堆栈区和超级用户堆栈区。与现有技术相比,本发明能够在保证现有程序空间以及程序执行效率不变的前提下,提供一种通过硬件实现堆栈自适应保护的处理器。

可选地,所述堆栈上边界寄存器16,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,将所述堆栈上边界寄存器中的超级用户堆栈区的上边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入普通用户堆栈区的上边界值;或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,将所述堆栈上边界寄存器中的普通用户堆栈区的上边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入所述超级用户堆栈区的上边界值。

可选地,所述堆栈下边界寄存器17,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,将所述堆栈下边界寄存器中的超级用户堆栈区的下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入普通用户堆栈区的下边界值;或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,将所述堆栈下边界寄存器中的普通用户堆栈区的下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入所述超级用户堆栈区的下边界值。

可选地,所述堆栈保护单元18,用于当监测到所述处理器由超级用户模式切换至普通用户模式时,清除超级用户模式的堆栈越界使能位,开启普通用户模式的堆栈越界使能位,实时监测普通用户堆栈区的访问地址是否超出普通用户堆栈区的边界值,并当普通用户堆栈区的访问地址超出普通用户堆栈区的边界值时触发堆栈越界报错;

或者,当监测到所述处理器由普通用户模式切换至超级用户模式时,清除普通用户模式的堆栈越界使能位,开启超级用户模式的堆栈越界使能位,实时监测超级用户堆栈区的访问地址是否超出超级用户堆栈区的边界值,并当超级用户堆栈区的访问地址超出超级用户堆栈区的边界值时触发堆栈越界报错。

进一步地,所述堆栈保护单元18,还用于设置所述普通用户堆栈区的边界值和所述超级用户堆栈区的边界值,将所述普通用户堆栈区的边界值和所述超级用户堆栈区的边界值存储至所述专属内存区域。

可选地,所述堆栈保护单元18进行堆栈越界监测所针对的堆栈读写指令为所有类型的堆栈读写指令或者部分特定类型的堆栈读写指令。

可选地,所述堆栈上边界寄存器16和所述堆栈下边界寄存器17均为通用寄存器或者控制寄存器。

可选地,所述堆栈保护单元18,用于在监测到发生堆栈越界时通过触发异常的方式进行堆栈越界报错。

具体地,堆栈保护单元监测到堆栈越界后,通过触发异常的方式进行报错。若处理器中异常被使能,正常触发与该堆栈越界相对应的异常;若处理器中异常未被使能,则触发不可恢复异常,指示该堆栈越界情况。

可选地,所述堆栈保护单元18,用于在监测到发生堆栈越界时通过触发处理器跳转到特定的堆栈越界处理程序的方式进行堆栈越界报错。

具体地,堆栈保护单元监测到堆栈越界后,也可以通过触发处理器跳转到特定的堆栈越界处理程序进行报错。在监测到堆栈越界后,不论处理器中异常是否使能,均通过子程序调用的方式跳转到对应堆栈越界处理程序,同时将返回地址保存到链接寄存器中,在该越界处理程序执行完毕后,处理器通过跳转指令跳转到该链接寄存器的方式,返回触发该堆栈越界的内存访问指令的下一跳指令继续执行。

如图2所示,为本发明的实现堆栈自适应保护的处理器进行堆栈自适应保护的工作机制示意图,具体描述了处理器在普通用户模式与超级用户模式之间切换时堆栈保护单元是如何工作的,具体的工作机制如下:

1)处理器在a点开始一个程序任务。

此时,处理器处于普通用户模式,处理器先从所述专属内存区域读取并写入普通用户堆栈区的上边界值和下边界值至堆栈上边界寄存器以及堆栈下边界寄存器中,随后,处理器开启普通用户模式的堆栈越界使能位。

此后,如果处理器执行堆栈读写指令,则该堆栈读写指令以普通用户堆栈指针寄存器为基地址,对普通用户堆栈区进行访问。同时堆栈保护单元根据堆栈上边界寄存器和下边界寄存器中设置的边界值,对普通用户堆栈区进行保护,当监测到堆栈越界时触发报错。

2)处理器运行到b点响应中断,中断需要进入超级用户模式进行处理。

3)处理器运行到c点,即处理器切换到超级用户模式。

此时,处理器清除普通用户模式的越界检查使能位,处理器先将所述堆栈下边界寄存器中的普通用户堆栈区的上边界值和下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入超级用户堆栈区的上边界值和下边界值至堆栈上边界寄存器和堆栈下边界寄存器中,随后,处理器开启超级用户模式的堆栈越界使能位。

此后,如果处理器执行堆栈读写指令,则该堆栈读写指令以超级用户堆栈指针寄存器为基地址,对超级用户堆栈区进行访问。同时堆栈保护单元根据堆栈上边界寄存器和下边界寄存器中设置的边界值,对超级用户堆栈区进行保护,当监测到堆栈越界时触发报错。

4)处理器在d点对中断进行处理,处理完毕后运行到e点。

此时,处理器清楚超级用户模式的堆栈越界检查使能位,处理器将所述堆栈下边界寄存器中的超级用户堆栈区的上边界值和下边界值存储至所述专属内存区域,并从所述专属内存区域读取并写入普通用户堆栈区的上边界值和下边界值至堆栈上边界寄存器和堆栈下边界寄存器中,随后,处理器开启普通用户模式的堆栈越界使能位,处理器执行中断返回指令,从超级用户模式返回到普通用户模式。

5)当处理器处理完中断后返回f点,该f点处的指令为处理器响应中断的b点处指令的后续指令,此时如果处理器执行堆栈读写指令,则该指令以普通用户堆栈指针寄存器为基地址,对普通用户堆栈区进行访问。同时堆栈保护单元根据堆栈上边界寄存器和下边界寄存器中设置的边界值,对普通用户堆栈区进行保护,当监测到堆栈越界时触发报错。

6)处理器运行到g点,完成a点处开始的程序任务。整个程序运行过程中,a、b、f、g均为普通用户模式,用于完成普通的程序任务;c、d、e均为超级用户模式,用于完成中断对应的程序任务,其中点c和e用于进行堆栈边界信息的保存和加载,这两点运行过程中,会发生堆栈指针寄存器与堆栈边界寄存器中的堆栈上下边界值分别属于不同模式的情况,为了保证程序正常运行,处理器在c和e点起始处均通过软件控制清除堆栈越界检查使能位,关闭堆栈越界检查功能。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1