CN107667372A - 用于保护影子栈的处理器、方法、系统和指令 - Google Patents

用于保护影子栈的处理器、方法、系统和指令 Download PDF

Info

Publication number
CN107667372A
CN107667372A CN201680029980.5A CN201680029980A CN107667372A CN 107667372 A CN107667372 A CN 107667372A CN 201680029980 A CN201680029980 A CN 201680029980A CN 107667372 A CN107667372 A CN 107667372A
Authority
CN
China
Prior art keywords
instruction
ssp
shadow stack
processor
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201680029980.5A
Other languages
English (en)
Inventor
V·尚伯格
J·W·布兰德特
R·L·萨希塔
B·E·亨特利
B·V·帕特尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Priority to CN202110256487.XA priority Critical patent/CN112988624A/zh
Priority to CN202410128866.4A priority patent/CN117873922A/zh
Publication of CN107667372A publication Critical patent/CN107667372A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)
  • Advance Control (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Peptides Or Proteins (AREA)

Abstract

本发明的一方面的处理器包括用于对指令进行解码的解码单元。所述处理器还包括与所述解码单元耦合的执行单元。所述执行单元响应于所述指令而用于确定:由于所述指令而导致的对影子栈的影子栈指针的试图改变将使所述影子栈指针超出允许范围。所述执行单元还用于响应于确定对所述影子栈指针的所述试图改变将使所述影子栈指针超出所述允许范围而引发异常。公开了其他处理器、方法、系统和指令。

Description

用于保护影子栈的处理器、方法、系统和指令
背景技术
技术领域
本文描述的实施例总体上涉及处理器。具体地,本文描述的实施例总体上涉及具有增强安全性的处理器。
技术背景
返回导向编程(ROP)和跳转导向编程(JOP)是攻击者可用于获得对计算机系统或其他电子设备的控制并执行恶意动作的计算机安全利用技术。在这些技术中,攻击者获得对调用栈的控制以便劫持程序控制流。
对调用栈的控制经常通过缓冲区溢出利用或攻击来实现。在缓冲区溢出中,在将数据存储到存储器中之前不充分执行边界检查的函数可以接受比可以适当存储的数据更多的数据。例如,攻击者可以向web浏览器发送比web浏览器可以适当存储的数据更多的数据。如果数据存储在栈上,则一些数据可能超出向所述函数的变量分配的存储空间并且重写返回地址。返回地址可以表示通过调用程序指令存储在所述栈上的地址,所述调用程序指令旨在用于在被调用程序已经完成之后将控制流重定向回到调用函数。然而,在缓冲区溢出攻击或利用中,可以使用不同返回地址来重写返回地址。这可能允许攻击者将控制流转移到不同返回地址、在不同返回地址处开始执行代码并且执行可能不期望和/或恶意的动作。
例如,在ROP攻击中,攻击者可以将被称为“小程序(gadget)”的事物的序列链接在一起。每个小程序可以表示具有一个或几个指令的集合,随后是从程序返回指令。攻击者可以对代码(比如,应用、系统级代码、驱动程序、库等)进行分析以便定位或识别期望小程序。例如,攻击者可以扫描从程序返回指令的操作码。在这种被识别的从程序返回指令之前的先前指令可能表示不同类型的具有不同功能的小程序。通过示例的方式,攻击者可以将返回指令之前的弹出栈指令(pop stack instruction)识别为第一小程序、将返回指令之前的寄存器到寄存器移动指令识别为第二小程序以此类推。在一些情况下,攻击者可以能够识别足够多的小程序以便能够串在一起并且执行各种不同的恶意动作。
典型地,初始地,缓冲区溢出攻击可以用于劫持栈上的返回地址并且由此劫持控制流。第一小程序的第一指令的地址可以存储在栈上以便将控制流转移到第一小程序。控制流可以转移至由攻击者选择的第一小程序的第一指令,而不是返回至与调用程序指令相关联的调用程序。然后,第一小程序的返回指令可以将控制流转移至第二小程序。以此方式,一系列小程序的返回地址可以被顺序地存储在栈上并且根据链接小程序的返回指令跳转。通过按特定顺序将小程序链接在一起,攻击者可以能够从现有代码中创建新的程序功能。攻击者可能将这种一点用于不期望或有害目的,如例如,窃取机密信息、干扰或攻击其他应用、发送邮件、发送文本消息、发布推文或利用内核漏洞。
附图说明
可以通过参考以下用于展示实施例的描述和附图来最佳地理解本发明。在附图中:
图1是可以实施本发明的实施例的计算机系统的实施例的框图。
图2是一组影子栈寄存器的实施例和一组影子栈描述符表寄存器的实施例的框图。
图3是影子栈描述符表的实施例的框图。
图4是适合影子栈描述符表(SSDT)条目的一个特定示例实施例的框图。
图5是影子栈描述符表选择符的示例实施例的框图。
图6是32位任务状态片段(Task State Segment)结构的示例实施例的实施例的框图。
图7是64位任务状态片段结构的示例实施例的框图。
图8是可操作用于执行调用程序指令的实施例和从程序返回指令的实施例的处理器的实施例的框图。
图9是执行保存影子栈指针指令的实施例的方法的实施例的方框流程图。
图10是可操作用于执行保存影子栈指针指令的实施例的处理器的实施例的框图。
图11是执行恢复影子栈指针指令的实施例的方法的实施例的方框流程图。
图12是可操作用于执行恢复影子栈指针指令的实施例的处理器的实施例的框图。
图13A是框图,展示了有序流水线的实施例和寄存器重命名无序发出/执行流水线的实施例。
图13B是处理器核的实施例的框图,所述处理器核包括耦合至执行引擎单元的前端单元,并且所述前端单元和执行引擎单元两者都耦合至存储器单元。
图14A是单个处理器核的实施例连同其与管芯上互连网络的连接以及连同其2级(L2)高速缓存的本地子集的框图。
图14B是图14A的处理器核的一部分的展开视图的实施例的框图。
图15是可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形的处理器的实施例的框图。
图16是计算机架构的第一实施例的框图。
图17是计算机架构的第二实施例的框图。
图18是计算机架构的第三实施例的框图。
图19是计算机架构的第四实施例的框图。
图20是根据本发明的实施例的使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文公开了影子栈保护指令、用于执行所述指令的处理器、由所述处理器在处理或执行所述指令时执行的方法以及结合用于处理或执行所述指令的一个或多个处理器的系统。还公开了影子栈保护逻辑。在以下描述中,阐述了许多具体细节(例如,具体指令操作、数据格式、处理器配置、微架构细节、操作序列等)。然而,可以在没有这些具体细节的情况下实践实施例。在其他实例中,未详细示出公知的电路、结构和技术以避免模糊对本说明书的理解。
图1是可以实施本发明的实施例的计算机系统100的实施例的框图。在各个实施例中,计算机系统可以表示台式计算机系统、膝上型计算机系统、笔记本计算机、平板计算机、上网本、便携式个人计算机、智能电话、蜂窝电话、服务器、网络元件(例如,路由器或交换机)、智能电视、上网机、机顶盒、视频游戏控制器、媒体播放器或另一种类型的计算机系统或电子设备。
计算机系统包括处理器101和存储器114。当处理器和存储器一起部署在系统中时,它们可以通过互连机构198彼此耦合。互连机构可以包括一条或多条总线或其他互连、一个或多个集线器或其他芯片组部件以及其组合。本领域中熟知的将处理器与存储器耦合的各种方式是适合的。尽管在所展示的实施例中示出了存储器,但是其他实施例涉及不与存储器单独耦合的处理器(例如,不被部署在计算机系统中)。不同类型的存储器的示例包括但不限于动态随机存取存储器(DRAM)、闪存以及通常用于主存储器的其他类型存储器。
存储器可以存储特权系统软件115。适合特权系统软件的示例包括但不限于一个或多个操作系统、虚拟机监视器(VMM)、管理程序等以及其组合。存储器还存储一个或多个用户级应用116。在一些实施例中,用户级应用可以可选地包括一个或多个用户级多线程应用。如以下将进一步解释的,这种用户级多线程应用可以可选地使用本文公开的指令来帮助提高执行用户级多线程化和/或执行用户级任务切换的效率。
在运行期间,存储器还可以存储栈119。栈有时候被称为调用栈、数据栈或仅被称为栈。栈可以表示可操作用于存储数据118和控制117两者的栈型数据结构。数据可以表示软件想要推入(push)到栈上的各种不同类型数据中的任何类型数据(例如,传递到子例程的参数和其他数据等)。通常,控制可以包括针对一个或多个之前执行的程序调用的一个或多个返回地址。这些返回地址可以表示指令地址,当被调用程序完成并返回时,被调用程序将把控制流返回至所述指令地址。
如在背景技术部分讨论的,在返回导向编程(ROP)、跳转导向编程(JOP)和其他控制流颠覆攻击中,攻击者经常试图获得对栈的控制以便劫持程序控制流。可能倾向于使常规数据栈更易遭受ROP、JOP或其他控制流颠覆攻击的一个因素是栈通常存储数据118和控制117(例如,在同一栈上,数据和返回地址通常被混合在一起)。可能倾向于使常规栈更易遭受这种攻击的另一个因素是通常可以将对栈的切换作为非特权操作来执行。由于允许对栈指针和/或控制流信息(例如,返回地址)进行修改(例如,以便指向恶意软件/攻击者控制的存储器)的漏洞,这些因素两者都可能倾向于增加暴露于控制流颠覆。
在一些实施例中,可以包括一个或多个影子栈120并且可以将其用于帮助保护栈119免于篡改和/或帮助增加计算机安全性。(多个)影子栈可以表示与栈119分离的一个或多个附加栈型数据结构。如所示出的,在一些实施例中,(多个)影子栈可以用于存储控制信息121而不是数据(例如,不是属于存储在栈上的类型的参数和其他数据,用户级应用程序将需要能够写入和修改所述参数和其他数据)。存储在(多个)影子栈上的控制信息可以表示返回地址相关信息(例如,实际返回地址、用于验证返回地址的信息、其他返回地址信息)。作为一个可能示例,(多个)影子栈可以用于:当函数或程序已经被调用时,存储已经被推入到栈119上任何返回地址的副本(例如,调用链中同样已经被推入到一般调用栈上的每个返回地址的副本)。在一些实施例中,每个影子栈还可以包括影子栈指针(SSP),所述SSP可操作用于识别影子栈的顶端。在一些实施例中,可选地,(多个)影子栈可以被配置成在非特权用户级模式下(例如,环3特权级)或在特权或管理程序特权级模式下(环0、环1或环2特权级)单独运行。一方面,多个影子栈可能被配置在系统中,但是一次仅可以将每逻辑处理器一个影子栈配置为当前影子栈。
如所示出的,可以将(多个)影子栈120存储在存储器114中。在一些实施例中,(多个)当前或活动影子栈可由线性地址范围限定以便帮助在对影子栈执行推入和/或弹出操作时检测和防止栈溢出和/或栈下溢。在一些实施例中,可选地,为了帮助提供附加保护,可以将(多个)影子栈存储在存储器的受保护或访问控制部分中,非特权用户级应用116对所述部分具有受限和/或不完全访问。提供存储器的适合受保护部分以供存储(多个)影子栈的不同方式是有可能的。在一些实施例中,可选地,可以将(多个)影子栈存储在存储器的通过分页访问控制保护的一部分中。例如,特权系统软件115(例如,操作系统)可以在与存储(多个)影子栈的页相对应的页表条目中配置访问权限(例如,读取-写入-执行访问权限)以便使页可读但不可写或不可执行。这可以有助于防止用户级指令(比如,存储到存储器指令、移动到存储器指令等)能够将数据写入(多个)影子栈中或修改其中的数据。作为另一个选项,在一些实施例中,可选地,可以将(多个)影子栈存储在存储器的使用类似访问控制保护(比如,用于软件防护扩展(SGX)安全飞地中的安全飞地或其他受保护容器、隔离执行环境等的访问控制保护)来保护的一部分中。
再次参照图1,在一些实施例中,处理器101可以是通用处理器(例如,属于通常用作台式计算机、膝上型计算机或其他计算机系统中的中央处理单元(CPU)的类型)。可替代地,处理器可以是专用处理器。适合的专用处理器的示例包括但不限于:网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器)。处理器可以具有以下架构中的任何架构:各种复杂指令集计算(CISC)架构、精简指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其他类型的架构,或者具有不同架构的组合(例如,不同核可以具有不同架构)。
在一些实施例中,处理器可以具有一个或多个指令或逻辑以便帮助管理和保护(多个)影子栈。处理器具有指令集102。指令集是处理器的指令集架构(ISA)的一部分并且包括本机指令,处理器可操作用于执行所述本机指令。指令集的指令可以表示如与已经从指令集的指令解码的微指令、微操作或其他经解码指令或控制信号相对的被提供给处理器以供执行的宏指令、汇编语言指令或机器级指令。
如所示出的,在所展示的实施例中,指令集包括调用程序或调用指令103的实施例。指令集还包括从程序返回指令或返回指令104的实施例。指令集还包括保存影子栈指针指令105的实施例。指令集还包括恢复影子栈指针指令106的实施例。在其他实施例中,可选地,处理器反而可以仅包括少至这些指令中的任何单个指令。实施例涉及用于执行(例如,解码和执行)这些指令中的任何一个或多个指令的处理器。其他实施例涉及执行(例如,解码和执行)这些指令中的任何指令的方法。
在一些实施例中,处理器可以包括至少一个处理元件或逻辑处理器108。为了简单起见,仅示出了单个逻辑处理器,尽管将理解,可选地,处理器可以包括其他逻辑处理器。适合逻辑处理器的示例包括但不限于核、硬件线程、线程单元、线程槽以及其他逻辑处理器。逻辑处理器可操作用于处理指令集的指令。逻辑处理器可以具有用于处理指令的流水线或逻辑。通过示例的方式,每条流水线可以包括用于获取指令的指令获取单元、用于对指令进行解码的指令解码单元、用于执行经解码指令的执行单元、用于存储指令的源和目的操作数的寄存器等等。本发明的范围不限于任何已知类型或设计的流水线。在一些实施例中,逻辑处理器可操作用于处理(例如,解码、执行等)调用指令、返回指令、保存影子栈指针指令以及恢复影子栈指针指令中的任何一个或多个指令。
如所示出的,所述至少一个处理元件或逻辑处理器108的逻辑中的至少一些可以是处理器的影子栈保护逻辑110的一部分。在一些实施例中,影子栈保护逻辑还可以包括可选的可配置影子栈模式111。影子栈模式可操作成被配置用于交替地启用或禁用影子栈。可替代地,可选地,可以总是启用影子栈,并且可选地,可以省略影子栈模式。影子栈保护逻辑还可以包括一个或多个影子栈寄存器112的实施例。(多个)影子栈寄存器可操作用于指定与当前影子栈有关的细节。
影子栈保护逻辑还可以包括一个或多个影子栈描述符表(SSDT)寄存器113的实施例。(多个)SSDT寄存器可操作用于指定与一个或多个SSDT 122有关的细节。如所示出的,可以将SSDT存储在存储器中。在一些实施例中,可以将(多个)SSDT存储在与(多个)影子栈相同或类似类型的受保护存储器中。在一些实施例中,(多个)SSDT可以表示可操作用于存储与(多个)影子栈有关的信息或细节的表或其他数据结构,相应程序可以使用所述(多个)影子栈和/或在其之间进行切换。通过示例的方式,特权系统软件(例如,操作系统)可以将与影子栈有关的细节存储在SSDT中。在一些实施例中,处理器可以使用SSDT来建立当前影子栈并且控制对影子栈的访问。通过示例的方式,SSDT可以具有多个条目,并且每个条目可以限定相应影子栈的允许程序在程序执行期间使用的范围。
图2是一组影子栈寄存器212的实施例和一组SSDT寄存器213的实施例的框图。影子栈寄存器和SSDT寄存器可以包括在处理器的一组控制寄存器224中。
影子栈寄存器可操作用于指定当前或活动影子栈的有效范围,所述有效范围用于保护存储器的用于存储当前或活动影子栈的那一部分并且控制对其的访问。在一些实施例中,所述范围可通过线性地址范围来指定。影子栈寄存器包括影子栈基址(SSP基址)寄存器225、影子栈界限(SSP界限)寄存器226以及影子栈指针(SSP)寄存器227。SSP基址寄存器可操作用于存储影子栈的基址。一方面,SSP基址可以是影子栈的最低线性地址。SSP界限寄存器可操作用于存储影子栈的界限。一方面,SSP基址可以是影子栈的最高线性地址。SSP基址到SSP界限可以一起指定某个存储器范围作为影子栈。处理器中的存储器访问控制(例如,存储器管理单元等)可以使用SSP基址和SSP界限来控制对影子栈的访问。在一些实施例中,用户级存储到存储器指令等可能不能写入到影子栈中。可由处理器的硬件防止写入或修改影子栈范围的尝试(例如,可以引发异常)。SSP寄存器可操作用于存储影子栈的当前顶端的地址。例如,SSP寄存器可以存储线性地址,所述线性地址表示影子栈的处于SSP基址与(SSP界限-1)之间的当前顶端。
SSDT寄存器213可操作用于指定当前或活动SSDT的有效范围,所述有效范围用于保护存储器的用于存储当前或活动SSDT的那一部分并且控制对其的访问。在一些实施例中,在给定时间在处理器中可能存在两种不同类型的活动SSDT。即,可能存在当前或活动特权级或管理程序SSDT(SSDT-S)以及当前或活动用户级SSDT(SSDT-U)。在一些实施例中,可以使用两个寄存器来将这些不同类型SSDT中的每种类型SSDT编程到处理器中。在一些实施例中,SSDT寄存器可以包括用于指定当前或活动用户级SSDT(SSDT-U)的有效范围的第一对寄存器228、229以及用于指定当前或活动管理程序SSDT(SSDT-S)的有效范围的第二对寄存器230、231。用户SSDT基址寄存器228可以将SSDT-U的基址指定为例如页对齐(例如,4K页对齐)的最低线性地址。用户SSDT界限寄存器229可以将SSDT-U的界限指定为例如页对齐的最高线性地址。管理程序SSDT基址寄存器230可以将SSDT-S的基址指定为例如页对齐的最低线性地址。管理程序SSDT界限寄存器231可以将SSDT-S的界限指定为例如页对齐的最高线性地址。管理程序SSDT(SSDT-S)可由特权系统软件(例如,操作系统)一次编程到处理器中,并且在那之后通常可能不需要对其进行改变。每用户进程可能存在在对新用户进程进行调度时活动的不同用户SSDT(SSDT-U)。
图3是SSDT 322的实施例的框图。SSDT可以表示可以存储在存储器中的表或其他数据结构。SSDT可操作用于存储与一个或多个影子栈有关的信息或细节,允许相应程序使用所述一个或多个影子栈和/或在其之间进行切换。通过示例的方式,操作系统或其他特权系统软件可以将允许影子栈中的每个允许影子栈的范围存储在SSDT中。在这之后,可以对SSDT进行检查(例如,由处理器)以便确定影子栈的允许范围并且控制对影子栈的访问。
所展示的SSDT被安排为具有多个行和列的表。不同行可以表示各自与允许相应程序在程序执行期间使用的不同有效或无效影子栈相对应的不同条目。在所展示的示例中,存在第一条目335-1至第N条目335-N,其中,条目数量(N)可以是特定实施方式所期望的任何适当数量。通过示例的方式,每个应用都可以具有其自己的影子栈,所述影子栈由条目及其SSP基址和SSP界限限定。所展示的SSDT具有三个列。
第一列存储相应条目的有效性指示符。如所示出的,可以存在第一条目的第一有效性指示符336-1以及第N条目的第N有效性指示符336-N。每个有效性指示符可操作用于指示相应影子栈是有效的还是无效的。例如,每个有效性指示符可以具有用于指示相应影子栈有效的第一值(例如,被设置为二进制一),或者可以具有用于指示相应影子栈无效的第二不同值(例如,被清除为二进制零)。
第二和第三列指定或存储影子栈的有效范围。具体地,第二列存储影子栈基址(SSP基址),并且第三列存储影子栈界限(SSP界限)。如所示出的,可以存在第一条目的第一SSP基址337-1以及第N条目的第N SSP基址337-N。同样,可以存在第一条目的第一SSP界限338-1以及第N条目的第N SSP界限338-N。在一些实施例中,SSP基址和SSP界限可以分别表示相应影子栈的最低和最高线性地址。可替代地,在其他实施例中,第一、第二和第三列中的数据可以以各种方式重新安排。此外,在其他实施例中,可选地,除了这种类表结构或安排之外,完全可以使用其他数据结构或数据安排。
图4是适合SSDT条目435的一个具体示例实施例的框图。具体展示的SSDT条目的宽度为十六字节。最低有效位(位[0])表示和/或用于存储有效性指示符。当位[0]被设置为二进制一时,有效性指示符具有有效指示,并且当位[0]被清除为二进制零时,其具有无效指示。可替代地,相反惯例也是可能的。位[11:1]和位[74:64]可以表示当前保留位(rsvd)。在一个具体实施例中,当位[0]被设置为二进制一并且位[74:64]和位[11:1]中的所有保留位都被清除为二进制零时,条目可能是有效的,或者否则,可能是无效的。可替代地,可选地,可以忽略保留位。位[63:12]表示和/或用于存储SSP基址。位[127:75]表示和/或用于存储SSP界限。如之前提及的,SSP基址和SSP界限可以用于指定或限定影子栈的与条目相对应的有效范围。在其他实施例中,可选地,可以使用其他大小的SSDT条目,并且可选地,可以以各种不同方式对有效性指示符、SSP基址和SSP界限进行重新安排或重新定位。
可以使用SSDT选择符来对SSDT的给定条目或行进行索引。图5是SSDT选择符540的示例实施例的框图。具体展示的SSDT选择符是32位数字。可替代地,可选地,SSDT选择符可以比32位或者更宽或者更窄。具体展示的SSDT选择符的位[31]存储或表示用户-管理程序指示符。当位[31]被设置为二进制一时,用户-管理程序指示符可以具有用户指示。当位[31]被清除为二进制零时,用户-管理程序指示符可以具有管理程序指示。可替代地,相反惯例也是可能的。具体展示的SSDT位[30:0]存储或表示SSDT索引。SSDT索引可用于索引到SSDT中和/或选择SSDT的特定行或条目。当用户-管理程序指示符具有用户指示时,SSDT索引可以索引到用户SSDT(SSDT-U)中,而当用户-管理程序指示符具有管理程序指示时,SSDT索引可以索引到管理程序SSDT(SSDT-S)中。在一些实施例中,SSDT选择符可以仅有效和/或仅被允许在位[30:0]中的SSDT索引处于相应SSDT的允许范围或边界内时对SSDT条目进行选择或索引。此外,SSDT选择符可以仅选择所选或被索引SSDT条目的有效影子栈或指示其是有效的(例如,位[0]被设置为二进制一并且预留位全部被清除)。
在不同实施例中,可以将影子栈选择信息存储在不同地方。作为一个可能示例,在一些实施例中,可以将影子栈选择存储在某些架构兼容计算机中的任务状态片段(TSS)结构中。可替代地,在其他实施例中,影子栈选择信息反而可以包括在存储器中的不同数据结构中。在仍其他实施例中,影子栈选择信息反而可以包括在处理器的控制寄存器中。这种方式的组合也可能是适合的。
图6是32位任务状态片段(TSS)结构645的示例实施例的实施例的框图。TSS可以表示架构兼容计算机上的存储器中可用于存储与任务有关的信息的硬件管理数据结构。处理器和特权系统软件可以使用TSS和存储于其中的信息来执行栈切换和/或任务切换。处理器可以具有任务寄存器(例如,用于存储片段选择符的片段寄存器),所述任务寄存器可以指向或指示有效TSS片段描述符。为了增强安全性,可以将TSS存储在存储器中,对所述存储器的访问受控和/或所述存储器仅可由特权级软件访问。
如果操作系统或其他特权系统软件使用处理器特权级保护机制,则任务执行空间可以包括不同特权级的不同栈(例如,用于存储控制和数据两者的调用栈)。如所示出的,32位TSS具有被标记为ESP0、ESP1和ESP2的三个32位栈指针,所述栈指针分别是SS0、SS1和SS2栈片段中的偏移量。在其他实施方式中,可选地,可以使用更少或更多栈指针。这三个32位栈指针可以指向或标识三个不同相应特权级的三个不同栈。具体地,ESP0可以对应于特权级零;ESP1可以对应于特权级一;并且ESP2可以对应于特权级二。当对在32位模式下运行的处理器作出特权级改变时,32位栈指针可以用于标识适当栈。如所示出的,32位TSS还具有三个相应的32位栈片段选择符(被标记为SS0、SS1和SS2)。作为一个示例,当处理器从用户级转变为特权级零时,处理器可以检索适合于目标特权级零的栈指针ESP0和栈片段选择符SS0并且将其值存储到处理器的ESP和SS寄存器中。
在一些实施例中,如果操作系统或其他特权系统软件使用处理器特权级保护机制,则还可能存在不同特权级的不同影子栈。如所示出的,在一些实施例中,32位TSS还可以具有三个32位影子栈选择符(被标记为SSDT选择符0、SSDT选择符1和SSDT选择符2)。在其他实施方式中,可选地,可以使用更少或更多影子栈选择符。这三个32位影子栈选择符可以指向或以其他方式标识三个不同相应特权级的三个不同相应影子栈描述符表(SSDT)条目。例如,SSDT选择符0可以标识影子栈的将在特权级零下使用的SSDT条目;SSDT选择符1可以标识影子栈的将在特权级一下使用的SSDT条目;并且SSDT选择符2可以标识影子栈的将在特权级二下使用的SSDT条目。SSDT条目可用于存储针对相应进程或任务的不同允许影子栈的影子栈基址(SSP基址)和界限(SSP界限)。当在32位模式下运行的存储器中存在特权级变化时,32位影子栈选择符(SSDT选择符0、SSDT选择符1和SSDT选择符2)可用于标识目标特权级的适当SSDT条目。例如,当处理器从用户级转变为特权级零时,处理器(除了检索ESP0和SS0之外)可以检索适合于特权级零的32位影子栈选择符SSDT选择符0。检索到的32位影子栈选择符可以指向相应SSDT条目,可以在所述SSDT条目处获得影子栈基址(SSP基址)和影子栈界限(SSP界限)。这可以允许不同特权级使用不同影子栈,并且还可以允许将不同影子栈用于不同进程。相应地,当处理器中存在特权级变化时,TSS中的32位影子栈选择符可以用于切换影子栈。32位TSS还包括用于在通过相应TSS调度任务以供执行时建立影子栈的TSSSSP 649和TSS SSDT选择符648。当处理器执行任务切换时,其可以将当前任务的SSP保存到当前任务的TSS的TSS SSP字段中。随后,处理器可以加载来自新任务的TSS的TSS SSDT选择符并且将其用于定位新任务的影子栈的SSP基址和SSP界限。然后,可以使用来自新任务的TSS的TSS SSP字段的值来建立新任务的SSP。SSDT选择符、TSS SSP和TSS SSDT的所展示的位置和安排不是必须的。在其他实施例中,可选地,这些字段可以被定位在其他地方并且可以以各种方式重新安排。
32位TSS还具有用于执行任务切换的数据字段。典型地,任务可以表示处理器可以调度、执行和挂起的工作单元。通过示例的方式,任务可以用于执行以下各项中的一项或多项:程序、任务或进程、操作系统服务实用程序、中断或异常处理程序或者内核或执行实用程序。一方面,可以在执行调用程序指令时、在执行跳转到程序指令时、在发生中断或异常时或者以其他方式执行任务切换。在执行从当前任务到新任务的任务切换时,当前任务的状态可以保存在与当前任务相对应的TSS中,并且新任务的状态可以从与新任务相对应的TSS加载或检索。如所示出的,32位TSS可以包括用于存储不同类型的处理器状态的状态保存字段646。例如,这种字段可以存储CR3或页目录基址寄存器(PDBR)、指令指针(EIP)、EFLAGS寄存器、通用寄存器(例如,EAX、ECX、EDX等)、片段选择符(例如,ES、CS、SS等)。32位TSS还可以具有其他字段647,为了简单起见,本文中未对所述其他字段进行描述。
图7是64位TSS结构745的示例实施例的框图。64位TSS与32位TSS具有某些相似性。为了避免使描述模糊,将主要对64位TSS的不同或新特征进行描述。
在64位模式下,如在32位模式下的,如果操作系统或其他特权系统软件使用处理器特权级保护机制,则任务执行空间可以包括不同特权级的不同栈(例如,用于存储控制和数据两者的调用栈)。如所示出的,64位TSS具有三个64位栈指针(被标记为(RSP0、RSP1和RSP2)。64位栈指针中的每个栈指针被分成高和低32位部分。这三个64位栈指针可以大致分别对应于32位栈指针ESP0、ESP1、ESP2。在其他实施方式中,可选地,可以使用更少或更多栈指针。RSP0可以对应于特权级零;RSP1可以对应于特权级一;并且RSP2可以对应于特权级二。当在64位模式下运行的处理器中发生特权级改变时,64位栈指针可以用于标识适当栈。
在一些实施例中,如果操作系统或其他特权系统软件使用处理器特权级保护机制,则还可能存在不同特权级的不同影子栈。如所示出的,在一些实施例中,64位TSS还可以具有三个64位影子栈选择符(被标记为SSDT选择符0、SSDT选择符1和SSDT选择符2)。在其他实施方式中,可选地,可以使用更少或更多影子栈选择符。这三个64位影子栈选择符中的每个影子栈选择符可以指向或以其他方式标识不同相应执行特权级下的不同相应影子栈描述符表(SSDT)条目。SSDT选择符0可以指向影子栈的将在特权级零下使用的SSDT条目;SSDT选择符1可以指向影子栈的将在特权级一下使用的SSDT条目;并且SSDT选择符2可以指向影子栈的将在特权级二下使用的SSDT条目。当在64位模式下运行的处理器中发生特权级改变时,64位影子栈选择符可以用于标识目标特权级的适当SSDT条目。如之前描述的,被标识SSDT可以存储相应任务或进程的不同允许影子栈的影子栈基址(SSP基址)和SSP界限(SSP界限)。
在64位模式下,还存在用于在被称为中断栈表(IST)的中断时切换栈的机制。这种机制可以允许中断处理程序使用不同栈(例如,存储控制和数据两者的调用栈)。64位TSS包括七个中断栈表选择符字段IST1至IST7。这些字段中的每个字段具有下半部和上半部。因此,这七个中断栈选择符字段可以允许将最多七个不同栈用于中断处理。用于调用中断或异常处理程序的中断描述符表条目可以被编程有用于从IST中选择这七个栈之一的IST索引。
在一些实施例中,可选地,还可以使用机制来在终端或异常处理期间切换栈。在一些实施例中,可选地,64位TSS可以包括针对每个IST索引IST1至IST7的七个中断影子栈表SSDT选择符。这些字段中的每个字段可以用于指定将用于中断处理的影子栈。因此,这七个中断影子栈选择符字段可以允许将最多七个不同影子栈来用于中断处理。通过示例的方式,在发生中断或异常时,既可以将中断栈表选择符字段(例如,IST3)用于选择或标识新栈,又可以将中断影子栈表选择符字段(例如,SSDT选择符IST3)用于选择或标识新影子栈。
SSDT选择符和SSDT选择符IST1至IST7的所展示的位置和安排不是必须的。在其他实施例中,可选地,这些字段可以被定位在其他地方并且可以以各种方式重新安排。
现在,尽管32位模式和32位TSS包括硬件管理的任务切换能力,但是大部分现代主操作系统并不使用这些硬件管理的任务切换能力。相应地,64位TSS省略了这些硬件管理的任务切换能力中的许多硬件管理的任务切换能力。在执行从当前任务到新任务的任务切换时,不将当前任务的状态保存在64位TSS中,并且不从64位TSS中检索新任务的状态。64位TSS不包括32位TSS中包括的状态保存字段646。
图8是可操作用于执行调用程序指令803的实施例和从程序返回指令804的实施例的处理器801的实施例的框图。为了简化描述,调用程序指令将经常被简单地称为调用指令,并且从程序返回指令将经常被简单地称为返回指令。调用和返回指令可以表示处理器的指令集的指令或控制信号。
在操作期间,处理器可以接收调用指令803。例如,可以从调用子例程、例程、处理程序等的调用程序接收调用指令。例如,可以通过总线或其他互连从存储器接收指令。在一些实施例中,调用指令可以明确指定(例如,通过一个或多个字段或位集合)或以其他方式指示(例如,隐式指示)返回地址873作为源操作数。无限制地,返回地址通常可以是程序中在调用指令之后的下一个指令的地址。作为一个示例,指令可以具有用于指定将存储返回地址的寄存器或其他存储位置的源操作数指定字段。可替代地,可选地,寄存器或其他存储位置可以对指令而言是隐式的(例如,对指令的操作码而言是隐式的)。作为又另一个选项,指令可以具有用于提供对返回地址的指示的中间或其他字段。被指示返回地址可以是实际地址或者与返回地址的与返回地址的偏移量(例如,与调用指令之后的指令的偏移量)。
处理器还包括一组寄存器872。在一些实施例中,寄存器可以表示通用寄存器。如所示出的,在一些实施例中,可选地,可以将返回地址873存储在寄存器中。可替代地,可选地,可以使用其他存储位置。
处理器还包括解码单元或解码器870。解码单元可以接收调用指令并将其解码成一个或多个经解码指令或控制信号。处理器还包括调用执行单元871C,所述调用执行单元与解码单元870和寄存器872耦合并且可操作成与存储器874耦合或以其他方式与其通信。调用执行单元可以接收所述一个或多个经解码指令或控制信号。调用执行单元还可以接收被指示的返回地址873。在一些实施例中,调用执行单元响应于和/或作为调用指令的结果(例如,响应于从其中解码的所述一个或多个经解码指令或控制信号)而可操作用于将返回地址和CS(在远程调用的情况下)推入或以其他方式存储到栈875上。在一些实施例中,调用执行单元响应于调用指令和/或作为调用指令的结果(例如,响应于从其中解码的所述一个或多个经解码指令或控制信号)而还可操作用于将返回地址和CS(在远程调用的情况下)推入或以其他方式存储到影子栈877上。
在一些实施例中,调用执行单元可操作用于:甚至是在与影子栈相关联的访问权限指示影子栈不可写时,将返回地址和CS(在远程调用的情况下)推入或以其他方式存储到影子栈上。例如,在一些实施例中,可以通过分页来保护存储器的具有影子栈的那一部分。在一些实施例中,特权系统软件(例如,操作系统)可以在页表条目中对具有影子栈的页配置访问权限以便使所述页不可写(例如,以便使所述页只读)。在一些实施例中,这可以有效地防止其他存储到存储器、写入到存储器、移动到存储器以及同一指令集的这种指令能够存储或写入到影子栈中。然而,响应于调用指令的调用执行单元可操作用于:甚至在这种访问权限指示影子栈不可写时,将返回地址存储在栈上。也就是说,响应于调用指令的调用执行单元可以忽略页表条目中针对用于影子栈的页的不可写访问权限。然而,这种访问保护可以有效地防止用户级软件(例如,存储到存储器指令)能够修改影子栈内容。此外,可选地,反而可以在其他不同类型的访问权限(例如,属于用于受保护飞地或其他受保护容器的类型)下实施类似的异构存储能力。
在一些实施例中,在调用执行单元将返回地址存储在影子栈上之前,调用执行单元可操作用于执行一项或多项附加安全检查或保护。在一些实施例中,调用执行单元可以检查是否启用了影子栈。如果启用了影子栈,则调用执行单元可以继续,或者否则,其可以在不将返回地址存储在影子栈上的情况下停止。
在一些实施例中,在将返回地址推入或存储在影子栈上之前,调用执行单元可操作用于检查或判定推入或存储新返回地址是否将使影子栈指针(SSP)超出由影子栈基址限定的边界(例如,超出SSP基址)。例如,调用执行单元可操作用于从当前SSP中减去处理返回地址所需的影子栈宽度(例如,将被推入的字节数)。影子栈可以像常规栈通常进行的那样向下增长。当影子栈为空时,可以使用最低地址或SSP。在执行存储之前,将返回地址存储到栈上可以使影子栈地址或SSP减量或减小。通过示例的方式,在某些因特尔架构处理器中,根据模式,影子栈宽度可以为4字节或8字节。调用执行单元可操作用于判定:在通过影子栈的宽度使SSP减量之后,所产生的SSP是否小于影子栈基址(SSP基址)。若是,则对返回地址的试图推入可以被考虑为超出边界并且可以不执行所述视图推入。例如,可以断言栈故障(#SS)或其他异常状况。否则,调用执行单元可以将返回地址推入或存储到影子栈上在所产生的减量或减小SSP处。
这种检查和防范影子栈超出允许的影子栈范围可以有助于防范数据被存储在一般/标准未受保护存储器中的受保护影子栈之外。否则,这可能允许返回地址存在于受保护影子栈范围之外,在那里,返回地址可能被修改或篡改。相应地,影子栈范围可以有助于确保仅允许调用指令将返回地址存储在影子栈保护范围内。
随后,处理器可以接收返回指令804。例如,返回指令可以是将控制流返回至已经调用所述控制流的程序的被调用子例程、处理程序、例程或程序的最后一个指令。
解码单元870可以接收返回指令并将其解码成一个或多个经解码指令或控制信号。处理器包括返回执行单元871R,所述返回执行单元与解码单元870耦合并且可操作成与存储器874耦合或以其他方式与其通信。返回执行单元可以是或者与用于调用指令的执行单元相同的执行单元或者不同的执行单元。为了改善说明的清晰性,示出了不同执行单元,尽管这不是必须的。
在一些实施例中,返回执行单元871R响应于返回指令和/或作为返回指令的结果(例如,响应于从其中解码的所述一个或多个经解码指令或控制信号)而可操作用于从栈875中弹出或以其他方式接收882返回地址876(以及CS(在远程调用的情况下))并且从影子栈877中弹出或以其他方式接收884返回地址878(以及CS(在远程调用的情况下))。在一些实施例中,返回执行单元响应于返回指令和/或作为返回指令的结果而可操作用于关于使用或基于存储在影子栈上的返回地址(例如,返回地址信息)来将控制流返回至返回地址是局限性或限制性的。
在一些实施例中,返回执行单元响应于返回指令和/或作为返回指令的结果而可操作用于验证或确保存储在栈上的返回地址的完整性。例如,返回执行单元可操作用于判定存储在栈和影子栈上的返回地址是否相等、相匹配或以其他方式相一致。返回执行单元可操作用于将栈上的返回地址与影子栈上的返回地址信息(例如,返回地址的副本、返回地址的散列等)进行比较。在一些实施例中,同一返回地址可以存储在栈和影子栈两者上,以便这两个值应当相等或完全相同以便相匹配或相一致。如果确定返回地址信息一致,则返回执行单元可以允许将控制流转移到返回地址。例如,返回执行单元可操作用于使返回地址存储在指令指针寄存器880中。相反,如果确定返回地址信息不一致,则返回执行单元可以不允许将控制流转移到栈上的返回地址。例如,返回执行单元可操作用于引发异常885(例如,控制保护异常)至(例如,特权系统的)处理程序模块。有利地,在失配或不一致信息的情况下局限或限制将控制流转移至栈上的返回地址可以有助于防止ROP和其他控制流颠覆攻击,或者至少使启动所述攻击显著更困难。
可替代地,返回执行单元可以使用存储在影子栈上的返回地址信息以其他方式提供保护,而不是对存储在栈和影子栈上的返回地址信息进行比较。例如,在其他实施例中,返回执行单元响应于返回指令和/或作为返回指令的结果而可操作用于使用影子栈上的返回地址来重写栈上的返回地址。在仍其他实施例中,返回执行单元可操作用于使用存储在影子栈上的返回地址来直接将控制流转移跳转或以其他方式返回至返回地址,而不是使用栈上的返回地址。例如,影子栈上的返回地址可以存储在指令指针寄存器上。
在一些实施例中,可选地,在返回执行单元从影子栈中弹出或以其他方式检索返回地址之前,返回执行单元可操作用于执行一项或多项附加安全检查或保护。在一些实施例中,返回执行单元可操作用于检查是否启用了影子栈。如果启用了影子栈,则返回执行单元可以继续,或者否则,其可以在不从影子栈中存储检索返回地址的情况下停止。在一些实施例中,在从影子栈中弹出或检索返回地址之前,返回执行单元可操作用于检查或判定弹出或检索返回地址是否将从由影子栈界限(SSP界限)限定的允许边界之外的地址读取。影子栈可以像常规栈通常进行的那样向下增长。随着从栈中弹出或以其他方式删除返回地址,影子栈地址或SSP可以在从影子栈中读取内容之后增量或以其他方式增大。返回执行单元可操作用于:在从影子栈中读取内容的第一或最后一个字节之前,判定SSP是否超过界限(SSP界限-1)。通过示例的方式,在某些因特尔架构处理器中,根据模式,影子栈宽度可以为4字节或8字节。若是,则从影子栈中试图弹出或删除返回地址或数据可以被视为超出边界并且可以不执行所述操作。例如,返回执行单元可以断言栈故障(#SS)或其他异常状况。因此,试图在由特权系统软件限定的影子界限之外进行影子栈操作可能失败或造成异常。否则,可以从影子栈中弹出或检索影子栈[SSP]的顶端的当前内容。
这种检查和防范影子栈超出允许的影子栈范围可以有助于防范从一般/标准未受保护存储器中的受保护影子栈之外访问数据。否则,这可能允许在受保护影子栈范围之外的可能经修改的返回地址被返回指令使用。相应地,影子栈范围可以有助于确保仅允许返回指令从影子栈保护范围内检索返回地址。
本文还公开了保存SSP指令和恢复SSP指令。在一些实施例中,这些指令可以用于在用户级或用户模式线程切换期间帮助管理和保护SSP。线程切换可以涉及停止对第一线程的执行(例如,在硬件线程、核或其他逻辑处理器上)以及开始对第二线程的执行。通常,这种线程切换还涉及上下文切换。在上下文切换中,可以保存被停止的线程(例如,第一线程)的当前上下文或状态。然后,当被停止的线程稍后重新开始时,可以恢复保存上下文或状态,从而使得重新开始的线程可以在其停止的点处重新开始。包括SSP的影子栈上下文表示同样应当保存和恢复(并且以安全且受保护的方式)的上下文。保存SSP指令和恢复SSP指令可以有助于以不损害影子栈的安全性的安全且受保护的方式来切换影子栈并且保存和恢复SSP。在一些实施例中,用户级应用应当不能够任意地操纵SSP。例如,当从第一线程切换到第二线程时,可以仅允许切换到第二线程中执行之前停止的同一点,而不是其他任意点。换言之,当切换至第二线程时,用户级应用程序可以仅能够使用第二线程(在其最后停止运行时)之前具有的同一SSP。有利地,在一些实施例中,保存SSP指令和恢复SSP指令可以是可以在非特权或用户级执行特权下执行的用户级指令。这可以有助于避免需要使特权系统软件对SSP执行保存和恢复并促进用户级多线程化。
图9是执行保存影子栈指针指令的实施例的方法987的实施例的方框流程图。在各个实施例中,所述方法可由处理器、指令处理装置或其他数字逻辑设备执行。
所述方法包括在框988处接收保存影子栈指针指令(save shadow stack pointerinstruction)。在各个方面,可在处理器或其一部分(例如,指令获取单元、解码单元、总线接口单元等)接收指令。在各个方面,可以从处理器外和/或管芯外的源(例如,从存储器、互连等)、或者从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列等)接收指令。在各个实施例中,保存影子栈指针指令可以指定(例如,明确指定)或以其他方式指示(例如,隐式指示)目的地寄存器、存储器中位置或其他存储位置。通过示例的方式,可选地,目的地存储位置可以是可以由指令或者明确指定或者隐式指示的通用寄存器。
在框989处,可以响应于和/或作为指令的结果而将当前影子栈指针(SSP)推入或以其他方式存储到当前影子栈中。在一些实施例中,可以从处理器的控制寄存器中访问当前SSP并且然后可以将其存储到当前影子栈的当前顶端中。
在框990处,在将当前SSP存储到当前影子栈中之后,可以响应于和/或作为指令的结果而将新的或更新的SSP(例如,反映由于存储或推入而造成的对SSP的任何减量或减小)存储在所指示的目的地存储位置中。无限制地,软件可以保存存储在目的地中的SSP,从而使得可以在切换回到被停止的线程时再次呈现(例如,由恢复SSP指令)所述SSP。这可以有助于在对线程的执行停止的点处重新开始执行。
所展示的方法涉及架构操作(例如,从软件角度可见的操作)。在其他实施例中,可选地,所述方法可以包括一项或多项微架构操作。通过示例的方式,可以对指令进行获取、解码、无序调度,可以访问源操作数,执行单元可以执行微架构操作以便实施指令,等等。
图10是可操作用于执行保存SSP指令1005的实施例的处理器1001的实施例的框图。在一些实施例中,处理器1001可以执行图9的方法987。可选地,本文针对处理器1001而描述的组件、特征和具体可选细节也适用于方法987。可替代地,方法987可由相似或不同的处理器或装置和/或在其内执行。此外,处理器1001可以执行与方法987类似或不同的方法。
在操作期间,处理器可以接收保存SSP指令1005。例如,可以通过总线或其他互连从存储器接收指令。指令可以表示处理器的指令集的指令或控制信号。在一些实施例中,保存SSP指令可以明确指定(例如,通过一个或多个字段或位集合)或以其他方式指示(例如,隐式指示)将存储结果的目的地存储位置1097。作为一个示例,指令可以具有用于将寄存器、存储器位置或其他存储位置指定为目的地存储位置的目的地指定字段。可替代地,可选地,这些存储位置中的一个或多个可以对指令而言是隐式的(例如,对指令的操作码而言是隐式的)。如所示出的,在一些实施例中,可选地,目的地存储位置(DEST)1097可以是处理器的一组寄存器1072(例如,通用寄存器)的寄存器。
处理器还包括解码单元或解码器1070。解码单元可以接收保存SSP指令并将其解码成一个或多个经解码指令或控制信号。处理器还包括保存SSP执行单元1071。保存SSP执行单元还可以被简单地称为执行单元。执行单元与解码单元1070和寄存器1072耦合。执行单元还与处理器的SSP寄存器1012耦合。当处理器被部署在系统中时,执行单元可操作成与存储器1074耦合或以其他方式与其通信。执行单元可以接收所述一个或多个经解码指令或控制信号。
在一些实施例中,执行单元响应于保存SSP指令和/或作为保存SSP指令的结果(例如,响应于从其中解码的所述一个或多个经解码指令或控制信号)还可操作用于从SSP寄存器1012中检索或以其他方式接收当前SSP 1096。执行单元响应于指令和/或作为指令的结果还可操作用于将接收到的当前SSP 1096推入或以其他方式存储到影子栈1077上作为当前SSP 1092。换言之,执行单元可以将当前SSP 1096的副本保存在影子栈上。影子栈可以提供安全且受保护的地方来存储当前SSP,在所述地方,用户级软件不能够修改当前SSP或篡改当前SSP。可选地,影子栈还可以存储返回地址信息1017,尽管这不是必须的。
执行单元响应于指令和/或作为指令的结果还可操作用于在将当前SSP存储到影子栈中之后将新的或更新的当前SSP 1091存储到由指令指示的目的地存储位置1097。新SSP可以反映由于将当前SSP存储在影子栈上而造成的对SSP的减量或减小。存储在目的地中的新SSP表示线程停止执行或停止的点。无限制地,软件可以保存新SSP,从而使得可以在线程之前已经停止的点处重新开始或切换回到线程时呈现新SSP。通过示例的方式,如以下将进一步讨论的,新SSP可以被提供为恢复SSP指令的源操作数。然而,在一些实施例中,目的地存储位置可能不是充分保护的位置(例如,目的地存储位置可以是通用寄存器、一般/常规存储器中位置等),并且软件可能能够修改目的地存储位置中的新SSP。相应地,如以下将进一步讨论的,存储在影子栈上的当前SSP 1092可以用于验证任何这种呈现的SSP(例如,响应于和/或作为恢复SSP指令的结果)。
在一些实施例中,在将当前SSP 1092存储在影子栈上之前,执行单元响应于指令和/或作为指令的结果而可操作用于检查或判定将当前SSP推入或存储到影子栈上是否将使SSP超出由影子栈基址对当前影子栈限定的允许边界。例如,执行单元可操作用于从当前SSP中减去处理当前SSP所需的影子栈宽度(例如,将被推入的字节数)。执行单元可操作用于判定所产生的SSP是否将小于影子栈基址。若是,则对当前SSP的试图推入可以被视为超出边界并且可以不执行所述试图推入。例如,可以断言栈故障(#SS)或其他异常状况。否则,执行单元可以将当前SSP存储到影子栈上在所产生的减量或减小SSP处。
图11是执行恢复影子栈指针指令的实施例的方法1101的实施例的方框流程图。在各个实施例中,所述方法可由处理器、指令处理装置或其他数字逻辑设备执行。
所述方法包括在框1102处接收恢复影子栈指针指令(restore shadow stackpointer instruction)。在一些实施例中,恢复SSP指令可以指定(例如,明确指定)或以其他方式指示(例如,隐式指示)SSP并且可以指定或以其他方式指示影子栈描述符表(SSDT)选择符。通过示例的方式,指令可以指定或指示具有SSP和SSDT选择符的寄存器(例如,通用寄存器)或其他存储位置。
所述方法包括响应于和/或作为指令的结果而执行多项验证或保护。
在框1103处,可以作出对SSDT选择符(例如,由指令提供的SSDT选择符)是否指示SSDT中的有效条目的判定。如果SSDT选择符未指示SSDT中的有效条目(即,如果“是”为确定),则方法可以前进到框1104。否则,(即,如果“否”为确定)方法可以前进到框1108。
在框1104处,可以作出对由指令指示的SSP是否处于在SSDT的由SSDT选择符(例如,由指令提供的SSDT选择符)指示或选择的条目中指定的SSP基址和SSP界限内的判定。如果SSP处于SSP基址和SSP界限内(即,如果“是”为确定),则方法可以前进到框1105。否则,(即,如果“否”为确定)方法可以前进到框1108。
在框1105处,可以作出对由指令指示的SSP是否与从影子栈接收到的SSP相等、相匹配或以其他方式相一致的判定。在一些实施例中,从影子栈接收到的SSP可以是由之前的保存SSP指令存储在那里的SSP。在其他实施例中,散列可以用于SSP值之一,从而使得一致性无需被如此限制为匹配或相等,而是可以是通过变换(例如,散列)实现的一致性。如果SSP一致(即,如果“是”为确定),则方法可以前进到框1106。否则,(即,如果“否”为确定)方法可以前进到框1108。
如果框1103、1104和1105的验证或保护中的任一项失败,则方法可以前进到框1108。在框1108处,可以引发异常,并且然后,指令可以在不恢复影子栈状态或上下文的情况下完成。
可替代地,如果框1103、1104和1105的验证或保护中的所有项成功,则方法可以前进到框1107。在框1107处,可以响应于和/或作为指令的结果而恢复影子栈状态或上下文。在一些实施例中,如在框1107处示出的,可以将从SSDT的由SSDT选择符选择的条目中获得的SSP基址和SSP界限存储在处理器的控制寄存器中(例如,影子栈寄存器112)。在一些实施例中,如在框1107处示出的,还可以将SSP存储在处理器的控制寄存器中(例如,影子栈寄存器112)。在一些实施例中,可以将来自指令的源操作数的经验证SSP存储到控制寄存器中。在其他实施例中,可以将从影子栈中检索的SSP存储到控制寄存器中。
所展示的方法涉及架构操作(例如,从软件角度可见的操作)。在其他实施例中,可选地,所述方法可以包括一项或多项微架构操作。通过示例的方式,可以对指令进行获取、解码、无序调度,可以访问源操作数,执行单元可以执行微架构操作以便实施指令,等等。
图12是可操作用于执行恢复SSP指令1206的实施例的处理器1201的实施例的框图。指令可以表示处理器的指令集的指令或控制信号。
在一些实施例中,恢复SSP指令可以明确指定(例如,通过一个或多个字段或位集合)或以其他方式指定(例如,隐式指示)用于存储SSP 1291的第一源操作数(SRC1)1295,并且可以指定或以其他方式指示用于存储影子栈描述符表(SSDT)选择符1299的第二源操作数(SRC2)1294。作为一个示例,指令可以具有用于为操作数指定寄存器、存储器位置和其他存储位置的源和/或目的地操作数指定字段。可替代地,这些操作数中的一个或多个可以对指令而言是隐式的(例如,对指令的操作码而言是隐式的)。如所示出的,在一些实施例中,可选地,可以将第一和第二源操作数存储在处理器的一组寄存器1272(例如,通用寄存器)的寄存器中。可替代地,可选地,可以将存储器位置或其他存储位置用于这些操作数中的一个或多个。
处理器还包括解码单元或解码器1270。解码单元可以接收恢复SSP指令并将其解码成一个或多个经解码指令或控制信号。处理器还包括恢复SSP执行单元1271。恢复SSP执行单元还可以被简单地称为执行单元。执行单元与解码单元和寄存器耦合。当处理器被部署在系统中时,执行单元可操作成与存储器1274耦合或以其他方式与其通信。执行单元可以接收所述一个或多个经解码指令或控制信号。执行单元还可以接收SSP 1291和SSDT选择符1299。
在一些实施例中,执行单元1271响应于指令和/或作为恢复SSP指令的结果(例如,响应于从其中解码的所述一个或多个经解码指令或控制信号)还可操作用于在恢复影子栈上下文或状态之前执行多项验证或保护。在一些实施例中,执行单元可操作用于响应于指令和/或作为指令的结果而使用SSDT选择符1299来选择或指示SSDT 1222中的条目1235,并且判定所述条目有效还是无效的。如果条目无效,则指令可以在不恢复影子栈状态或上下文的情况下完成并且在一些实施例中可以引发异常1293(例如,到处理程序模块1279)。否则,执行单元可以继续执行一项或多项其他验证。在一些实施例中,可以像以上针对图3而提及的那样(例如,使用有效性指示符的值以及(可选地)保留位)确定有效性。
在一些实施例中,执行单元可操作用于响应于指令和/或作为指令的结果而判定由第一源操作数指示的SSP 1291是否处于由SSDT 1222的由SSDT选择符1299选择的经验证有效条目1235指定的SSP基址1237和SSP界限1238内。如果SSP不处于SSP基址和SSP界限内,则指令可以在不恢复影子栈状态或上下文的情况下完成,并且在一些实施例中可以引发异常1293。否则,执行单元可以继续执行一项或多项其他验证。
在一些实施例中,执行单元可操作用于响应于指令和/或作为指令的结果而判定第一源操作数的SSP 1291是否与存储在影子栈1277上的当前SSP 1292相等、相匹配或以其他方式相一致。在一些实施例中,可能已经通过之前的保存SSP指令(例如,指令1005)将SSP1292存储在影子栈上。如果它们不匹配或以其他方式不一致,则指令可以在不恢复影子栈状态或上下文的情况下完成,并且在一些实施例中可以引发异常1293。否则,在一些实施例中,执行单元可以确定由指令指示的SSDT选择符1299和SSP 1291被充分验证。对这种一致性的检查可以有助于确保用户级应用不能够任意地操纵SSP。
在一些实施例中,可选地,执行单元可操作用于响应于指令和/或作为指令的结果而使存储在影子栈上的当前SSP 1292置零、无效、改变或以其他方式受到损坏(compromise),尽管这不是必须的。这可以有助于确保当前SSP仅可以使用一次而无法重新使用,这可以有助于提供进一步保护。
在一些实施例中,执行单元可操作用于响应于指令和/或作为指令的结果而在充分验证SSDT选择符1299和SSP 1291之后存储影子栈上下文或状态。例如,在一些实施例中,执行单元可操作用于将来自条目1235的SSP基址1237存储在处理器的一组影子栈寄存器1212中的SSP基址寄存器1225中、用于将来自所述条目的SSP界限1238存储在SSP界限寄存器1226中并且用于将SSP存储在SSP寄存器1227中。在一些实施例中,可以将第一源操作数的SSP 1291存储在SSP寄存器1227中。在其他实施例中,可以将来自影子栈的SSP 1292存储在SSP寄存器1227中。
应当理解,这仅仅是恢复SSP指令以及用于执行所述恢复SSP指令的处理器的一个说明性示例实施例。在其他实施例中,可选地,根据特定实施方式的期望保护水平,可以在恢复影子栈上下文之前执行更少或更多验证。其他实施例涉及以上描述的可选地除了其他验证或保护之外的验证或保护中的任何一项或多项的恢复SSP指令。
已经针对图8、图10和图12示出并描述了处理器。在一些实施例中,这些处理器可以是通用处理器(例如,属于之前描述的类型)。可替代地,处理器可以是专用处理器(例如,属于之前描述的类型)。处理器可以具有CISC、RISC、VLIW、混合、或其他架构或者其组合。
图8、图10和图12的解码单元可操作用于对接收到的较高级指令进行解码并且输出反映、表示和/或导出自接收到的相对较高级指令的一个或多个相对低级指令或控制信号(例如,一个或多个微指令、微操作、微代码入口点、经解码指令或控制信号等)。在一些实施例中,解码单元可以包括用于接收指令的一个或多个输入结构(例如,(多个)端口、(多个)互连、接口),与其耦合的用于对指令进行识别和解码的指令识别和解码逻辑以及与其耦合以便输出(多个)较低级指令或(多个)控制信号的一个或多个输出结构(例如,(多个)端口、(多个)互连、接口)。解码单元可以使用各种不同的机制来实施,包括但不限于:微代码只读存储器(ROM)、查找表、硬件实施方式、可编程逻辑阵列(PLA)以及适合于实施解码单元的其他机制。
在一些实施例中,可选地,可以使用指令模拟器、转换器、变形器、解释器或其他指令转换模块,而不是将指令直接提供至解码单元。可以在软件、硬件、固件或其组合中实施各种类型的指令转换模块。在一些实施例中,指令转换模块可以被定位在处理器外部,如例如,在分开的管芯上和/或在存储器(例如,静态、动态或运行时间仿真模块)中。通过示例的方式,指令转换模块可以接收可属于第一指令集的指令,并且可对指令进行模拟、转换、变形、解释或者以其他方式将其转换为一个或多个相应中间指令或控制信号(其可属于第二不同的指令集)。所述第二指令集的一个或多个中间指令或控制信号可以被提供给解码单元,所述解码单元可以将它们解码成可由处理器的本机硬件(例如,执行单元)执行的一个或多个较低级指令或控制信号。
图8、图10和图12的寄存器可以表示可操作用于存储数据的管芯上存储位置。寄存器可以表示软件和/或编程器可见的架构可见或架构寄存器、和/或由处理器的指令集的用于标识操作数的指令指示的寄存器。这些架构寄存器与给定微架构中的其他非架构寄存器(例如,临时寄存器、重排序缓冲器、引退寄存器等)形成对照。寄存器可以在不同的微架构中实施,并且不限于任何特定类型的设计。适合类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。
图8、图10和图12的执行单元可以与解码单元耦合以便接收表示和/或源自被解码指令的所述一个或多个经解码或以其他方式转换的指令或控制信号。执行单元响应于指令和/或作为相应指令的结果(例如,响应于从相应指令解码的一个或多个指令或控制信号)而可操作用于执行相应指令的描述操作。执行单元和/或处理器可包括可操作用于执行相应指令的特定或具体逻辑(例如,晶体管、集成电路系统或者可能与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的其他硬件)。
为了避免使描述模糊,已经以简化格式示出了图8、图10和图12的处理器。然而,可选地,处理器可以包括其他处理器组件。例如,各个不同实施例可以包括针对图13至图15中的任一者而示出和描述的组件的各种不同组合和配置。处理器的组件中的所有组件可以耦合至一起以便允许它们根据预期运行。
示例性核架构、处理器以及计算机架构
处理器核能够以不同的方式实现,用于不同的目的以及在不同的处理器中。例如,这种核的实施方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能无序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实施方式可以包括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用无序核的CPU;以及2)包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这种不同处理器导致不同计算机系统架构,其可以包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中的分开管芯上的协处理器;3)在与CPU相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑,比如,集成图形和/或科学(吞吐量)逻辑或专用核);以及4)芯片上的系统,所述系统可以包括在相同裸片上的所描述的CPU(有时称为(多个)应用核或(多个)应用处理器)、上述协处理器以及附加功能。接下来描述示例性核架构,之后是对示例性处理器和计算机架构的描述。
示例性核架构
有序和无序核框图
图13A是框图,展示了根据本发明的实施例的示例性有序流水线和示例性寄存器重命名无序发出/执行流水线两者。图13B是框图,展示了根据本发明的实施例的将包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名无序发出/执行架构核两者。图13A和图13B中的实线框展示了有序流水线和有序核,而对虚线框的可选添加展示了寄存器重命名无序发出/执行流水线和核。假定有序方面是无序方面的子集,将描述无序方面。
在图13A中,处理器流水线1300包括获取阶段1302、长度解码阶段1304、解码阶段1306、分配阶段1308、重命名阶段1310、调度(也被称为分派或发出)阶段1312、寄存器读取/存储器读取阶段1314、执行阶段1316、回写/存储器写入阶段1318、异常处理阶段1322以及提交阶段1324。
图13B示出了处理器核1390,所述处理器核包括耦合至执行引擎单元1350的前端单元1330,并且所述执行引擎单元和前端单元两者都耦合至存储器单元1370。核1390可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或可替代核类型。作为又另一个选项,核1390可以是专用核,如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元1330包括耦合至指令高速缓存单元1334的分支预测单元1332,所述指令高速缓存单元耦合至指令转换后备缓冲器(TLB)1336,所述指令转换后备缓冲器耦合至指令获取单元1338,所述指令获取单元耦合至解码单元1340。解码单元1340(或解码器)可以对指令进行解码并且生成从原始指令解码出的、或以其他方式反映原始指令或从原始指令衍生出的作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。解码单元1340可以使用各种不同的机制来实施。合适机制的示例包括但不限于:查找表、硬件实施方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1390包括微代码ROM或存储用于某些宏指令的微代码的其他介质(例如,在解码单元1340中或者在前端单元1330内)。解码单元1340耦合至执行引擎单元1350中的重命名/分配器单元1352。
执行引擎单元1350包括耦合至引退单元1354的重命名/分配器单元1352和一组一个或多个调度器单元1356。(多个)调度器单元1356表示任何数量的不同调度器,包括保留站、中央指令窗口等。(多个)调度器单元1356耦合至(多个)物理寄存器堆单元1358。(多个)物理寄存器单元1358各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,比如,标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为有待执行的下一指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元1358包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、以及通用寄存器。(多个)物理寄存器堆单元1358与引退单元1354重叠以说明可实施寄存器重命名和无序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用将来的(多个)堆、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池;等等)。引退单元1354和(多个)物理寄存器堆单元1358耦合至(多个)执行群集1360。(多个)执行群集1360包括一组一个或多个执行单元1362和一组一个或多个存储器访问单元1364。执行单元1362可以执行各种运算(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行。尽管一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可只包括一个执行单元或包括全都执行全部功能的多个执行单元。(多个)调度器单元1356、(多个)物理寄存器堆单元1358、以及(多个)执行集群1360被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,所述流水线各自具有其本身的调度器单元、(多个)物理寄存器堆单元、和/或执行集群,并且在分开的存储器访问流水线的情况下,实现了其中只有所述流水线的执行集群具有(多个)存储器访问单元1364的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一者或多者可以是无需发出/执行流水线,并且其余的是有序流水线。
所述一组存储器访问单元1364耦合至存储器单元1370,所述存储器单元包括耦合至数据高速缓存单元1374的数据TLB单元1372,所述数据高速缓存单元耦合至2级(L2)高速缓存单元1376。在一个示例性实施例中,存储器访问单元1364可以包括各自耦合至存储器单元1370中的数据TLB单元1372的加载单元、存储地址单元、以及存储数据单元。指令高速缓存单元1334进一步耦合至存储器单元1370中的2级(L2)高速缓存单元1376。L2高速缓存单元1376耦合至一个或多个其他级的高速缓存并且最终耦合至主存储器。
通过示例的方式,示例性寄存器重命名无序发出/运行核架构可以实施流水线1300如下:1)指令获取1338执行获取和长度解码阶段1302和1304;2)解码单元1340执行解码阶段1306;3)重命名/分配器单元1352执行分配阶段1308和重命名阶段1310;4)(多个)调度器单元1356执行调度阶段1312;5)(多个)物理寄存器堆单元1358和存储器单元1370执行寄存器读取/存储器读取阶段1314;执行集群1360执行执行阶段1316;6)存储器单元1370和(多个)物理寄存器堆单元1358执行回写/存储器写入阶段1318;7)各种单元可以涉及异常处理阶段1322;以及8)引退单元1354和(多个)物理寄存器堆单元1358执行提交阶段1324。
核1390可以支持一个或多个指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有可选的附加扩展,比如NEON)),包括本文所描述的(多个)指令。在一个实施例中,核1390包括支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许使用打包数据来执行许多多媒体应用所使用的操作。
应当理解,核可以支持多线程化(执行两个或更多个并行的操作或线程集),并且可以以各种方式来完成多线程化,所述各种方式包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分获取和解码以及此后诸如超线程化技术中的同步多线程化)。
虽然在无序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还包括分开的指令和数据高速缓存单元1334/1374和共享的L2高速缓存单元1376,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,例如1级(L1)内部高速缓存、或多级内部高速缓存。在一些实施例中,所述系统可以包括在核和/或处理器外部的内部高速缓存和外部高速缓存的组合。可替代地,所有高速缓存都可以在核和/或处理器的外部。
特定示例性有序核架构
图14A和图14B展示了更特定的示例性有序核架构的框图,所述核是芯片中的多个逻辑块(包括相同类型和/或不同类型的其他核)之一。根据应用,逻辑块通过具有某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑的高带宽互连网络(例如,环形网络)进行通信。
图14A是根据本发明的实施例的单个处理器核、连同其与管芯上互连网络1402的连接以及连同其2级(L2)高速缓存1404的本地子集的框图。在一个实施例中,指令解码器1400支持具有打包数据指令集扩展的x86指令集。L1高速缓存1406允许对标量和向量单元中的高速缓存存储器的低等待时间访问。虽然在一个实施例中(为了简化设计),标量单元1408和向量单元1410使用分开的寄存器组(分别为标量寄存器11412和向量寄存器1414),并且在它们之间传送的数据被写入存储器并且然后从1级(L1)高速缓存1406中回读,但本发明的替代实施例可以使用不同的途径(例如,使用单个寄存器组或者包括允许数据在两个寄存器堆之间传送而未被写入和回读的通信路径)。
L2高速缓存1404的局部子集是全局L2高速缓存的一部分,所述全局L2高速缓存被划分为多个分开的局部子集,每个处理器核一个。每个处理器核具有到其本身的L2高速缓存1404的局部子集的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1404中并且可以被快速访问,与其他处理器核并行地访问其局部L2的高速缓存子集。由处理器核写入的数据被存储在其本身的L2高速缓存子集1404中,并且如果需要,则从其他子集划掉。环形网络确保共享数据的相干性。环形网络是双向的,允许诸如处理器核、L2高速缓存和其他逻辑块的媒介在芯片内彼此通信。每个环形数据路径在每个方向为1012位宽。
图14B是根据本发明的实施例的图14A中的处理器核的一部分的展开视图。图14B包括L1高速缓存1404的L1数据高速缓存1406A部分、以及关于向量单元1410和向量寄存器1414的更多细节。具体地,向量单元1410是16位宽向量处理单元(VPU)(参见16位宽ALU1428),所述向量处理单元执行整数、单精度浮点和双精度浮点指令中的一者或多者。VPU支持用混合单元1420对寄存器输入进行混合、用转换单元1422A至1422B进行数字转换、以及用复制单元1424对存储器输入进行复制。写入掩码寄存器1426允许预测结果向量写入。
具有集成存储器控制器和图形的处理器
图15是根据本发明的实施例的可以具有多于一个核、可以具有集成存储器控制器并且可以具有集成图形的处理器1500的框图。图15中的实线框展示了具有单个核1502A、系统代理1510、一组一个或多个总线控制器单元1516的处理器1500,而对虚线框的可选添加展示了具有多个核1502A至1502N、系统代理单元1510中一组一个或多个集成存储器控制器单元1514以及专用逻辑1508的可替代处理器1500。
因此,处理器1500的不同实施方式可包括:1)具有作为集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核)的专用逻辑1508和作为一个或多个通用核(例如,通用有序核、通用无序核、两者的组合)的核1502A至1502N的CPU;2)协处理器,其中,核1502A至1502N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中,核1502A至1502N是大量通用有序核。因此,处理器1500可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等。处理器可以在一个或多个芯片上实施。处理器1500可以是一个或多个衬底的一部分和/或可以使用如例如BiCMOS、CMOS或NMOS的多种加工技术中的任何一种技术在一个或多个衬底上实施。
存储器层级包括核内的一个或多个级别的高速缓存,一组一个或多个共享高速缓存单元1506、以及外部存储器(未示出),所述外部存储器耦合至所述一组集成存储器控制器单元1514。所述一组共享高速缓存单元1506可以包括一个或多个中级高速缓存,比如,2级(L2)、3级(L3)、4级(L4)、或其他级别的高速缓存、终极高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环形的互连单元1512将集成图形逻辑1508、所述一组共享高速缓存单元1506、以及系统代理单元1510/(多个)集成存储器控制器单元1514互连,但替代实施例可以使用任何数量的用于互连这种单元的已知技术。在一个实施例中,在一个或多个高速缓存单元1506与核1502A至1502N之间保持相干性。
在一些实施例中,核1502A至1502N中的一个或多个核能够进行多线程化。系统代理1510包括协调和操作核1502A至1502N的那些组件。系统代理单元1510可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核1502A至1502N和集成图形逻辑1508的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
就架构指令集而言,核1502A至1502N可以是同构或异构的;也就是说,核1502A至1502N中的两个或更多个核能够执行相同的指令集,而其他核能够仅执行所述指令集的子集或执行不同的指令集。
示例性计算机架构
图16至图21是示例性计算机架构的框图。本领域中已知的用于膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备和各种其他电子设备的其他系统设计和配置也是合适的。一般而言,能够纳入本文中所公开的处理器和/或其他执行逻辑的多个系统和电子设备一般都是合适的。
现在参照图16,示出了根据本发明的一个实施例的系统1600的框图。系统1600可以包括耦合至控制器中枢1620的一个或多个处理器1610、1615。在一个实施例中,控制器中枢1620包括图形存储器控制器中枢(GMCH)1690和输入/输出中枢(IOH)1650(其可以在分开的芯片上);GMCH 1690包括存储器和图形控制器,存储器1640和协处理器1645耦合至所述图形控制器;IOH 1650将输入/输出(I/O)设备1660耦合至GMCH 1690。可替代地,存储器和图形控制器中的一者或两者被集成在处理器(如本文所述)内,存储器1640和协处理器1645通过IOH 1650直接耦合至单个芯片中的处理器1610和控制器中枢1620。
图16中用虚线表示附加处理器1615的可选特性。每个处理器1610、1615可以包括本文描述的一个或多个处理核,并且可以是处理器1500的某个版本。
存储器1640可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器中枢1620经由多点总线(例如,前端总线(FSB)、如快速路径互连(QPI)等点对点接口或类似连接件1695)与(多个)处理器1610、1615通信。
在一个实施例中,协处理器1645是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢1620可以包括集成图形加速器。
在包括架构、微架构、热学、功率消耗特性等等的指标度量范围方面,在物理资源1610、1615之间可以存在各种差异。
在一个实施例中,处理器1610执行控制一般类型的数据处理操作的指令。协处理器指令可以被嵌入在指令中。处理器1610将这些协处理器指令识别为属于应由附接的协处理器1645执行的类型。相应地,处理器1610将协处理器总线或其他互连上的这些协处理器指令(或表示协处理器指令的控制信号)发出到协处理器1645。(多个)协处理器1645接受并执行接收到的协处理器指令。
现在参照图17,示出了根据本发明的实施例的第一更具体示例性系统1700的框图。如图17所示,多处理器系统1700是点对点互连系统,并且包括经由点对点互连1750耦合的第一处理器1770和第二处理器1780。处理器1770和1780各自可以是处理器1500的某个版本。在本发明的一个实施例中,处理器1770和1780分别是处理器1610和1615,而协处理器1738是协处理器1645。在另一实施例中,处理器1770和1780分别是处理器1610和协处理器1645。
处理器1770和1780被示出为分别包括集成存储器控制器(IMC)单元1772和1782。处理器1770还包括作为其总线控制器单元的一部分的点对点(P-P)接口1776和1778;类似地,第二处理器1780包括P-P接口1786和1788。处理器1770、1780可以使用P-P接口电路1778、1788通过点对点(P-P)接口1750交换信息。如图17所示,IMC 1772和1782将处理器耦合至对应存储器(即,存储器1732和存储器1734)上,所述存储器可以是主存储器的本地附接至对应处理器上的部分。
处理器1770、1780可以各自使用点对点接口电路1776、1794、1786、1798经由单独的P-P接口1752、1754来与芯片组1790交换信息。可选地,芯片组1790可以经由高性能接口1739与协处理器1738交换信息。在一个实施例中,协处理器1738是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以包括在任一处理器中或者在两个处理器外部但经由P-P互连与所述处理器相连接,使得如果处理器被置于低功耗模式下,则任一或两个处理器的本地高速缓存信息可以被存储在所述共享高速缓存中。
芯片组1790可以经由接口1796耦合至第一总线1716。在一个实施例中,第一总线1716可以是外围组件互连(PCI)总线,或如PCI Express总线或另一种第三代I/O互连总线等总线,尽管本发明的范围不限于此。
如图17所示,不同I/O设备1714可以连同总线桥接器1718耦合至第一总线1716,所述总线桥接器可以将第一总线1716耦合至第二总线1720。在一个实施例中,一个或多个附加处理器1715(例如,协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、字段可编程门阵列、或任何其他处理器)被耦合至第一总线1716。在一个实施例中,第二总线1720可以是低引脚数(LPC)总线。在一个实施例中,各个设备可以耦合至第二总线1720,所述设备包括例如键盘和/或鼠标1722、通信设备1727、以及可以包括指令/代码和数据1730的存储单元1728(比如,磁盘驱动器或者其他大容量存储设备)。进一步地,音频I/O 1724可以耦合至第二总线1720。注意,其他架构是可能的。例如,替代图17的点对点架构,系统可以实施多站式总线或其他这种架构。
现在参照图18,示出了根据本发明的实施例的第二更具体示例性系统1800的框图。图17和图18中的相同元件具有相同的参考数字,并且已经从图18中省略了图17的某些方面以避免使图18的其他方面模糊。
图18展示了处理器1770、1780可以分别包括集成存储器和I/O控制逻辑(“CL”)1772和1782。因此,CL 1772、1782包括集成存储器控制器单元并且包括I/O控制逻辑。图18展示了不仅存储器1732、1734被耦合至CL 1772、1782,而且I/O设备1814也被耦合至控制逻辑1772、1782。传统I/O设备1815被耦合至芯片组1790。
现在参照图19,示出了根据本发明的实施例的SoC 1900的框图。图15中的相似元件具有相同的参考数字。此外,虚线框是关于更先进的SoC的可选特征。在图19中,(多个)互连单元1902被耦合至:应用处理器1910,所述应用处理器包括一组一个或多个核182A至182N以及(多个)共享高速缓存单元1506;系统代理单元1510;(多个)总线控制器单元1516;(多个)集成存储器控制器单元1514;一组一个或多个协处理器1920,所述协处理器可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元1930;直接存储器访问(DMA)单元1932;以及显示单元1940,所述显示单元用于耦合至一个或多个外部显示器。在一个实施例中,(多个)协处理器1920是专用处理器,如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
可以在硬件、软件、固件或这种实施方式的组合中实施本文公开的机制的实施例。本发明的实施例可以被实施为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。
如图17所示的代码1730等程序代码可以被应用于输入指令以执行本文所述的功能并且生成输出信息。输出信息能够以已知的方式应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以以高级程序或面向对象的编程语言来实施以便与处理系统通信。如果期望的话,程序代码还可以以汇编或机器语言来实施。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
可由机器可读介质上所存储的代表性指令实现至少一个实施例的一个或多个方面,所述指令表示处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文描述的技术的逻辑。这种表示(被称为“IP核”)可以被存储在有形机器可读介质上并提供给各顾客或制造设施以加载到实际制作所述逻辑或处理器的制作机器中。
这种机器可读存储介质可以包括但不限于:由机器或设备制造或形成的物品的非瞬态有形安排,包括如硬盘等存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体设备,比如,只读存储器(ROM);随机存取存储器(RAM),比如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM);可擦除可编程只读存储器(EPROM);闪存存储器;电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括包含指令或包含设计数据(比如,硬件描述语言(HDL))的非瞬态有形机器可读介质,所述非瞬态有形机器可读介质限定本文描述的结构、电路、设备、处理器和/或系统特征。这种实施例也可以被称为程序产品。
仿真(包括二进制转换、代码变形等)
在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真、或以其他方式转换为有待由核处理的一个或多个其他指令。可以在软件、硬件、固件或其组合中实施指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。
图20是框图,对照了根据本发明的实施例的对用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用。在所示实施例中,指令转换器是软件指令转换器,然而可替代地,可以在软件、固件、硬件或其各种组合中实施指令转换器。图20示出了可以使用x86编译器2004来编译高级语言2002的程序以生成x86二进制代码2006,所述x86二进制代码可以由具有至少一个x86指令集核的处理器2016本机执行。具有至少一个x86指令集核的处理器2016表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的因特尔处理器基本相同功能的任何处理器:(1)因特尔x86指令集核的指令集的实质部分、或(2)目标代码版本的应用或目标是在具有至少一个x86指令集核的因特尔处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的因特尔处理器基本相同的结果。x86编译器2004表示可操作用于生成x86二进制代码2006(例如,目标代码)的编译器,所述x86二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核2016的处理器上执行。类似地,图20示出了可以使用替代指令集编译器2008来编译生成替代指令集二进制代码2010的高级语言2002的程序,可以由不具有至少一个x86指令集核2014的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的多个核的处理器)本机执行所述替代指令集二进制代码。指令转换器2012用于将x86二进制代码2006转换为可由不具有x86指令集核2014的处理器本机执行的代码。此经转换的代码不太可能与替代指令集二进制代码2010相同,因为很难制作能够实现这一点的指令转换器;然而,经转换的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2012表示通过仿真、模拟或任何其他进程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2006的软件、固件、硬件或其组合。
可选地,针对图1至图7中任一者描述的组件、特征和细节还可以适用于图8至图12中的任一者。此外,可选地,针对所述装置中的任一者描述的组件、特征和细节还可以适用于在实施例中可由和/或用这种装置执行的任何方法。本文所述处理器中的任一个可包括在本文(例如,图13至图15)公开的计算机系统中的任一个中。在一些实施例中,计算机系统可以包括动态随机存取存储器(DRAM)。可替代地,计算机系统可以包括某种类型的不需要刷新的易失性存储器或闪存。本文公开的指令可使用本文示出的在本文示出的系统中的任何系统上的具有本文示出的微架构中的任何微架构的处理器中的任何处理器来执行。
在说明书和权利要求书中,可能使用术语“耦合”和“连接”及其衍生词。这些术语并不旨在作为彼此的同义词。而是,在实施例中,“连接”可以用于指示两个或更多个元件直接物理和/或电气接触。“耦合”可以意指两个或更多个元件彼此直接物理和/或电气接触。然而,“耦合”还可以意指两个或更多个元件并非彼此直接接触,但仍彼此协作或交互。例如,执行单元可以通过一个或多个中间组件与寄存器和/或解码单元耦合。在附图中,箭头用于示出连接和耦合。
可能已使用术语“和/或”。如本文所使用的,术语“和/或”是指一个或另一个或两者(例如,A和/或B意指A或B或A和B两者)。
在以上描述中,已经阐述了许多特定细节以便提供对实施例的透彻理解。然而,可以在没有这些具体细节中的一些具体细节的情况下实践其他实施例。本发明的范围不是通过上面提供的具体实施例来确定,而是由下面的权利要求来确定。在其他情况下,已知的电路、结构、设备和操作已经以框图形式和/或没有详细地示出,以避免模糊对说明书的理解。在认为适当的情况下,参考数字或参考数字的端点部分已经在附图中重复,以指示对应的或类似的元件,所述元件可以可选地具有相似或相同的特性,除非另有说明或清楚地显现。
某些操作可以由硬件组件执行、或者可以体现在机器可执行或电路可执行指令中,所述指令可以用于引起和/或导致机器、电路或硬件组件(例如,处理器、处理器的一部分、电路等)编程有执行这些操作的指令。可选地,还可以通过硬件和软件的组合来执行操作。可以包括特定或具体电路或其他逻辑(例如,可能与固件和/或软件组合的硬件)的处理器、机器、电路或硬件可操作用于执行和/或处理指令并且响应于指令而存储结果。
一些实施例包括制品(例如,计算机程序产品),所述制品包括机器可读介质。介质可以包括以机器可读的形式提供(例如,存储)信息的机制。机器可读介质可以提供或已经在其上存储有指令或指令序列,所述指令或指令序列如果和/或当被机器执行时可操作用于使所述机器执行和/或导致所述机器执行本文公开的一种或多种操作、方法或技术。
在一些实施例中,机器可读介质可以包括非瞬态机器可读存储介质。例如,非瞬态机器可读存储介质可以包括软盘、光存储介质、光盘、光数据存储设备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非瞬态存储器、非瞬态数据存储设备等。非瞬态机器可读存储介质不由瞬态传播信号组成。在一些实施例中,存储介质可以包括有形介质,所述有形介质包括固体物质。
适合机器的示例包括但不限于:通用处理器、专用处理器、数字逻辑电路、集成电路等。适合机器的其他示例包括:计算机系统或包括处理器、数字逻辑电路或集成电路的其他电子设备。这种计算系统或电子设备的示例包括但不限于台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、智能电视、上网机、机顶盒和视频游戏控制器。
在整个说明书中,引用“一个实施例”、“实施例”,“一个或多个实施例”、“一些实施例”例如指示特定特征可以在本发明的实践中被包括但未必是必须的。类似地,在说明书中,为了简化本公开并辅助理解各个发明性方面,各种特征有时在单个实施例、图或对其的描述中分组在一起。然而,本公开的方法并不被解释为反映本发明要求比每个权利要求中明确陈述的更多特征的意图。相反,正如以下的权利要求书所反映的,发明性方面在于少于单个公开的实施例的全部特征。因此,据此明确地将具体实施方式之后的权利要求结合到具体实施方式中,其中,每一项权利要求独立地代表本发明的单独实施例。
示例实施例
以下示例涉及进一步的实施例。可以在一个或多个实施例中的任何地方使用示例中的细节。
示例1是一种处理器,所述处理器包括:解码单元,所述解码单元用于对指令进行解码;以及执行单元,所述执行单元与所述解码单元耦合。所述执行单元响应于所述指令而用于:确定由于所述指令而导致的对影子栈的影子栈指针(SSP)的试图改变将使所述SSP超出允许范围;以及响应于确定对所述SSP的所述试图改变将使所述SSP超出所述允许范围而引发异常。
示例2包括如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于将对所述SSP的所述试图改变与用于指定所述允许范围的SSP基址和SSP界限进行比较。
示例3包括如权利要求2所述的处理器,其中,所述SSP基址用于表示所述影子栈的最低允许逻辑地址,并且所述SSP界限用于表示所述影子栈的最高允许逻辑地址。
示例4包括如权利要求2所述的处理器,其中,所述SSP基址和所述SSP界限将由特权系统软件指定。
示例5包括如权利要求2所述的处理器,其中,所述SSP基址和所述SSP界限将被存储在所述处理器的控制寄存器中。
示例6包括如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于确定由于所述指令而导致的将数据试图推入到所述影子栈中将使所述SSP超出所述允许范围并且将引起在所述允许范围之外存储数据。
示例7包括如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于确定由于所述指令而导致的从所述影子栈中试图弹出数据将引起从所述允许范围之外读出值。
示例8包括如权利要求1所述的处理器,其中,所述解码单元用于对用来指示影子栈选择符的所述指令进行解码,并且其中,所述执行单元响应于所述指令而用于使用所述影子栈选择符来选择所述影子栈。
示例9包括如权利要求8所述的处理器,其中,所述解码单元用于对用来指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码,其中,所述SSDT选择符用于在影子栈描述符表(SSDT)中选择将与所述影子栈相对应的条目。
示例10包括如权利要求9所述的处理器,其中,所述SSDT中的所述条目用于存储用于指定所述允许范围的SSP基址和SSP界限。
示例11包括如权利要求8所述的处理器,其中,所述执行单元响应于所述指令而用于判定所述影子栈选择符将选择的所述影子栈是否有效。
示例12包括如权利要求11所述的处理器,其中,所述解码单元用于对用来指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码。而且,可选地,其中,所述SSDT选择符用于在影子栈描述符表(SSDT)中选择将与所述影子栈相对应的条目。而且,可选地,其中,所述执行单元响应于所述指令而用于至少部分地基于所述条目的有效性指示符来判定所述影子栈是否有效。
示例13包括如权利要求1至12中任一项所述的处理器,其中,所述处理器结合引发所述异常而用于:从任务状态片段结构中获得影子栈描述符表(SSDT)选择符;以及使用所述影子栈描述符表(SSDT)选择符来确定将由用于处理所述异常的处理程序所使用的第二影子栈的第二SSP的允许范围。
示例14包括如权利要求1至12中任一项所述的处理器,其中,所述允许范围是允许线性地址范围。
示例15包括如权利要求1至12中任一项所述的处理器,其中,所述允许范围将由特权系统软件指定。
示例16包括如权利要求1至12中任一项所述的处理器,其中,所述影子栈用于对存储在调用栈上的返回地址的副本进行存储,而不用于对作为参数传递至被调用程序的用户级数据进行存储。
示例17是一种处理器,所述处理器包括:解码单元,所述解码单元用于对保存影子栈指针指令进行解码;以及执行单元,所述执行单元与所述解码单元耦合。所述执行单元响应于所述影子栈指针指令而用于:确定将影子栈指针(SSP)值推入到影子栈中不会使所述SSP超出允许范围;以及在确定将所述SSP值推入到所述影子栈中不会使所述SSP超出所述允许范围之后,将所述SSP值推入到所述影子栈中。
示例18包括如权利要求17所述的处理器,其中,所述解码单元用于对用来指示目的地存储位置的所述保存影子栈指针指令进行解码,并且其中,所述执行单元响应于所述保存影子栈指针指令而用于在将所述SSP值推入到所述影子栈中之后将当前SSP存储在所述目的地存储位置中。
示例19包括如权利要求17至18中任一项所述的处理器,其中,所述解码单元用于对将是用户级指令的所述保存影子栈指针指令进行解码。
示例20是一种处理器,所述处理器包括:解码单元,所述解码单元用于对恢复影子栈指针指令进行解码。所述恢复影子栈指针指令用于指示给定影子栈指针(SSP)值。执行单元与所述解码单元耦合。所述执行单元响应于所述恢复影子栈指针指令而用于确定所述给定SSP值不超出相应影子栈的允许范围。所述执行单元还用于确定由所述指令指示的所述给定SSP值与从所述相应影子栈接收到的SSP值一致。所述执行单元还用于将所述相应影子栈的SSP改变为所述给定SSP值。
示例21包括如权利要求20所述的处理器,其中,所述执行单元响应于所述指令而用于确定所述给定SSP值处于用于指定所述允许范围的SSP基址和SSP界限之内。
示例22包括如权利要求21所述的处理器,其中,所述SSP基址用于表示所述影子栈的最低允许逻辑地址,并且所述SSP界限用于表示所述影子栈的最高允许逻辑地址。
示例23包括如权利要求20所述的处理器,其中,所述解码单元用于对用来指示影子栈选择符的所述恢复影子栈指针指令进行解码,所述影子栈选择符用于选择所述相应影子栈。
示例24包括如权利要求23所述的处理器,其中,所述解码单元用于对用来指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码。而且,可选地,其中,所述执行单元响应于所述指令而用于使用所述SSDT选择符来在影子栈描述符表(SSDT)中选择条目,并且其中,所述条目用于指定所述影子栈的所述允许范围。
示例25包括如权利要求20至24中任一项所述的处理器,其中,所述执行单元响应于所述指令而进一步用于损坏在对所述给定SSP值进行所述改变之前已经保存在所述相应影子栈上的所述SSP值。
示例26包括如权利要求20至24中任一项所述的处理器,其中,所述解码单元用于对将是用户级指令的所述保存影子栈指针指令进行解码。
示例27是一种处理器,所述处理器包括:解码单元,所述解码单元用于对返回指令进行解码;以及执行单元,所述执行单元与所述解码单元耦合。所述执行单元响应于所述返回指令而用于:从栈接收返回地址;以及确定从影子栈中弹出返回地址不会引起从所述影子栈的允许范围之外读出值。所述执行单元还用于:从所述影子栈接收所述返回地址;以及确定来自所述栈的所述返回地址与来自所述影子栈的所述返回地址一致。所述执行单元还用于将来自所述栈的所述返回地址和来自所述影子栈的所述返回地址之一存储在指令指针寄存器中。
示例28包括如权利要求27所述的处理器,其中,所述允许范围是由特权系统软件指定的允许线性地址范围。
示例29是一种用于处理指令的系统,所述系统包括互连、与所述互连耦合的处理器。所述处理器用于接收指令。所述处理器响应于所述指令而用于:确定由于所述指令而导致的对影子栈的影子栈指针(SSP)的试图改变将使所述SSP超出允许范围;以及响应于确定对所述SSP的所述试图改变将使所述SSP超出所述允许范围而引发异常。所述系统还包括与所述互连耦合的动态随机存取存储器(DRAM)。所述DRAM存储有特权系统软件的指令集,所述指令集当被所述处理器执行时用于使所述处理器执行包括以下各项的操作:确定所述SSP的所述允许范围;以及将所述SSP的所述允许范围存储在所述DRAM的访问受保护部分中。
示例30包括如权利要求29所述的系统,其中,所述允许范围包括线性地址范围,并且其中,所述指令是用户级指令。
示例31包括如示例1至16中任一项所述的处理器,所述处理器进一步包括:可选的分支预测单元,用于预测分支;以及可选的指令预取单元,与所述分支预测单元耦合,所述指令预取单元用于预取包括所述指令的指令。可选地,所述处理器还可以包括可选的1级(L1)指令高速缓存,与所述指令预取单元耦合,所述L1指令高速缓存用于存储指令;可选的L1数据高速缓存,用于存储数据;以及可选的2级(L2)高速缓存,用于存储数据和指令。可选地,所述处理器还可以包括指令获取单元,所述指令获取单元与所述解码单元、所述L1指令高速缓存以及所述L2高速缓存耦合以便在一些情况下从所述L1指令高速缓存和所述L2高速缓存之一获取所述指令并且以便向所述解码单元提供所述指令。可选地,所述处理器还可以包括寄存器重命名单元,用于对寄存器进行重命名;可选的调度器,用于对已经从所述指令中解码的一项或多项操作进行调度以供执行;以及可选的提交单元,用于提交所述指令的执行结果。
示例32包括如示例1至16中任一项所述的处理器或其他装置并且可选地包括可选的动态随机存取存储器(DRAM)、可选的图形设备以及可选的无线收发器的任何组合。
示例33是一种基本上如本文描述的处理器或其他装置。
示例34是一种用于执行基本上如本文描述的任何指令的处理器或其他装置(例如,其具有用于执行所述指令的组件或其可操作用于执行所述指令)。
示例35是一种计算机系统或其他电子设备,其包括处理器,所述处理器具有解码单元,所述解码单元用于对第一指令集的指令进行解码。所述处理器还具有一个或多个执行单元。所述电子设备还包括与所述处理器耦合的存储设备。所述存储设备用于存储第一指令,所述第一指令可以是基本上如本文公开的指令中的任何指令,并且所述第一指令将属于第二指令集。所述存储设备还用于存储用于将所述第一指令转换成所述第一指令集的一个或多个指令的指令。所述第一指令集的所述一个或多个指令当由所述处理器执行时将使所述处理器仿真所述第一指令。

Claims (25)

1.一种处理器,包括:
解码单元,所述解码单元用于对指令进行解码;以及
执行单元,所述执行单元与所述解码单元耦合,所述执行单元响应于所述指令而用于:
确定由于所述指令而导致的对影子栈的影子栈指针(SSP)的试图改变将使所述SSP超出允许范围;以及
响应于确定对所述SSP的所述试图改变将使所述SSP超出所述允许范围而引发异常。
2.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于将对所述SSP的所述试图改变与用于指定所述允许范围的SSP基址和SSP界限进行比较。
3.如权利要求2所述的处理器,其中,所述SSP基址用于表示所述影子栈的最低允许逻辑地址,并且所述SSP界限用于表示所述影子栈的最高允许逻辑地址。
4.如权利要求2所述的处理器,其中,所述SSP基址和所述SSP界限将由特权系统软件指定。
5.如权利要求2所述的处理器,其中,所述SSP基址和所述SSP界限将被存储在所述处理器的控制寄存器中。
6.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于确定由于所述指令而导致的将数据试图推入到所述影子栈中将使所述SSP超出所述允许范围并且将引起在所述允许范围之外存储数据。
7.如权利要求1所述的处理器,其中,所述执行单元响应于所述指令而用于确定由于所述指令而导致的从所述影子栈中试图弹出数据将引起从所述允许范围之外读出值。
8.如权利要求1所述的处理器,其中,所述解码单元用于对用来指示影子栈选择符的所述指令进行解码,并且其中,所述执行单元响应于所述指令而用于使用所述影子栈选择符来选择所述影子栈。
9.如权利要求8所述的处理器,其中,所述解码单元用于对指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码,其中,所述SSDT选择符用于在影子栈描述符表(SSDT)中选择将与所述影子栈相对应的条目。
10.如权利要求9所述的处理器,其中,所述SSDT中的所述条目用于存储用于指定所述允许范围的SSP基址和SSP界限。
11.如权利要求8所述的处理器,其中,所述执行单元响应于所述指令而用于判定所述影子栈选择符将选择的所述影子栈是否有效。
12.如权利要求11所述的处理器,其中,所述解码单元用于对指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码,其中,所述SSDT选择符用于在影子栈描述符表(SSDT)中选择将与所述影子栈相对应的条目,并且其中,所述执行单元响应于所述指令而用于至少部分地基于所述条目的有效性指示符来判定所述影子栈是否有效。
13.如权利要求1至12中任一项所述的处理器,其中,所述处理器结合引发所述异常而用于:
从任务状态片段结构中获得影子栈描述符表(SSDT)选择符;以及
使用所述影子栈描述符表(SSDT)选择符来确定将由用于处理所述异常的处理程序所使用的第二影子栈的第二SSP的允许范围。
14.如权利要求1至12中任一项所述的处理器,其中,所述允许范围是允许线性地址范围,其中,所述允许范围将由特权系统软件指定,并且其中,所述影子栈用于对存储在调用栈上的返回地址的副本进行存储,而不用于对作为参数传递至被调用程序的用户级数据进行存储。
15.一种处理器,包括:
解码单元,所述解码单元用于对保存影子栈指针指令进行解码;以及
执行单元,所述执行单元与所述解码单元耦合,所述执行单元响应于所述影子栈指针指令而用于:
确定将影子栈指针(SSP)值推入到影子栈中不会使所述SSP超出允许范围;以及
在确定将所述SSP值推入到所述影子栈中不会使所述SSP超出所述允许范围之后,将所述SSP值推入到所述影子栈中。
16.如权利要求15所述的处理器,其中,所述解码单元用于对指示目的地存储位置的所述保存影子栈指针指令进行解码,并且其中,所述执行单元响应于所述保存影子栈指针指令而用于在将所述SSP值推入到所述影子栈中之后将当前SSP存储在所述目的地存储位置中。
17.如权利要求15至16中任一项所述的处理器,其中,所述解码单元用于对将是用户级指令的所述保存影子栈指针指令进行解码。
18.一种处理器,包括:
解码单元,所述解码单元用于对恢复影子栈指针指令进行解码,所述恢复影子栈指针指令指示给定影子栈指针(SSP)值;以及
执行单元,所述执行单元与所述解码单元耦合,所述执行单元响应于所述恢复影子栈指针指令而用于:
确定所述给定SSP值不超出相应影子栈的允许范围;
确定由所述指令指示的所述给定SSP值与从所述相应影子栈接收到的SSP值一致;以及
将所述相应影子栈的SSP改变为所述给定SSP值。
19.如权利要求18所述的处理器,其中,所述执行单元响应于所述指令而用于确定所述给定SSP值处于用于指定所述允许范围的SSP基址和SSP界限之内,并且其中,所述SSP基址用于表示所述影子栈的最低允许逻辑地址,并且所述SSP界限用于表示所述影子栈的最高允许逻辑地址。
20.如权利要求18所述的处理器,其中,所述解码单元用于对指示影子栈选择符的所述恢复影子栈指针指令进行解码,所述影子栈选择符用于选择所述相应影子栈。
21.如权利要求20所述的处理器,其中,所述解码单元用于对指示影子栈描述符表(SSDT)选择符作为所述影子栈选择符的所述指令进行解码,并且其中,所述执行单元响应于所述指令而用于使用所述SSDT选择符来在影子栈描述符表(SSDT)中选择条目,并且其中,所述条目用于指定所述影子栈的所述允许范围。
22.如权利要求18至21中任一项所述的处理器,其中,所述执行单元响应于所述指令而进一步用于损坏在对所述给定SSP值进行所述改变之前已经保存在所述相应影子栈上的所述SSP值。
23.一种电子设备,包括互连、与所述互连耦合的如权利要求1至12中任一项所述的处理器、以及与所述互连相耦合的动态随机存取存储器(DRAM),所述DRAM存储有特权系统软件的指令集,所述指令集当被所述处理器执行时用于使所述处理器执行包括以下各项的操作:
确定所述SSP的所述允许范围;以及
将所述SSP的所述允许范围存储在所述DRAM的访问受保护部分中。
24.一种处理器,包括:
转换装置,所述转换装置用于转换指令;以及
执行装置,所述执行装置与所述转换装置耦合,所述执行装置响应于所述指令而用于:
确定由于所述指令而导致的对影子栈的影子栈指针(SSP)的试图改变将使所述SSP超出允许范围;以及
响应于确定对所述SSP的所述试图改变将使所述SSP超出所述允许范围而引发异常。
25.如权利要求24所述的处理器,其中,所述执行装置响应于所述指令而用于将对所述SSP的所述试图改变与用于指定所述允许范围的SSP基址和SSP界限进行比较。
CN201680029980.5A 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令 Pending CN107667372A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110256487.XA CN112988624A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令
CN202410128866.4A CN117873922A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/752,221 2015-06-26
US14/752,221 US20160381050A1 (en) 2015-06-26 2015-06-26 Processors, methods, systems, and instructions to protect shadow stacks
PCT/US2016/034364 WO2016209533A1 (en) 2015-06-26 2016-05-26 Processors, methods, systems, and instructions to protect shadow stacks

Related Child Applications (2)

Application Number Title Priority Date Filing Date
CN202410128866.4A Division CN117873922A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令
CN202110256487.XA Division CN112988624A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令

Publications (1)

Publication Number Publication Date
CN107667372A true CN107667372A (zh) 2018-02-06

Family

ID=57586232

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201680029980.5A Pending CN107667372A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令
CN202110256487.XA Pending CN112988624A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令
CN202410128866.4A Pending CN117873922A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN202110256487.XA Pending CN112988624A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令
CN202410128866.4A Pending CN117873922A (zh) 2015-06-26 2016-05-26 用于保护影子栈的处理器、方法、系统和指令

Country Status (5)

Country Link
US (3) US20160381050A1 (zh)
EP (4) EP3314507B1 (zh)
CN (3) CN107667372A (zh)
TW (3) TWI807877B (zh)
WO (1) WO2016209533A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019237865A1 (zh) * 2018-06-12 2019-12-19 杨力祥 一种数据保护方法及计算装置
CN112580023A (zh) * 2020-12-23 2021-03-30 海光信息技术股份有限公司 影子栈管理方法及装置、介质、设备

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2993605A1 (en) * 2014-09-02 2016-03-09 Gemalto Sa System and method for protecting a device against attacks on processing flow using a code pointer complement
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) * 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
DE102016203283A1 (de) * 2016-02-29 2017-08-31 Robert Bosch Gmbh Verfahren zum Betreiben eines Mikroprozessors
US20180285559A1 (en) * 2017-03-28 2018-10-04 Rodrigo Branco Stack pivot detection systems and methods
US10650544B2 (en) * 2017-06-09 2020-05-12 Sony Interactive Entertainment Inc. Optimized shadows in a foveated rendering system
US10740452B2 (en) 2017-09-15 2020-08-11 Arm Limited Call path dependent authentication
US10885183B2 (en) * 2017-09-28 2021-01-05 International Business Machines Corporation Return oriented programming attack protection
US11275587B2 (en) 2018-05-02 2022-03-15 Micron Technology, Inc. Static identifications in object-based memory access
US20200073822A1 (en) * 2018-08-30 2020-03-05 Micron Technology, Inc. Security Configuration for Memory Address Translation from Object Specific Virtual Address Spaces to a Physical Address Space
US11481241B2 (en) 2018-08-30 2022-10-25 Micron Technology, Inc. Virtual machine register in a computer processor
US10942863B2 (en) 2018-08-30 2021-03-09 Micron Technology, Inc. Security configurations in page table entries for execution domains using a sandbox application operation
US10915465B2 (en) 2018-08-30 2021-02-09 Micron Technology, Inc. Memory configured to store predefined set of domain registers for instructions being executed in computer processors
US11914726B2 (en) 2018-08-30 2024-02-27 Micron Technology, Inc. Access control for processor registers based on execution domains
US10915457B2 (en) 2018-08-30 2021-02-09 Micron Technology, Inc. Memory access control through permissions specified in page table entries for execution domains
US11182507B2 (en) 2018-08-30 2021-11-23 Micron Technology, Inc. Domain crossing in executing instructions in computer processors
US11500665B2 (en) 2018-08-30 2022-11-15 Micron Technology, Inc. Dynamic configuration of a computer processor based on the presence of a hypervisor
US11010479B2 (en) 2018-10-01 2021-05-18 International Business Machines Corporation Cyber security for space-switching program calls
US10915640B2 (en) * 2018-10-01 2021-02-09 International Business Machines Corporation Cyber security testing for authorized services
US11544069B2 (en) 2018-10-25 2023-01-03 Micron Technology, Inc. Universal pointers for data exchange in a computer system having independent processors
US20210182390A1 (en) * 2019-03-27 2021-06-17 Mark Winterrowd Memory management to reduce risk of malicious third-party attacks
US11449339B2 (en) * 2019-09-27 2022-09-20 Red Hat, Inc. Memory barrier elision for multi-threaded workloads
US11336679B2 (en) 2020-01-28 2022-05-17 International Business Machines Corporation Combinatorial test design for optimizing parameter list testing
US11243769B2 (en) 2020-03-28 2022-02-08 Intel Corporation Shadow stack ISA extensions to support fast return and event delivery (FRED) architecture
US11829807B2 (en) * 2020-05-15 2023-11-28 Samsung Electronics Co., Ltd. Method and apparatus for preventing task-signal deadlock due to contention for mutex in RTOS
GB2597249B (en) * 2020-07-16 2022-12-21 Advanced Risc Mach Ltd Authentication code generation/checking instructions
CN112579988B (zh) * 2020-12-10 2022-12-06 海光信息技术股份有限公司 影子栈数据完整性保护方法、装置和计算机设备
CN114266036A (zh) * 2021-11-29 2022-04-01 中国科学院计算技术研究所 一种基于Intel CET机制的保护通用内存完整性的方法
US11789737B2 (en) * 2022-03-24 2023-10-17 Intel Corporation Capability-based stack protection for software fault isolation
US11977486B2 (en) * 2022-04-04 2024-05-07 International Business Machines Corporation Shadow pointer directory in an inclusive hierarchical cache

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6128728A (en) * 1997-08-01 2000-10-03 Micron Technology, Inc. Virtual shadow registers and virtual register windows
CN1469254A (zh) * 2002-06-07 2004-01-21 ���µ�����ҵ��ʽ���� 处理器装置、使用它的信息处理装置、编译装置及其方法
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US20100174893A1 (en) * 2009-01-05 2010-07-08 International Business Machines Corporation Runtime checking of dynamic subranges
US20120030392A1 (en) * 2010-07-30 2012-02-02 Mips Technologies, Inc. System and Method for Automatic Hardware Interrupt Handling
WO2015044993A1 (ja) * 2013-09-24 2015-04-02 株式会社 エーティーティーコンサルティング プロセッサ、処理装置、プログラム作成方法

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3794980A (en) 1971-04-21 1974-02-26 Cogar Corp Apparatus and method for controlling sequential execution of instructions and nesting of subroutines in a data processor
WO1990014629A2 (en) 1989-05-26 1990-11-29 Massachusetts Institute Of Technology Parallel multithreaded data processing system
JPH0752576B2 (ja) 1990-07-19 1995-06-05 株式会社東芝 スタックメモリ
CA2074769C (en) 1991-08-09 2001-03-20 International Business Machines Corporation Formula processor
US5640582A (en) * 1992-05-21 1997-06-17 Intel Corporation Register stacking in a computer system
US5497494A (en) * 1993-07-23 1996-03-05 International Business Machines Corporation Method for saving and restoring the state of a CPU executing code in protected mode
US5634046A (en) 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5968169A (en) * 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
DE19701166A1 (de) * 1997-01-15 1998-07-23 Siemens Ag Verfahren zur Überwachung der bestimmungsgemäßen Ausführung von Softwareprogrammen
CA2383531A1 (en) 1999-09-01 2001-03-08 Intel Corporation Instruction for multithreaded parallel processor
US6757771B2 (en) * 2000-08-09 2004-06-29 Advanced Micro Devices, Inc. Stack switching mechanism in a computer system
US6751749B2 (en) 2001-02-22 2004-06-15 International Business Machines Corporation Method and apparatus for computer system reliability
US20030195991A1 (en) 2001-07-02 2003-10-16 Globespanvirata Incorporated Communications system using rings architecture
US7086088B2 (en) * 2002-05-15 2006-08-01 Nokia, Inc. Preventing stack buffer overflow attacks
US6996677B2 (en) * 2002-11-25 2006-02-07 Nortel Networks Limited Method and apparatus for protecting memory stacks
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
US7594111B2 (en) 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
FR2851349A1 (fr) 2003-02-17 2004-08-20 St Microelectronics Sa Procede de gestion d'une pile de microprocesseur pour la sauvegarde de donnees contextuelles
US20050044292A1 (en) * 2003-08-19 2005-02-24 Mckeen Francis X. Method and apparatus to retain system control when a buffer overflow attack occurs
JP4740851B2 (ja) 2003-08-28 2011-08-03 ミップス テクノロジーズ インコーポレイテッド 仮想プロセッサリソースの動的構成のための機構体
DE10349200A1 (de) * 2003-10-23 2005-05-25 Daimlerchrysler Ag System und Verfahren zur Überwachung und Verwaltung prozessinterner Speicher einer Prozessausführungseinheit
US7478224B2 (en) * 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions
US20060277396A1 (en) 2005-06-06 2006-12-07 Renno Erik K Memory operations in microprocessors with multiple execution modes and register files
US7844804B2 (en) 2005-11-10 2010-11-30 Qualcomm Incorporated Expansion of a stacked register file using shadow registers
JP4844102B2 (ja) 2005-11-30 2011-12-28 富士ゼロックス株式会社 サブプログラム及びそのサブプログラムを実行する情報処理装置
WO2008122746A1 (en) 2007-04-10 2008-10-16 Cambridge Consultants Limited Data processing apparatus
US8209757B1 (en) 2008-03-06 2012-06-26 Symantec Corporation Direct call into system DLL detection system and method
US8117660B2 (en) * 2008-06-19 2012-02-14 Microsoft Corporation Secure control flows by monitoring control transfers
US9645949B2 (en) 2008-07-10 2017-05-09 Cambridge Consultants Ltd. Data processing apparatus using privileged and non-privileged modes with multiple stacks
US8051467B2 (en) 2008-08-26 2011-11-01 Atmel Corporation Secure information processing
US20120236010A1 (en) * 2011-03-15 2012-09-20 Boris Ginzburg Page Fault Handling Mechanism
US9633407B2 (en) * 2011-07-29 2017-04-25 Intel Corporation CPU/GPU synchronization mechanism
WO2013101217A1 (en) 2011-12-30 2013-07-04 Intel Corporation Technology abstraction layer
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
CA2809516C (en) * 2013-03-13 2016-11-08 Khalid Nawaf Alharbi Preventing stack buffer overflow attacks
US9239801B2 (en) * 2013-06-05 2016-01-19 Intel Corporation Systems and methods for preventing unauthorized stack pivoting
US9015835B2 (en) 2013-06-23 2015-04-21 Intel Corporation Systems and methods for procedure return address verification
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
US9501637B2 (en) 2014-09-26 2016-11-22 Intel Corporation Hardware shadow stack support for legacy guests
US9767272B2 (en) 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US20160179538A1 (en) 2014-12-19 2016-06-23 Intel Corporation Method and apparatus for implementing and maintaining a stack of predicate values with stack synchronization instructions in an out of order hardware software co-designed processor
US9477453B1 (en) 2015-06-24 2016-10-25 Intel Corporation Technologies for shadow stack manipulation for binary translation systems
US9817642B2 (en) 2015-06-25 2017-11-14 Intel Corporation Apparatus and method for efficient call/return emulation using a dual return stack buffer
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US9965619B2 (en) 2015-07-13 2018-05-08 Intel Corporation Return address overflow buffer
US20170090927A1 (en) 2015-09-30 2017-03-30 Paul Caprioli Control transfer instructions indicating intent to call or return
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US9898351B2 (en) 2015-12-24 2018-02-20 Intel Corporation Method and apparatus for user-level thread synchronization with a monitor and MWAIT architecture
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6128728A (en) * 1997-08-01 2000-10-03 Micron Technology, Inc. Virtual shadow registers and virtual register windows
CN1469254A (zh) * 2002-06-07 2004-01-21 ���µ�����ҵ��ʽ���� 处理器装置、使用它的信息处理装置、编译装置及其方法
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US20100174893A1 (en) * 2009-01-05 2010-07-08 International Business Machines Corporation Runtime checking of dynamic subranges
US20120030392A1 (en) * 2010-07-30 2012-02-02 Mips Technologies, Inc. System and Method for Automatic Hardware Interrupt Handling
WO2015044993A1 (ja) * 2013-09-24 2015-04-02 株式会社 エーティーティーコンサルティング プロセッサ、処理装置、プログラム作成方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019237865A1 (zh) * 2018-06-12 2019-12-19 杨力祥 一种数据保护方法及计算装置
CN110598406A (zh) * 2018-06-12 2019-12-20 杨力祥 一种数据保护方法及计算装置
CN110598406B (zh) * 2018-06-12 2022-08-23 杨力祥 一种数据保护方法及计算装置
CN112580023A (zh) * 2020-12-23 2021-03-30 海光信息技术股份有限公司 影子栈管理方法及装置、介质、设备

Also Published As

Publication number Publication date
EP3314507A1 (en) 2018-05-02
EP3314507A4 (en) 2019-04-17
US20210109684A1 (en) 2021-04-15
US11656805B2 (en) 2023-05-23
EP3800546B1 (en) 2022-12-28
US20160381050A1 (en) 2016-12-29
CN112988624A (zh) 2021-06-18
WO2016209533A1 (en) 2016-12-29
TW202127240A (zh) 2021-07-16
TW202240383A (zh) 2022-10-16
TW201709048A (zh) 2017-03-01
EP3314507B1 (en) 2020-11-25
EP3800546A1 (en) 2021-04-07
TWI807877B (zh) 2023-07-01
TWI712953B (zh) 2020-12-11
US20230376252A1 (en) 2023-11-23
EP4325352A2 (en) 2024-02-21
TWI769595B (zh) 2022-07-01
EP4099158A1 (en) 2022-12-07
CN117873922A (zh) 2024-04-12

Similar Documents

Publication Publication Date Title
CN107667372A (zh) 用于保护影子栈的处理器、方法、系统和指令
CN105190572B (zh) 用于防止未经授权的堆栈转移的系统和方法
CN104951697B (zh) 来自过程指令的返回-目标限制性返回、处理器、方法及系统
CN105320611B (zh) 用于细粒存储器保护的方法和设备
CN104823173B (zh) 对预留给处理器逻辑使用的存储器的访问类型保护
CN108463826B (zh) 用于在环转变期间保护栈的处理器扩展
CN104714778B (zh) 操作微处理器的方法
CN108268386A (zh) 加速硬件中的存储器排序
CN104969199B (zh) 实施黑名单分页结构指示值的处理器、方法,以及系统
CN102906692B (zh) 修改适配器功能参数的指令的方法和系统
CN108351830A (zh) 用于存储器损坏检测的硬件装置和方法
CN107683480A (zh) 用于支持对受保护容器的实时迁移的处理器、方法、系统和指令
CN107924321A (zh) 针对虚拟机退出的嵌套虚拟化
CN109690552A (zh) 用于判定是否将受保护容器页的加密副本加载到受保护容器存储器中的处理器、方法、系统和指令
CN105453030B (zh) 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统
CN110162380A (zh) 用来防止软件侧通道的机制
CN104025041B (zh) 管理员模式执行保护
CN110574009B (zh) 用于管理对能力的使用的设备和方法
CN108292273A (zh) 用于子页写入保护的方法和装置
CN109992455A (zh) 用于暂停处理器跟踪以进行高效分析的设备和方法
CN109313607A (zh) 用于利用所指示的检查位值来检查位的位检查处理器、方法、系统和指令
CN107924442A (zh) 用于轻量级虚拟化上下文的方法和设备
AU2020294206A1 (en) Apparatus and method to efficiently manage and process shadow stacks

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination