在硬件管理的堆栈架构中受调用者保护的堆栈返回地址制造技术

技术编号:18824754 阅读:37 留言:0更新日期:2018-09-01 13:41
通过使用放置在程序堆栈中的防护字来检测程序堆栈的损坏。在处理器上运行的被调用例程检查调用例程堆栈中的防护字。检查确定防护字是否具有预期值。基于确定防护字具有意外值,提供堆栈损坏的指示。然而,一些例程可能不支持使用防护字。因此,相互关联的例程可能具有不同的保护能力。确定不同的保护能力,提供相同的指示,并且由于不同的保护能力而运行例程而不失败。

【技术实现步骤摘要】
【国外来华专利技术】在硬件管理的堆栈架构中受调用者保护的堆栈返回地址
技术介绍
一个或多个方面总体上涉及计算环境内的处理,并且特别的涉及保护计算环境的数据保护。计算机程序的损坏可能以多种形式发生。一种这样的形式是数据覆盖导致程序执行意外任务或返回到意外地址。这种损坏可能是无恶意的或有恶意的。作为特定示例,损坏可能出现在计算机程序使用的调用堆栈(也称为堆栈)中,以存储关于计算机程序的活跃的子例程的信息。例如,堆栈被用来跟踪活跃的子例程应该在该例程完成运行时返回的控制点(即返回地址)。活跃的子例程是一个已被调用但尚未完成运行的子例程。子例程的这种激活可以嵌套到任何级别(作为特殊情况递归),因此是堆栈结构。通过覆盖返回地址,堆栈可能会被破坏,从而使被调用的子例程返回到意外的位置。再一次,返回地址的覆盖可能是无恶意的或有恶意的,但无论如何,都要被检测和计划,使得程序或其他数据不被损坏。
技术实现思路
通过提供用于检测计算环境的堆栈的损坏的计算机程序产品来克服现有技术的缺点并提供附加的优点。该计算机程序产品包括计算机可读存储介质,该计算机可读存储介质可由处理电路读取并存储供处理电路运行以执行方法的指令。该方法例如包括通过在计算环境的处理器上运行的被调用例程来检查由调用例程提供的防护字,调用例程已经调用了被调用例程,并且防护字被存储在调用例程的堆栈中,并通过硬件指令保护直接存储在堆栈中的返回地址;基于所述检查确定所述防护字是否具有期望值;并且基于确定防护字具有意外值,提供堆栈损坏的指示。这使调用者能够提供一个或多个被调用者检查的一个防护字。在一个实施例中,至少检查和确定是通过被调用例程发出的指令来执行的。作为一个例子,该指令被运行,并且该运行包括从该堆栈获得该防护字;移动堆栈的堆栈指针,使得防护字不再出现在堆栈上;以及执行一个或多个确定,检查和提供指示。在进一步的示例中,运行包括确定调用例程是否支持使用防护字来保护返回地址;并且基于确定调用例程支持使用防护字,执行获得,移动和执行。作为示例,使用指定防护字地址的存储防护字指令来提供防护字。在一个方面,指示符被设置为指示调用例程支持使用防护字来保护返回地址。在另一方面,确定调用例程和被调用例程是否支持使用防护字来保护返回地址。基于确定调用例程和被调用例程支持使用防护字来保护返回地址,执行一个或多个检查,确定和提供指示。在一个示例中,基于确定调用例程和被调用例程的至少一个例程不支持使用防护字来保护返回地址,在检查之前终止处理。这可能会提高系统性能。在一个方面中,确定调用例程和被调用例程是否支持使用防护字来保护返回地址包括检查至少一个指示符。作为一个例子,至少一个指示符被存储在指示符向量中。与一个或多个方面有关的计算机实现的方法和系统也在本文中描述和要求保护。此外,与一个或多个方面有关的服务也被描述并且可以在此要求保护。通过本文描述的技术实现附加的特征和优点。其他实施例和方面在本文中详细描述并且被认为是所要求保护的方面的一部分。附图说明在说明书结尾处的权利要求书中特别指出并明确要求一个或多个方面作为示例。根据以下结合附图的详细描述,一个或多个方面的上述和目的,特征和优点是显而易见的,其中:图1描绘了并入和/或使用本专利技术的一个或多个方面的计算环境的计算机系统/服务器的一个示例。图2A描绘了并入和/或使用本专利技术的一个或多个方面的计算环境的另一示例。图2B描绘了图2A的存储器的进一步细节。图3A描述了根据本专利技术的一个方面所使用的堆栈的一个例子。图3B描述了缓冲区溢出的一个例子。图4A-4E描绘了根据本专利技术的一个方面使用的堆栈帧和防护字的例子;图5A-5B描绘了根据本专利技术的一个方面的检测堆栈损坏的逻辑的一个实施例;图6描绘了根据本专利技术的一个方面的存储防护字指令的一个例子;图7描述了根据本专利技术的一个方面的防护字寄存器的一个例子;图8描绘了根据本专利技术的一个方面的POPCHECK指令的一个例子;图9描绘了根据本专利技术的一个方面的静态链接器的逻辑的一个示例;图10描绘了根据本专利技术的一个方面的动态链接器的逻辑的一个例子;图11描绘了根据本专利技术的一个方面的存储防护字条件指令的逻辑的一个示例;图12描绘了根据本专利技术的一个方面的POPCHECK条件指令的逻辑的一个例子;图13描绘了根据本专利技术的一个方面使用的指示符的使能向量的一个例子;图14描述了根据本专利技术的一个方面的存储防护字条件指令的逻辑的另一个例子;图15描绘了根据本专利技术的一个方面的POPCHECK条件指令的逻辑的另一个例子;图16A和16B描绘了根据本专利技术的一个方面的与检测堆栈损坏有关的逻辑的一个例子;图17描绘了云计算环境的一个实施例;和图18描绘了抽象模型层的一个例子。具体实施方式一个或多个方面涉及使用防护字(guardword)来保护调用堆栈。防护字包含在调用堆栈中,并由一个或多个被调用的例程检查。如果检查结果表明防护字与预期不同(即,已被改变),则提供损坏堆栈的指示。在一个示例中,为了防止来自恶意系统用户的代码注入/运行攻击,提供架构的防护字指令(例如,硬件指令)以初始化和验证堆栈防护字。使用防护字指令可以有助于使用防护字和/或增强系统安全性。在又一方面中,认识到并非所有可以例如通过从例程或其他方式调用而彼此链接的例程或模块(例如,一个或多个例程)可以支持防护字保护功能,因此提供了一个或多个特征,使得具有不同保护能力的这些例程或模块能够相互链接而不会导致致命的错误。参照图1描述了并入和/或使用本专利技术的一个或多个方面的计算环境的一个实施例。在一个示例中,计算环境100包括至少一个计算机系统/服务器102,其与许多其他通用或专用计算系统环境或配置一起操作。可适用于计算机系统/服务器102的公知计算系统,环境和/或配置的示例包括但不限于个人计算机系统,服务器计算机系统,瘦客户机,胖客户机,手持式或膝上型设备,多处理器系统,基于微处理器的系统,机顶盒,可编程消费电子产品,网络PC,小型计算机系统,大型计算机系统和包括任何上述系统或设备的分布式云计算环境等。计算机系统/服务器102可以在由计算机系统运行的指令的一般的上下文中描述,诸如程序模块的指令可以在计算机系统中运行。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程,程序,对象,组件,逻辑,数据结构等等。如图所示,在图1中,计算机系统/服务器102以通用计算设备的形式示出。计算机系统/服务器102的组件可以包括但不限于一个或多个处理器或处理单元106,系统存储器108以及将包括系统存储器108的各种系统组件耦合到处理器106的总线110。在一个实施例中,处理器106基于由国际商业机器公司提供的z/体系结构或由国际商业机器公司提供的其他体系结构。z/Architecture是位于美国纽约阿芒克的国际商业机器公司的注册商标。此处使用的其他名称可以是国际商业机器公司或其他公司的注册商标,商标或产品名称。z/Architecture的一个实施例在“z/ArchitecturePrinciplesofOperation”,IBMPublicationNo.SA22-7832-10,2015年3月中描述,其全部内容通过引用合并于此。在其他示例中,处理器106可以基于其他体系结构,诸如由加利福尼亚州圣克本文档来自技高网...

【技术保护点】
1.一种用于检测计算环境的堆栈的损坏的计算机程序产品,所述计算机程序产品包括:计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并存储用于由所述处理电路运行的方法的指令,以执行方法包括:由被调用例程在计算环境的处理器上运行,检查由调用例程提供的防护字,调用例程调用了被调用例程,并且防护字被存储在调用例程的堆栈中并且保护通过硬件指令直接存储到堆栈中的返回地址;基于所述检查确定所述防护字是否具有期望值;和基于确定防护字具有意外值,提供堆栈损坏的指示。

【技术特征摘要】
【国外来华专利技术】2016.01.06 US 14/989,3971.一种用于检测计算环境的堆栈的损坏的计算机程序产品,所述计算机程序产品包括:计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并存储用于由所述处理电路运行的方法的指令,以执行方法包括:由被调用例程在计算环境的处理器上运行,检查由调用例程提供的防护字,调用例程调用了被调用例程,并且防护字被存储在调用例程的堆栈中并且保护通过硬件指令直接存储到堆栈中的返回地址;基于所述检查确定所述防护字是否具有期望值;和基于确定防护字具有意外值,提供堆栈损坏的指示。2.如权利要求1所述的计算机程序产品,其中至少所述检查和所述确定是通过由所述被调用例程发布的指令来执行的。3.如权利要求2所述的计算机程序产品,其中所述方法还包括运行所述指令,所述运行包括:从堆栈中获得防护字;移动堆栈的堆栈指针,使得防护字不再出现在堆栈上;和执行确定,检查和提供指示中的一个或多个。4.如权利要求3所述的计算机程序产品,其中所述运行还包括:确定调用例程是否支持使用防护字来保护返回地址;和基于确定调用例程支持使用防护字,执行获得,移动和执行。5.根据权利要求1所述的计算机程序产品,其中所述防护字是使用指定防护字地址的存储防护字指令提供的。6.如权利要求1所述的计算机程序产品,其中所述方法进一步包括:使用存储防护字指令提供防护字;和设置一个指示器来指示调用例程支持使用防护字来保护返回地址。7.如权利要求1所述的计算机程序产品,其中所述方法还包括:确定调用例程和被调用例程是否支持使用防护字来保护返回地址;和基于确定调用例程和被调用例程支持使用防护字来保护返回地址,执行检查,确定和提供指示中的一个或多个。8.如权利要求7所述的计算机程序,其中,所述方法还包括基于确定调用例程和被调用例程的至少一个例程不支持使用防护字来保护返回地址,在检查之前终止处理。9.如权利要求7所述的计算机程序产品,其中确定调用例程和被调用例程是否支持使用防护字来保护返回地址包括检查至少一个指示符。10.如权利要求9所述的计算机程序产品,其中,所述至少一个指示符被存储在指示符的向量中。11.一种用于检测计算环境的堆栈的损坏的计算机系统,所述计算机系统包括:存储器;和与所述存储器通信的处理器,其中所述计算机系统被配置为执行一种方法,所述方法包括:由被调用例程在计算环境的处理...

【专利技术属性】
技术研发人员:MK格施温德K杜瓦尔圣V萨拉普拉
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:美国,US

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

1