首页 / 专利库 / 钟表 / 指针 / 用于过程返回地址验证的系统和方法

用于过程返回地址验证的系统和方法

阅读:311发布:2021-06-07

专利汇可以提供用于过程返回地址验证的系统和方法专利检索,专利查询,专利分析的服务。并且示例处理系统可以包括:栈 指针 ,配置成用于引用存储在栈上的第一返回地址;返回地址 缓冲器 指针,配置成用于引用存储在返回地址缓冲器中的第二返回地址;以及返回地址验证逻辑,配置成用于响应于接收到返回指令而将所述第一返回地址与所述第二返回地址进行比较。,下面是用于过程返回地址验证的系统和方法专利的具体信息内容。

1.一种处理系统,包括:
指针,所述栈指针配置成用于引用存储在栈上的第一返回地址;
返回地址缓冲器指针,所述返回地址缓冲器指针配置成用于引用存储在返回地址缓冲器中的第二返回地址;以及
返回地址验证逻辑,所述返回地址验证逻辑配置成用于响应于接收到返回指令而将所述第一返回地址与所述第二返回地址进行比较。
2.如权利要求1所述的处理系统,其特征在于,所述返回地址验证逻辑进一步配置成用于响应于确定了所述第一返回地址等于所述第二返回地址来执行所述返回指令。
3.如权利要求1所述的处理系统,其特征在于,所述返回地址验证逻辑进一步配置成用于响应于确定了所述第一返回地址与所述第二返回地址不同来生成栈错误异常。
4.如权利要求1所述的处理系统,其特征在于,所述返回地址验证逻辑进一步配置成用于:响应于接收到调用指令而将返回地址存储在所述栈上,并且存储在所述返回地址缓冲器中。
5.如权利要求1所述的处理系统,其特征在于,所述返回地址验证逻辑进一步配置成用于响应于接收到返回地址缓冲器修改指令来执行下列各项中的至少一项:将返回地址存储在所述返回地址缓冲器中,或从所述返回地址缓冲器中去除返回地址。
6.如权利要求1所述的处理系统,其特征在于,所述返回地址验证逻辑进一步配置成用于响应于接收到返回地址缓冲器修改指令来执行下列各项中的至少一项:递增所述返回地址缓冲器指针,或递减所述返回地址缓冲器指针。
7.如权利要求5-6中的任一项所述的处理系统,其特征在于,所述返回地址缓冲器修改指令是特许的指令。
8.如权利要求1-7中的任一项所述的处理系统,其特征在于,所述栈驻留在通信地耦合到所述处理系统的存储器内。
9.如权利要求1-7中的任一项所述的处理系统,其特征在于,所述返回地址缓冲器至少部分地驻留在通信地耦合到所述处理系统的存储器内。
10.如权利要求1所述的处理系统,其特征在于,所述返回地址缓冲器包括第一部分和第二部分,所述第一部分驻留在被合并进所述处理系统的存储器内,所述第二部分驻留在外部存储器内。
11.如权利要求10所述的处理系统,其特征在于,所述外部存储器由只读存储器提供。
12.如权利要求10-11中的任一项所述的处理系统,其特征在于,所述第二部分配置成作为相对所述第一部分的溢出缓冲器来操作。
13.一种方法,包括:
由处理系统修改栈指针;
修改返回地址缓冲器指针;
接收返回指令;
将由所述栈指针引用的第一返回地址与由所述返回地址缓冲器指针引用的第二返回地址进行比较;以及
响应于确定了所述第一返回地址等于所述第二返回地址,执行所述返回指令。
14.如权利要求13所述的方法,其特征在于,进一步包括响应于确定了所述第一返回地址与所述第二返回地址不同来生成栈错误异常。
15.如权利要求13所述的方法,其特征在于,进一步包括响应于接收到调用指令来将返回地址存储在所述栈上,并且存储在所述返回地址缓冲器中。
16.如权利要求13所述的方法,其特征在于,进一步包括:
接收返回地址缓冲器修改指令;以及
执行下列各项中的至少一项:将返回地址存储在所述返回地址缓冲器中,或从所述返回地址缓冲器中去除返回地址。
17.如权利要求13所述的方法,其特征在于,进一步包括:
接收返回地址缓冲器修改指令;以及
执行下列各项中的至少一项:递增所述返回地址缓冲器指针,或递减所述返回地址缓冲器指针。
18.如权利要求13所述的方法,其特征在于,进一步包括:
初始化所述返回地址缓冲器指针以指向内部返回地址缓冲器;
修改所述返回地址缓冲器指针;
确定到达了所述内部返回地址缓冲的边界;以及
使所述返回地址缓冲器指针指向外部返回地址缓冲器。
19.一种设备,包括:
存储器;以及
处理系统,所述处理系统耦合到所述存储器,所述处理系统配置成用于执行如权利要求13-18中的任何一项所述的方法。
20.一种计算机可读的非暂态存储介质,包括可执行指令,所述可执行指令在由处理系统执行时使所述处理系统执行操作,所述操作包括:
修改栈指针;
修改返回地址缓冲器指针;
接收返回指令;
将由所述栈指针引用的第一返回地址与由返回地址缓冲器指针引用的第二返回地址进行比较;以及
响应于确定了所述第一返回地址等于所述第二返回地址,执行所述返回指令。
21.如权利要求20所述的计算机可读的非暂态存储介质,其特征在于,进一步包括可执行指令,所述可执行指令使所述处理系统响应于确定了所述第一返回地址与所述第二返回地址不同而生成栈错误异常。
22.如权利要求20所述的计算机可读的非暂态存储介质,其特征在于,进一步包括可执行指令,所述可执行指令使所述计算系统响应于接收到调用指令来将返回地址存储在栈上并且存储在所述返回地址缓冲器中。
23.如权利要求20所述的计算机可读的非暂态存储介质,其特征在于,进一步包括可执行指令,所述可执行指令使所述计算系统接收返回地址缓冲器修改指令,并且执行下列各项中的至少一项:将返回地址存储在所述返回地址缓冲器中,或从所述返回地址缓冲器中去除返回地址。
24.如权利要求20所述的计算机可读的非暂态存储介质,其特征在于,进一步包括可执行指令,所述可执行指令使所述计算系统接收返回地址缓冲器修改指令,并且执行下列各项中的至少一项:递增所述返回地址缓冲器指针,或递减所述返回地址缓冲器指针。
25.如权利要求20所述的计算机可读的非暂态存储介质,其特征在于,进一步包括可执行指令,所述可执行指令使所述计算系统:初始化所述返回地址缓冲器指针以指向内部返回地址缓冲器;修改所述返回地址缓冲器指针;确定到达了所述内部返回地址缓冲器的边界;以及使所述返回地址缓冲器指针指向外部返回地址缓冲器。

说明书全文

用于过程返回地址验证的系统和方法

技术领域

[0001] 本公开一般涉及计算机系统,具体而言,涉及用于过程返回地址验证的系统和方法。

背景技术

[0002] 各种返回地址破坏技术可以由恶意软件使用以实施面向返回的编程(return-oriented programming,ROP)攻击。ROP是通过利用返回指令来劫持当前进程
的执行流的方法,在许多处理器架构中,所述返回指令从栈的顶部检索要被执行的下一
条指令(通常是在调用例程内在对应的调用指令之后的指令)的地址。如此,通过修改
栈上的返回地址,攻击者可以将当前进程的执行流转移到任意的存储器位置。在劫持了
执行流之后,攻击者可以例如初始化自变量并执行库函数调用。此技术被称为“返回进
库”(“return-into-library”)。在另一个示例中,攻击者可以在代码段内定位多个要被执行的指令序列。此方法被称为“借用的代码技术”。
[0003] 攻击者可以利用各种方法来进行初始的栈破坏,这也被称为“栈枢转”(“stack pivoting”)。例如,假设输入缓冲器位于栈上,则缓冲器溢出方法涉及提供相比例程正在预期接收的更多的输入数据。附图说明
[0004] 本公开是通过示例而不是限制方式来说明的,当结合附图一起考虑时,参照下列具体实施方式可以更充分地理解本公开,在附图中:
[0005] 图1描绘了根据本公开的一个或多个方面的示例计算机系统的高层级组件图;
[0006] 图2描绘了根据本发明的一个或多个方面的处理器的框图
[0007] 图3a-3b示意性地示出了根据本公开的一个或多个方面的处理器微架构的要素;
[0008] 图4示意性地示出了根据本公开的一个或多个方面的图1的示例计算机系统100的示例处理器及其他组件的若干方面;
[0009] 图5示意性地示出了根据本公开的一个或多个方面的计算机系统栈的存储器布局的一个示例;
[0010] 图6示意性地示出了根据本公开的一个或多个方面的返回地址缓冲器的存储器布局的一个示例;
[0011] 图7描绘了根据本公开的一个或多个方面的用于检测未经授权的栈枢转的示例方法的流程图
[0012] 图8描绘了根据本公开的一个或多个方面的示例计算机系统的框图;
[0013] 图9描绘了根据本公开的一个或多个方面的示例芯片上系统(SoC)的框图;
[0014] 图10描绘了根据本公开的一个或多个方面的示例计算机系统的框图;以及
[0015] 图11描绘了根据本公开的一个或多个方面的示例芯片上系统(SoC)的框图;以及

具体实施方式

[0016] 此处描述了用于过程返回地址验证的计算机系统以及相关的方法。未经授权的栈修改或枢转可以被潜在的攻击者用来尝试进行面向返回的编程(ROP)攻击。后者可能涉及
对存储在栈上的过程返回地址的未授权的修改以将当前进程的执行流转移到任意存储器
位置。攻击者会利用各种方法来进行未经授权的栈修改。例如,假设输入缓冲器位于栈上,则缓冲器溢出方法涉及提供相比例程正在预期接收的更多的输入数据。
[0017] 为了防止未经授权的栈修改,计算机系统可以维持返回地址缓冲器,该返回地址缓冲器设计成用于与计算机系统栈一起冗余地存储过程返回地址。响应于接收到调用指
令,计算机系统的处理器可以将返回地址置于栈以及返回地址缓冲器两者中。响应于接收
到返回指令,处理器可以从栈和返回地址缓冲器中检索返回地址并将它们进行比较。如果
这两个地址匹配,则处理器可以继续执行该返回指令;否则,处理器可以生成异常,从而阻止潜在的攻击者劫持当前进程的执行流。下面以示例方式而非限制方式详细描述以上引用
的方法和系统的各方面。
[0018] 在以下描述中,阐明了众多具体细节以提供对本公开的透彻理解,具体细节诸如,特定类型的处理器和系统配置、特定的硬件结构、特定的架构和微架构细节、特定的寄存器配置、特定的指令类型、特定的系统组件、特定的测量/高度、特定的处理器流线级与操作的示例。然而,对本领域普通技术人员而言显而易见的是,并不需要采用这些特定细节来实施本文所公开的诸方法。在其他实例中,未详细描述公知的组件或方法,以避免不必要地使本公开模糊,公知的组件或方法诸如,特定或替代的处理器架构、用于所描述算法的特定逻辑电路/代码、特定的固件代码、特定的互连操作、特定的逻辑配置、特定的制造技术和材料、特定的编译器实现、代码中算法的特定表达、特定的掉电和功率控技术/逻辑以及计算机系统的其他特定的操作细节。
[0019] 虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。此处所描述的各实施例的类似的技术和教导适用于可以得益于较高的
流水线吞吐量和改善的性能的其他类型的电路或半导体器件。此处所描述的各实施例的教
导适用于执行数据操纵的任何处理器或机器。然而,本公开不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中执行对数据的操纵或
管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应当按限制的意义来解释,因为它们仅仅旨在提供此处所描述的诸实施例的示例,而并非提供此处所描述的诸实施例的所有可能的实现的详尽清单。
[0020] 虽然下面的示例在执行单元以及逻辑电路的上下文中描述了指令处理和分配,但是此处所描述的系统和方法的其他实施例可以通过存储在机器可读的、有形的介质上的数
据或指令来实现,这些数据或指令当由机器执行时,使该机器执行符合此处所描述的至少
一个实施例的功能。在一个实施例中,与此处所描述的诸实施例相关联的功能以机器可执
行指令来具体化。这些指令可以用来使利用这些指令来编程的通用或专用处理器执行此处
所描述的方法。此处所描述的诸实施例可以作为计算机程序产品或软件来提供,该计算机
程序产品或软件可以包括在其上存储有指令的机器或计算机可读介质,这些指令可以用来
对计算机(或其他电子设备)编程以执行根据此处所描述的诸实施例的一个或多个操作。
或者,此处所描述的诸实施例的多个操作可由包含用于执行这些操作的固定功能逻辑的专
用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。
[0021] 用于对逻辑编程以执行此处所描述的方法的指令可以存储在系统中的存储器(诸如,DRAM、高速缓存、闪存,或其他存储设备)内。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(例如,计算机)可读的形式
存储或发送信息的任何机制,但不限于:软盘、光盘、紧致盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在互联网上经由电、光、声、或其他形式的传播信号(例如,载波、红外信号、数字信号等)发送信息中所使用的有形的机器可读存储
器。因此,计算机可读介质包括适用于存储或发送机器(例如,计算机)可读形式的电子指
令或信息的任何类型的有形的机器可读介质。
[0022] 此处“处理器”将指能够执行对算术、逻辑或I/O操作进行编码的指令的设备。在一个说明性示例中,处理器可以遵循冯·诺依曼(Von Neumann)架构模型,并可以包括算术逻辑单元(ALU)、控制单元以及多个寄存器。另一方面,处理器可以包括一个或多个处理器核,因此,处理器可以是通常能够处理单个指令流水线的单核处理器,或可以是可以同时处理多个指令流水线的多核处理器。另一方面,处理器可以实现为单个集成电路,两个或更多个集成电路,或可以是多芯片模块(例如,其中,单独的微处理器管芯被包括在单个集成电路封装中,因此,这些微处理器管芯共享单个插槽)的组件。
[0023] 图1描绘了根据本公开的一个或多个方面的计算机系统的一个示例的高层级组件图。根据此处所描述的实施例,计算机系统100可以包括处理器102,该处理器102用于
使用包括逻辑的执行单元来执行算法以处理数据。系统100表示基于可从美国加利福尼亚
TM TM TM TM
州圣克拉拉市的英特尔公司获得的奔腾III (PENTIUM III )、奔腾IV (PENTIUM 4 )、
TM TM
至强 (Xeon )和/或安腾(Itanium)微处理器的处理系统,不过也可使用其他系统(包括
具有其他微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100执行可
TM
从美国华盛顿州雷蒙德市的微软公司获得的WINDOWS 操作系统的某个版本,不过也可使
用其他操作系统(例如,UNIX和Linux)、嵌入式软件和/或图形用户界面。如此,此处所描
述的诸实施例不限于硬件电路和软件的任何特定的组合。
[0024] 诸实施例不限于计算机系统。此处所描述的系统和方法的替换实施例可以用于诸如手持式设备和嵌入式应用之类的其他设备中。手持式设备的某些示例包括蜂窝电话、
网际协议设备、数码相机个人数字助理(PDA)以及手持式PC。嵌入式应用可包括微控制
器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或能够执行根据至少一个实施例的一条或多条指令的任何其他系统。
[0025] 在该示出的实施例中,处理器102包括用于实现算法的一个或多个执行单元108,该算法用于执行至少一条指令。可在单处理器桌面或服务器系统的上下文中描述一个实施
例,但是可将替代实施例包括在多处理器系统中。系统100是“中枢”系统架构的示例。计算机系统100包括用于处理数据信号的处理器102。作为一个说明性示例,处理器102包括
例如,复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字
(VLIW)微处理器、实现指令集的组合的处理器或任何其他处理器设备(诸如,数字信号处
理器)。处理器102耦合到处理器总线110,该处理器总线110在处理器102与系统100中
的其他组件之间传输数据信号。系统100的元件(例如,图形加速器112、存储器控制器
枢116、存储器120、I/O控制器中枢130、无线收发机126、闪存BIOS 128、网络控制器134、音频控制器136、串行扩展端口138、I/O控制器140等)执行为熟悉本领域的人员所共知
的它们的常规功能。
[0026] 在一个实施例中,处理器102包括第1级(L1)内部高速缓存104。取决于架构,处理器102可以具有单个的内部高速缓存或多个层级的内部高速缓存。其他实施例包括内
部高速缓存和外部高速缓存两者的组合,这取决于特定实现和需求。寄存器组106用于将
不同类型的数据存储在各种寄存器中,各种寄存器包括整数寄存器、浮点寄存器、向量寄存器、区块化(banked)寄存器、影子寄存器(shadow register)、检查点寄存器、状态寄存器以及指令指针寄存器。
[0027] 执行单元108(包括用于执行整数和浮点操作的逻辑)也驻留在处理器102中。在一个实施例中,处理器102包括用于存储微代码的微代码(ucode)ROM,该微代码在被执
行时将执行用于某些宏指令的算法或处理复杂的场景。在此,微代码是潜在地可更新的,以便为处理器102处理逻辑缺陷/修补。对于一个实施例,执行单元108包括用于处理紧缩
指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102以及用于执行指令的相
关联的电路的指令集中,可以使用通用处理器102中的紧缩数据来执行由许多多媒体应用
程序使用的操作。如此,通过将处理器的数据总线的全宽度用于对紧缩数据执行操作,加速了许多多媒体应用并且更高效地执行了紧缩数据。这潜在地消除了跨处理器的数据总线来
传输较小的数据单元以执行一个或多个操作(一次对一个数据元素执行)的需求。执行单
元108的替换实施例也可以用于微控制器、嵌入式处理器、图形设备、DSP及其他类型的逻
辑电路。
[0028] 在某些实现中,处理器102还可以包括下部栈界限寄存器421、上部栈界限寄存器423,以及返回地址验证逻辑150。在一个说明性示例中,处理器102可包括用于两个或更多操作模式(例如,32位用户模式、64位用户模式,以及管理模式)中的每一个操作模式的一
对栈界限寄存器。下面将详细描述返回地址验证逻辑150的运作。
[0029] 系统100包括存储器120。存储器120包括动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器120存储要由处理器
102执行的、由数据信号表示的指令121和/或数据123。在某些实现中,如下文中更详细
地描述的那样,指令121可包括使用返回地址验证逻辑150来检测所企图的栈界限违规的
指令。
[0030] 系统逻辑芯片116耦合至处理器总线110和存储器120。在所示出的实施例中的系统逻辑芯片116是存储器控制器中枢(MCH)。处理器102可经由处理器总线110来与MCH
116通信。MCH 116提供至存储器120的高带宽存储器路径118,用于指令和数据存储,并且
用于图形命令、数据和纹理的存储。MCH 116用于在处理器102、存储器120与系统100中
的其他组件之间引导数据信号,并且用于在处理器总线110、存储器120与系统I/O 122之
间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合至图形控制器112
的图形端口。MCH 116通过存储器接口118耦合至存储器120。图形卡112通过加速图形
端口(AGP)互连114耦合至MCH116。
[0031] 系统100使用专有中枢接口总线122以将MCH 116耦合至I/O控制器中枢(ICH)130。ICH 130经由本地I/O总线来提供到某些I/O设备的直接连接。本地I/O总线
是用于将外围设备连接到存储器120、芯片组以及处理器102的高速I/O总线。一些示例是
音频控制器、固件中枢(闪存BIOS)128、无线收发机126、数据存储设备124、包括用户输入和键盘接口的传统I/O控制器、串行扩展端口(诸如,通用串行总线(USB))以及网络控制
器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量存储设备。数据存储设备124可以存储供处理器102执行的可执行指令。在某些
实现中,如下文中更详细地描述的那样,指令121可包括使用返回地址验证逻辑150来检测
所企图的栈界限违规的指令。
[0032] 对于系统的另一个实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器是闪存。闪
存可以位于与处理器和其他系统组件相同的管芯上。另外,诸如存储器控制器或图形控制
器之类的其他逻辑块也可以位于芯片上系统上。
[0033] 图2是根据本公开的一个或多个方面的处理器200的微架构的框图,该处理器200包括用于执行指令的逻辑电路。在一些实施例中,可将根据一个实施例的指令实现为对具
有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(例如,单精度和双精度整数和浮点数据类型)的数据元素进行操作。在一个实施例中,有序前端201是处理器200
的部分,该部分取出要被执行的指令,并准备这些指令以便稍后在处理器流水线中使用。前端201可包括若干单元。在一个实施例中,指令预取器226从存储器中取出指令,并将这些
指令馈送至指令解码器228,指令解码器进而解码或解释这些指令。例如,在一个实施例中,解码器将接收到的指令解码为机器可以执行的被称为“微指令”或“微操作”(也称为uop)的一个或多个操作。在其他实施例中,该解码器将指令解析为可由微架构用于执行根据一
个实施例的多个操作的操作码以及对应的数据和控制字段。在一个实施例中,追踪高速缓
存230获取经解码的uop,并且在微操作队列234中将它们组合为程序排序的序列踪迹,以
用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的uop。
[0034] 一些指令被转换为单个微op,而其他指令需要若干个微op以完成完整的操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器228访问微代码ROM 232以
执行该指令。对于一个实施例,可将指令解码为少量的微op,以便在指令解码器228处进
行处理。在另一实施例中,如果需要许多微op来完成操作,则可将指令存储在微代码ROM
232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以
从微代码ROM 232中读取微代码序列来完成根据一个实施例的一条或多条指令。在微代码
ROM 232完成对指令的微op进行的序列化操作之后,该机器的前端201恢复从追踪高速缓
存230中取出微op。
[0035] 无序执行引擎203是准备指令以进行执行的地方。无序执行逻辑具有许多缓冲器,这些缓冲器用于使指令流平滑并且重新排序该指令流,以便在这些指令流沿流水线向
下并经调度供执行时优化性能。分配器逻辑分配每一个uop为了执行所需的机器缓冲器和
资源。寄存器重命名逻辑将多个逻辑寄存器映射到寄存器组中的多个条目上。分配器还在
指令调度器(存储器调度器、快速调度器202、慢速/通用浮点调度器204以及简单浮点调
度器206)之前,在两个uop队列(一个用于存储器操作,而另一个用于非存储器操作)中
的一个uop中,为每一个uop分配条目。uop调度器202、204、206基于它们的从属输入寄存
器操作数源的准备状态以及uop完成它们的操作所需的执行资源的可用性来确定uop何时
准备好执行。一个实施例中的快速调度器202可在主时钟周期的每半个周期上进行调度,
而其他调度器可在每个主处理器时钟周期上调度一次。调度器对分派端口仲裁以调度uop
来执行。
[0036] 在执行块211中,物理寄存器组208和210位于调度器202、204和206与执行单元212、214、216、218、220、222和224之间。存在分别用于整数和浮点操作的单独的寄存器组208、210。一个实施例中的每个寄存器组208、210也包括旁路网络,该旁路网络可绕开还未被写入到寄存器组中的、刚完成的结果或将这些结果转发到新的从属uop中。整数寄存
器组208和浮点寄存器组210也能够彼此传递数据。对于一个实施例,将整数寄存器组208
划分为两个单独的寄存器组,一个寄存器组用于低阶的32位数据,第二个寄存器组用于高
阶的32位数据。一个实施例中的浮点寄存器组210具有128位宽的条目,因为浮点指令通
常具有从64至128位宽度的操作数。
[0037] 执行块211包括执行单元212、214、216、218、220、222和224,实际在这些执行单元中执行指令。该区块包括存储微指令执行所需的整数和浮点数据操作数值的寄存器组208和210。一个实施例的处理器200包括许多执行单元:地址生成单元(AGU)212、AGU 214、
快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于一个实施例,浮点执行块222和224执行浮点、MMX、SIMD、SSE以及其他操作。一个实施例中的浮
点ALU 222包括用于执行除法、平方根和余数微op的64位/64位的浮点除法器。对于此
处所描述系统和方法,可以利用浮点硬件来处理涉及浮点值的指令。在一个实施例中,ALU操作去往高速ALU执行单元216和218。一个实施例中的快速ALU 216和218可执行有效
等待时间为半个时钟周期的快速操作。对于一个实施例,大多数复杂的整数操作去往慢速
ALU 220,因为慢速ALU 220包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位器、标记逻辑和分支处理设备。存储器加载/存储操作由AGU 212和214来执行。对
于一个实施例,在对64位的数据操作数执行整数操作的上下文中描述整数ALU 216、218和
220。在替换实施例中,ALU 216、218、220可被实现为支持多种数据位,包括16、32、128、256位等。类似地,浮点单元222、224可被实现为支持具有多种宽度的位的一系列操作数。对
于一个实施例,浮点单元222和224可结合SIMD和多媒体指令来对128位宽的紧缩数据操
作数进行操作。
[0038] 在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属操作。由于在处理器200中推测性地调度并执行uop,因此处理器200也包括用于处理存储
器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在带着临时
不正确的数据离开调度器的运行中的从属操作。重放(replay)机制跟踪并重新执行使用
不正确的数据的指令。从属操作应该被重放,而独立的操作被允许完成。也可将处理器的
一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。
[0039] 术语“寄存器”可以是指被用作标识操作数的指令的部分的板上(on-board)处理器存储器位置。换句话说,寄存器可以是那些从处理器外部(从编程者的度来看)可用
的那些。然而,不应当将实施例中的寄存器限制于意指特定类型的电路。相反,实施例中的寄存器能够存储并提供数据,并且能够执行本文中所述的功能。在此所述的寄存器可由处
理器中的电路使用任何数量的不同技术来实现,诸如,专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合,等等。在一个实施例中,整数寄存器存储三十二位整数数据。一个实施例的寄存器组还包含用于紧缩数据的八个多媒体
SIMD寄存器。对于下面的讨论,寄存器被理解为是被设计为保存紧缩数据的数据寄存器,诸TM
如,利用来自加利福尼亚州圣克拉拉市的英特尔公司的MMX 技术实现的微处理器中的64
TM
位宽的MMX 寄存器(在某些实例中,也称为“mm”寄存器)。这些MMX寄存器(在整数和
浮点形式两者中是可用的)可与伴随SIMD和SSE指令的紧缩数据元素一起操作。类似地,
也可以使用涉及SSE2、SSE3、SSE4或以外的(统称为“SSEx”)技术的128位宽的XMM寄存
器来保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整型数据时,寄存器不需要区分两种数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器组
中,或被包括在不同的寄存器组中。此外,在一个实施例中,浮点和整型数据可以存储在不同的寄存器中或相同寄存器中。
[0040] 图3a-3b示意性地示出根据本发明的一个或多个方面的处理器微架构的元件。在图3a中,处理器流水线400包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、
写回/存储器写入级418、异常处理级422、以及提交级424。
[0041] 在图3b中,箭头表示两个或更多单元之间的耦合,并且箭头的方向指示那些单元之间的数据流的方向。图3b示出了处理器核490,它包括耦合到执行引擎单元450的前端
单元430,执行引擎单元450和前端单元430两者都耦合到存储器单元470。
[0042] 核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为又一选项,核490可以是专用核,例如,网络或通信核、压缩引擎、图形核等。
[0043] 前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,指令高速缓存单元434耦合到指令转换后备缓冲器(TLB)436,指令转换后备缓冲器436耦合到指令取
出单元438,指令取出单元438耦合到解码单元440。解码单元或解码器可解码指令,并生
成从原始指令中解码出的、或以其他方式反映原始指令的、或从原始指令中导出的一个或
多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同的机制来实现解码器。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令高速缓存单元434进一步耦合到存储器单
元470中的第2级(L2)高速缓存单元476。解码单元440耦合至执行引擎单元450中的重
命名/分配器单元452。
[0044] 执行引擎单元450包括耦合到引退单元454的重命名/分配器单元452和一个或多个调度器单元的集合456。调度器单元456表示任意数量的不同的调度器,包括预留站、
中央指令窗等。调度器单元456耦合到物理寄存器组单元458。物理寄存器组单元458中的
每一个表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一个或多个不同的数
据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点等、状态(诸如,作为将要被执行的下一条指令的地址的指令指针)等。物理寄存器组单元458被引退单
元454重叠,以示出可实现寄存器重命名和无序执行的多种方式(例如,使用重排序缓冲器
和引退寄存器组、使用未来文件(future file)、历史缓冲器、引退寄存器组;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。这些寄存器不限于任何已知的特定的电路类型。各种类型的寄存器是合适的,只要它们能够
存储并提供本文所述的数据。合适的寄存器的示例包括但不仅限于,专用物理寄存器,使用寄存器重命名的动态地分配的物理寄存器,专用和动态地分配的物理寄存器的组合,等等。
引退单元454和物理寄存器组单元458耦合到执行群集460。执行群集460包括一个或多
个执行单元的集合162和一个或多个存储器访问单元的集合464。执行单元462可以对各
种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整型、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集的多个执行单元,但其他实施例可包括全部执行所有功能的一个执行单元或多个执行单元。调
度器单元456、物理寄存器组单元458和执行群集460被示出为可能是复数个,因为某些实
施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自的调度器单元、物理
寄存器组单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量
整数/向量浮点流水线和/或存储器访问流水线;并且在单独的存储器访问流水线的情况
下,实现在其中该流水线的执行群集具有存储器访问单元464的某些实施例)。还应当理
解,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行的,而其余部分保持是有序的。
[0045] 存储器访问单元的集合464耦合到存储器单元470,该存储器单元470包括耦合到数据高速缓存单元474的数据TLB单元472,其中数据高速缓存单元472耦合到第2级(L2)
高速缓存单元476。在一个示例性实施例中,存储器访问单元464可包括加载单元、存储地
址单元和存储数据单元,其中的每一个均耦合至存储器单元470中的数据TLB单元472。L2
高速缓存单元476耦合到一个或多个其他级的高速缓存,并最终耦合到主存储器。
[0046] 作为示例,示例性的寄存器重命名的、无序发布/执行核架构可按如下方式实现流水线400:指令取出438执行取出和长度解码级402和404;解码单元440执行解码级
406;重命名/分配器单元452执行分配级408和重命名级410;调度器单元456执行调度
级412;物理寄存器组单元458和存储器单元470执行寄存器读取/存储器读取级414;执
行群集460执行执行级416;存储器单元470和物理寄存器组单元458执行写回/存储器
写入级418;各单元可涉及异常处理级422;以及引退单元454和物理寄存器组单元458执
行提交级424。
[0047] 核490可以支持一个或多个指令集(例如,x86指令集(带有与较新的版本一起添加的某些扩展);位于美国加州桑尼维尔的MIPS技术公司的MIPS指令集;位于美国加州
桑尼维尔的ARM控股公司的ARM指令集(带有诸如NEON之类的附加扩展)。
[0048] 在某些实现中,核可支持多线程操作(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程操作,各种方式包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程
提供逻辑核)或其组合(例如,时分取出和解码以及此后诸如利用 超线程技术的同
步多线程操作)。
[0049] 虽然处理器的所示出的实施例也包括单独的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但替代实施例可具有用于指令和数据两者的单个的内部
高速缓存,诸如例如,第1级(L1)内部高速缓存或多个层级的内部高速缓存。在某些实施
例中,系统可以包括内部高速缓存和外部高速缓存的组合,外部高速缓存在核和/或处理
器的外部。可另选地,全部高速缓存都可以在核和/或处理器的外部。
[0050] 图4示出了根据本公开的一个或多个方面的计算机系统100的示例处理器102的框图。参考图4,处理器核490可以包括用于取出供核490执行的指令的取出单元202。可
以从诸如存储器115之类的一个或多个存储设备中取出指令。处理器核490还可以包括用
于将取出的指令解码为一个或多个微操作(uop)的解码单元440。处理器核490还可以包
括调度单元446,该调度单元446用于存储从解码单元440接收到的经解码的指令,直到准
备好发布该指令为止,例如,直到经解码的指令的操作数值变得可用为止。调度单元446可以将经解码的指令调度和/或发布到执行单元。
[0051] 执行单元450可以包括一个或多个算术逻辑单元(ALU)、一个或多个整数执行单元、一个或多个浮点执行单元和/或其他执行单元。在某些实现中,执行单元450可以无序
(OOO)地执行指令。处理器核490还可以包括用于在提交了所执行的指令之后引退这些指
令的引退单元454。
[0052] 在某些实现中,处理器102还可以进一步包括返回地址验证逻辑150,该返回地址验证逻辑150设计成用于验证过程返回地址以阻止未经授权的栈枢转。返回地址验证逻辑
150可包括配置成用于引用返回地址缓冲器423的元素的返回地址缓冲器指针421。尽管
在图4中,返回地址缓冲器423、返回地址缓冲器指针421和逻辑150示出为在核490之内,
但是,可以在计算机系统100中的别处提供上文指出的元件中的至少一些。例如,返回地址缓冲器423可以部分地驻留在存储器内,该存储器相对于处理器102在外部。进一步地,可
以在多个处理器核之间共享返回地址缓冲器423、返回地址缓冲器指针421、逻辑150和/
或它们的各自组件中的一些。
[0053] 众多编程语言支持过程(procedure)的概念,过程是具有入口点以及至少一条返回指令的代码单位。过程可以通过在另一过程内执行的调用指令来发起。返回指令可以使
处理器将执行流往回切换到调用过程(例如,切换到调用过程内的对应的调用指令之后的
指令)。在某些处理器架构中,正在被传递到过程的返回地址和/或参数可以存储在栈上,
后者引用计算机系统存储器内的数据结构。栈可以通过支持“后进先出”(LIFO)访问范式
的线性阵列来表示。
[0054] 在图5的说明性示例中,栈朝着较小的存储器地址发展。可以使用PUSH(推入)指令来将数据项置于栈上,并且可以使用POP(弹出)指令以从栈中检索数据项。为将数据
项置于栈上,处理器可以修改(例如,递减)栈指针的值,然后,将该数据项复制到由栈指针引用存储器位置中。因此,栈指针总是引用栈的最顶部元素。为了从栈中检索数据项,处理器102可以读取由栈指针引用的数据项,然后,修改(例如,递增)栈指针的值,使得该栈指针将引用紧接在正在被检索的元素之前的、被置于栈上元素。在某些处理器架构中,栈指针可以被存储在被称为SP或ESP的专用处理器寄存器中。
[0055] 处理器102可以使用若干段寄存器来支持存储器分段机制。在某些实现中,处理器102还可以进一步支持对存储器段进行的类型划分,以便限制可以对特定类型的段执行
的存储器访问操作。可以通过将存储器类型与段寄存器相关联来支持段类型划分。在一个
示例中,处理器102可包括至少一个代码段寄存器(也可以被称为CS)、两个或更多个数据
段寄存器(也可以被称为DS、ES、FS和GS),以及至少一个栈段寄存器(也可以被称为SS)。
[0056] 当执行调用指令时,在分支到被调过程的第一指令之前,处理器102可将存储在指令指针(EIP)寄存器中的地址推入到当前的栈上。该地址(也被称为返回指令指针)指
向在从被调用的过程返回之后,调用过程的执行应当恢复之处的指令。当在被调用的过程
内执行返回指令时,处理器102可以将返回指令指针从栈中往回检索到EIP寄存器中,并由
此恢复调用过程的执行。
[0057] 应当指出的是,在某些实现中,处理器102不要求返回指令指针往回指向调用过程。在执行返回指令之前,存储在栈中的返回指令指针可由软件操纵(例如,通过执行PUSH指令)以指向任意地址。
[0058] 为防止由潜在的攻击者利用此行为来将执行流转移到任意的存储器位置,响应于接收到调用指令,处理器102可以将返回指令指针不仅存储在栈上,而且还存储在返回地
址缓冲器423中。响应于在被调用的过程中接收到返回指令,处理器102可以从栈以及从
返回地址缓冲器中检索并比较返回指令指针。如果两个地址匹配,则处理器可以继续执行
返回指令;否则,处理器可以生成异常。
[0059] 在某些实现中,如图6示意性地示出的那样,返回地址缓冲器423可以包括第一缓冲器423-1和第二缓冲器423-2,其中,第一缓冲器423-1存储在处理器102的内部存储器
602内,第二缓冲器423-2存储在外部存储器604内,该外部存储器604可以经由系统总线
608可通信地耦合到处理器102。如果主缓冲器423-1的尺寸变得不足以存储返回地址,则
驻留在外部存储器604中的第二缓冲器423-2可以被用作“溢出”缓冲器。
[0060] 为实现“溢出”功能,在一个说明性示例中,可以初始化返回地址缓冲器指针421以指向内部返回地址缓冲器423-1的基址,并且当将新返回地址置于返回地址缓冲器423中时,可以修改(例如,递减)返回地址缓冲器指针421。当到达内部缓冲器423-1的边界
时,下一个指针修改操作可使返回地址缓冲器指针421指向外部返回地址缓冲器423-2的
基址。响应于从缓冲器423中去除返回地址而将返回地址缓冲器指针421从外部缓冲器
423-2切换到内部缓冲器423-1,可实现类似的功能。
[0061] 在某些实现中,外部返回地址缓冲器423-2的至少部分可以由处理器102的一个或多个高速缓存104(诸如,L2高速缓存和/或L1高速缓存)来进行高速缓存。在一个说
明性示例中,可以预留处理器102的最低层级的数据高速缓存中的多个高速缓存条目,用
于对外部返回地址缓冲器423-2的多个条目进行高速缓存。
[0062] 另一方面,通过使用提供若干访问特权等级的处理器的存储器保护机制,可将主管外部存储器缓冲器423-2的存储器配置成仅允许由特许的代码进行的访问。在一个示例
中,也被称为保护环的访问特权等级可以从0到3进行编号,并且更大的编号可以意味着更
小的特权。可以为包含最高特权的代码、数据和栈的段(诸如,操作系统的内核的那些段)
预留保护环0。外部的保护环可以用于应用程序。在某些实现中,操作系统可以使用多个
保护环的子集,例如,用于操作系统内核的环0以及用于应用程序的环3。处理器可以使用
特权等级来防止以较小的特权等级来操作的进程访问具有较大的特权的段。当前特权等级
(CPL)是当前正在执行的进程的特权等级。CPL可以存储在CS和SS段寄存器的位0和1
中。CPL可以等于从其中正在取出指令的代码段的特权等级。当程序控制被转移到具有不
同的特权等级的代码段时,处理器可以改变CPL。处理器可以通过将CPL与正在被访问的段
或调用门的特权等级(描述符特权等级,DPL)和/或被分配给正在被访问的段选择器的被
请求的特权等级(RPL)进行比较来执行特权等级检查。当处理器检测到特权等级违规时,
它可以生成一般保护异常。
[0063] 如此,在一个说明性示例中,主管外部存储器缓冲器423-2的存储器可以被配置成仅允许由特许的代码(诸如,具有当前特权级别(CPL)为0的操作系统内核)访问。可
另选地,主管外部存储器缓冲器423-2的存储器可以被配置成仅允许只读访问,并且由此
仅能由返回地址验证逻辑150修改。
[0064] 如上文所指出的那样,响应于接收到调用指令,在分支到被调用的过程的第一指令之前,处理器102可将存储在指令指针(EIP)寄存器中的地址推入到当前栈上以及返回
地址缓冲器423中。当在被调用的过程内执行返回指令时,处理器102可以从栈以及从返
回地址缓冲器中检索并比较返回指令指针。如果两个地址匹配,则处理器可以继续执行返
回指令;否则,处理器可以生成异常。
[0065] 另一方面,取决于处理器架构和/或操作系统,可通过除调用指令之外的手段来合法地修改调用栈。例如,标准C库的setjump(设置跳转)/longjump(长跳转)函数提供
重新建立程序状态(包括指令指针,甚至跨多个等级的过程调用)的能。在另一个示例
中,返回指令可以被用来将控制转移到动态地计算出的入口点,例如,通过将动态地计算出的地址推入到栈上。为了允许对这些情况以及对当调用栈合法地由除调用指令之外的手段
修改时的其他情况的正确的处理,处理器102可以提供用于修改返回地址缓冲器内容和/
或返回地址缓冲器指针的替代(即,除执行调用指令以外的)机制。
[0066] 如此,在某些实现中,处理器102可以具有包括返回地址缓冲器指针修改指令和/或返回地址缓冲器修改指令的指令集。响应于接收到返回地址缓冲器指针修改指令,处理
器102可以修改(例如,递增或递减)返回地址缓冲器指针,而不修改返回地址缓冲器的内
容。响应于接收到返回地址缓冲器指针修改指令,处理器102可以修改返回地址缓冲器内
容(例如,将新返回地址存储在缓冲器中或从缓冲器中去除返回地址),还可以进一步相应
地修改(例如,递增或递减)返回地址缓冲器指针。在某些实现中,返回地址缓冲器指针修
改指令和/或返回地址缓冲器修改指令可以是特许的指令,例如,仅可由环0进程或线程执
行,如此,防止由用户进程或线程进行未经授权的返回地址缓冲器修改。
[0067] 图7描绘了根据本公开的一个或多个方面的用于过程返回地址验证的示例方法的流程图。方法700可以由计算机系统执行,该计算机系统可以包括硬件(例如,电路、专
用逻辑和/或可编程逻辑)、软件(例如,在计算机系统上可执行以执行硬件模拟的指令)
或其组合。方法700和/或其函数、例程、子例程或操作中的每一个。方法700的两个或更
多个函数、例程、子例程,或操作可以并行地或按照可以不同于上文所描述的顺序的顺序来执行。在一个示例中,如图7所示,方法700可以由图1的计算机系统100来执行。
[0068] 参考图7,在框710处,计算机系统100的处理器可以修改栈指针。在一个示例中,如上文中更详细地描述的那样,处理器可以通过响应于接收到调用指令而将返回地址置于栈上来修改栈指针。可另选地,如上文中更详细地描述的那样,处理器可以直接修改栈,例如,通过将动态地计算出的返回地址推入到栈上。
[0069] 在框720处,处理器可以修改返回地址缓冲器指针。在一个示例中,如上文中更详细地描述的那样,处理器可以通过响应于接收到调用指令而将返回地址置于返回地址缓冲器中来修改返回地址缓冲器指针。可另选地,如上文中更详细地描述的那样,处理器可例如在动态地计算出的返回地址已被推入到栈上时,直接修改返回地址缓冲器以反映对栈的直
接修改。
[0070] 在框730处,处理器可以任选地执行例如已由调用指令调用的过程的一条或多条指令,这一条或多条指令导致对栈以及对由框710-720引用的返回地址缓冲器指针的修
改。
[0071] 在框740处,处理器可以接收返回(RET)指令。
[0072] 响应于在框750处确定了由栈指针引用的返回地址等于由返回地址缓冲器指针引用的返回地址,通过将返回指令指针从栈存储到EIP寄存器中以恢复调用过程的执行,
如框760示意性地引用的那样,处理器可执行RET指令。
[0073] 响应于在框750处确定了由栈指针引用的返回地址不匹配由返回地址缓冲器指针引用的返回地址,处理器可以生成栈错误异常。
[0074] 上文所描述的方法和系统可由对于膝上型计算机、台式机、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备的各种架构、设计和配置的计算机系统来实现,并且各种其他电子设备也适用于实现
此处所描述的方法。一般而言,能够合并此处公开的处理器和/或其他执行逻辑的各种系
统或电子设备一般适用于实现此处所描述的系统和方法。
[0075] 图8描绘了根据本公开的一个或多个方面的示例计算机系统的框图。如图8所示,多处理器系统800是点对点互连系统,并包括经由点对点互连850而耦合的第一处理器870
和第二处理器880。处理器870和880中的每一个都可以是能够执行返回地址验证的处理
器102的某个版本。虽然仅以两个处理器870和880示出,但是应当理解,本公开的范围不
限于此。在其他实施例中,一个或多个额外的处理器可以存在于示例计算机系统中。
[0076] 处理器870和880示出为分别包括集成存储器控制器单元872和882。处理器870还包括点对点(P-P)接口876和878,作为其总线控制器单元的部分;类似地,第二处理器
880包括P-P接口886和888。处理器870、880可以经由使用点对点(P-P)接口电路878、
888的P-P接口750来交换信息。如图7所示,IMC 872和882将处理器耦合到相应的存储
器(即存储器832和存储器834),这些存储器可以是本地附连到相应处理器的主存储器的
诸部分。
[0077] 处理器870、880可各自经由使用点对点接口电路876、894、886、898的各个P-P接口852、854来与芯片组890交换信息。芯片组890还可经由高性能图形接口839与高性能图形电路838交换信息。
[0078] 共享高速缓存(未示出)可以被包括在任一处理器之内,或被包括在两个处理器外部但仍经由P-P互连与这些处理器连接,使得如果将某处理器置于低功率模式时,可将
任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
[0079] 芯片组890可经由接口896耦合至第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线,或诸如PCI快速总线或另一第三代I/O互连总线之类的
总线,但是本公开的范围不限于此。
[0080] 如图8所示,各种I/O设备814可连同总线桥818一起耦合到第一总线816,总线桥818将第一总线816耦合到第二总线820。在一个实施例中,第二总线820可以是低引脚
计数(LPC)总线。各种设备可以被耦合至第二总线820,在一个实施例中,这些设备包括例
如键盘和/或鼠标822、通信设备827以及存储单元828,存储单元828诸如可包括指令/
代码和数据830的盘驱动器或其他大容量存储设备。此外,音频I/O 824可耦合至第二总
线820。
[0081] 图9描绘了根据本公开的一个或多个方面的示例芯片上系统(SoC)的框图。应用处理器910可能能够执行返回地址验证。如由图9示意性地所示,互连单元902可以耦
合到:应用处理器910,其包括一个或多个核的集合902A-N和共享高速缓存单元906;系统
代理单元910;总线控制器单元916;集成存储器控制器单元914;一个或多个媒体处理器
的集合920,其可包括集成图形逻辑908、用于提供静止和/或视频相机功能的图像处理
924、用于提供硬件音频加速的音频处理器926、以及用于提供视频编码/解码加速的视频
处理器928;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及
显示单元940,其用于耦合至一个或多个外部显示器。
[0082] 图10描绘了根据本公开的一个或多个方面的示例计算机系统的框图。处理器1610可由能够执行返回地址验证的处理器102的某个版本来提供。
[0083] 图10示意性地示出的系统1600可以包括实现为IC、IC的诸部分、分立的电子设备,或其他模块、逻辑、硬件、软件、固件的组件的任何组合,或适用于计算机系统中的上述元件的组合,或作为以其他方式被合并在计算机系统的机架内的组件。图10的框图旨在示
出计算机系统的许多组件的高层级视图。然而,应当理解,可以省略所示出组件中的一些组件,额外的组件可以存在,并且所示出的组件的不同安排可发生在其他实现中。
[0084] 处理器1610可由微处理器、多核处理器、多线程处理器、超电压处理器、嵌入式处理器,或其他已知处理元件来提供。在所示出的实现中,处理器1610充当主处理单元以及用于与系统1600的各种组件中的许多组件进行通信的中央枢纽。作为一个示例,处理器
1600可以实现为芯片上系统(SoC)。作为特定的说明性示例,处理器1610包括基于英特尔
TM
架构核 的处理器,诸如,i3、i5、i7,或可从位于美国加利福尼亚州圣克拉拉市的英特尔公司得到的另一个这样的处理器。
[0085] 处理器1610可以与系统存储器1615通信。在各实现中,单个存储器设备可以是不同的封装类型,诸如,单管芯封装(SDP),双管芯封装(DDP)或四管芯封装(1P)。在某些
实现中,这些设备可以直接焊接主板上,以提供较低轮廓的解决方案,而在其他实现中,设备可以被配置为一个或多个存储器模块,这些存储器模块又可以通过给定的连接器耦合
到主板。其他存储器实现是可能的,诸如其他类型的存储器模块,例如,不同种类的双列直插存储器模块(DIMM),包括但不限于microDIMM(微DIMM)、MiniDIMM(迷你DIMM)。在一个
说明性示例中,存储器的尺寸可设定在2GB与16GB之间,并且存储器可被配置成经由球栅
阵列(BGA)焊接到主板上的DDR3LM封装或LPDDR2或LPDDR3存储器。
[0086] 为提供对诸如数据、应用、一个或多个操作系统等的信息的持续的存储,也可将大容量存储设备1620耦合到处理器1610。在某些实现中,为实现较薄且较轻的系统设计,并且为了改善系统响应性,大容量存储器1620可以经由SSD来实现。在其他实现中,大容量
存储设备可以主要由具有较小量的SSD存储设备的硬盘驱动器(HDD)来实现,该SSD存储
设备充当SSD高速缓存,以便在掉电事件期间实现上下文状态和其他这样的信息的非易失
性存储,使得在系统活动的重新启动时,快速上电可以发生。
[0087] 也如图10所示,闪存设备1622可以例如经由串行外围接口(SPI)耦合到处理器1610。闪存设备1622可以提供对系统软件(包括基本输入/输出软件(BIOS)以及系统的
其他固件)的非易失性存储。
[0088] 在各实现中,系统的大容量存储设备可由SSD单独地提供或作为具有SSD高速缓存的盘驱动器、光驱动器或其他驱动器来提供。在某些实现中,大容量存储设备可由SSD提供或作为具有恢复(RST)高速缓存模块的HDD来提供。SSD高速缓存可被配置成用于提供
合适的响应性层级的单层级的高速缓存(SLC)或多层级高速缓存(MLC)选项。
[0089] 各种输入/输出(IO)设备可以存在于系统1600内,包括例如,可由在机架的盖部内配置的高清晰度LCD或LED面板提供的显示器1624。此显示器面板还可以提供触屏
1625,该触屏1625外部地适配在显示器面板上,使得经由用户与此触屏的交互,用户输入
可以提供到系统以实现所需操作,例如,关于信息的显示,信息的访问等。在某些实现中,显示器1624可以经由显示互连耦合到处理器1610,该显示互连可实现为高性能图形互连。触
屏1625可以经由另一互连(在实施例中,可以是I2C互连)耦合到处理器1610。除触屏
1625之外,经由触摸的用户输入也可以经由触板1630进行,触板1630可以配置在机架内,
并且还可以耦合到与触屏1625相同的I2C互连。
[0090] 各种传感器可以存在于系统内,并且能以不同的方式耦合到处理器1610。某些惯性传感器和环境传感器可以通过传感器中枢1640(例如,经由I2C互连)耦合到处理器
1610。这些传感器可以包括加速度计1641、环境光传感器(ALS)1642、罗盘1643以及陀螺
仪1644。其他环境传感器可以包括一个或多个热传感器1646,在某些实施例中,这些热传
感器1646可以经由系统管理总线(SMBus)总线耦合到处理器1610。在某些实现中,也可
以存在一个或多个红外线或其他热感测元件,或用于感测用户的存在或移动的任何其他元
件。
[0091] 各种外围设备可以经由低引脚计数(LPC)互连耦合到处理器1610。在某些实现中,各种组件可以通过嵌入式控制器1635耦合。这样的组件可包括键盘1636(例如,经由
PS2接口耦合)、扇1637以及热传感器1639。在某些实施例中,触板1630还可以经由
PS2接口耦合到EC 1635。另外,安全处理器(诸如,符合可信计算组(TCG)TPM规范版本
1.2(2003年10月2日)的可信平台模块(TPM)1638)也可以经由此LPC互连来耦合到处理
器1610。
[0092] 在某些实现中,外围端口可以包括高清晰度媒体接口(HDMI)连接器(其可以是不同的形状因子,诸如,全尺寸型、小型或微型);一个或多个USB端口,诸如,符合通用串行总线修订版3.0规范(2008年11月)的全尺寸外部端口,并且当系统处于"连接待机"状态
并插入到墙上的交流电源时,至少一个USB端口通电以对USB设备(诸如,智能电话)充电。
另外,可提供一个或多个雷电(Thunderbolt)TM端口。其他端口可以包括可从外部访问的
读卡器,诸如,全尺寸SD-XC读卡器和/或用于WWAN的SIM读卡器(例如,8针脚读卡器)。
对于音频,可以存在具有立体声和话筒能力(例如,组合功能)的3.5mm插孔,其具有对插
孔检测的支持(例如,仅支持机并使用盖(lid)中的话筒,或在线缆中具有话筒的耳机)。
在某些实施例中,此插孔在立体声耳机与立体声话筒输入之间是可重新定任务的。此外,还可以提供电源插孔以耦合到AC砖(brick)。
[0093] 系统1600能以各种方式(包括以无线方式)与外部设备通信。在图16所示出的实施例中,存在各种无线模块,其中的每一个无线模块都可以对应于针对特定的无线通信
协议而配置的无线电装置。用于在短距离(诸如,近场)内进行无线通信的一种方式可以
经由近场通信(NFC)单元1645,在一个实施例中,该NFC单元1645可以经由SMBus与处理
器1610进行通信。
[0094] 额外的无线单元可包括其他短距离无线引擎,包括WLAN单元1650和蓝牙单元1652。通过使用WLAN单元1650,可以实现符合给定的电气与电子工程师学会(IEEE)802.11
TM
标准的Wi-Fi 通信,而经由蓝牙单元1652,可以进行利用蓝牙协议的短距离通信。这些单
元可以经由例如USB链路或通用异步接收发送器(UART)链路来与处理器1610通信。或者,
TM TM
这些单元可以经由根据外围组件互连快速 (PCIe )协议的互连(例如,符合PCI快速TM
规范基础规范版本3.0(2007年1月17日发布)或另一个此类协议(诸如,串行数据输入
/输出(SDIO)标准)来耦合到处理器1610。当然,这些外围设备(其可以配置在一个或多
个插入式卡上)之间的实际物理连接可以通过适用于主板的NGFF连接器。
[0095] 另外,无线广域通信(例如,根据蜂窝式或其他无线广域协议)可以经由WWAN单元1656进行,该WWAN单元1656又可以耦合到订户身份模块(SIM)1657。另外,为了允许接
收并使用位置信息,还可以存在GPS模块1655。
[0096] 为了提供音频输入和输出,可以经由数字信号处理器(DSP)1660来实现音频处理器,DSP 1660可以经由高清晰度音频(HDA)链路来耦合到处理器1610。类似地,DSP 1660
可以与集成的编码器/解码器(编解码器)和放大器1662进行通信,集成的编解码器和放
大器1662又可以耦合到可以在机架内实现的输出扬声器1663。类似地,放大器和编解码器
1662可以耦合以从话筒1665接收音频输入。
[0097] 图11描绘了根据本公开的一个或多个方面的示例芯片上系统(SoC)的框图。作为特定的说明性示例,SOC 1700可以被包括在用户装备(UE)中。在一个实施例中,UE是指
由最终用户用于通信的任何设备,诸如,手持式电话、智能电话、平板、超薄笔记本、具有宽带适配器的笔记本或任何其他类似的通信设备。UE常常连接到基站或节点,该基站或节点
本质上潜在地对应于GSM网络中的移动站(MS)。
[0098] 如图11示意地所示,SOC 1700可以包括两个核。核1706和1707可以耦合到与总线接口单元1709和L2高速缓存1710相关联的高速缓存控制装置1708,以便与系统1700
的其他诸部分进行通信。互连1710可以包括芯片上互连,诸如IOSF、AMBA或其他互连。
[0099] 接口1710可以提供到其他组件的通信信道,其他组件诸如,与订户标识模块(SIM)卡对接的SIM 1730、用于保存供核1706和1707执行以初始化并引导SOC 1700的引
导代码的引导ROM 1735、用于与外部存储器(例如,DRAM 1760)对接的SDRAM控制器1740、
用于与非易失性存储器(例如,闪存1765)对接的闪存控制器1745、用于与外围设备对接的
外围控制装置1550(例如,串行外围接口)、用于显示和接收输入(例如,允许触摸的输入)
的视频编解码器1720和视频接口1725、用于执行图形相关的计算的GPU 1715等。另外,系
统可以包括用于通信的外围设备,诸如,蓝牙模块1770、3G调制解调器1775、GPS 1785以及Wi-Fi 1785。
[0100] 其他计算机系统设计和配置也可以适于实现此处所描述的系统和方法。下列示例示出根据本公开的一个或多个方面的各种实现。
[0101] 示例1是处理系统,包括:栈指针,配置成用于引用存储在栈上的第一返回地址;返回地址缓冲器指针,配置成用于引用存储在返回地址缓冲器中的第二返回地址;以及返
回地址验证逻辑,配置成用于响应于接收到返回指令而将第一返回地址与第二返回地址进
行比较。
[0102] 在示例2中,示例1的处理系统的返回地址验证逻辑可以进一步配置成用于响应于确定了第一返回地址等于第二返回地址来执行返回指令。
[0103] 在示例3中,示例1的处理系统的返回地址验证逻辑可以进一步配置成用于响应于确定了第一返回地址与第二返回地址不同来生成栈错误异常。
[0104] 在示例4中,示例1的处理系统的返回地址验证逻辑可以进一步配置成用于:响应于接收到调用指令而将返回地址存储在栈上,并且存储在返回地址缓冲器中。
[0105] 在示例5中,示例1的处理系统的返回地址验证逻辑可以进一步配置成用于响应于接收到返回地址缓冲器修改指令来执行下列各项中的至少一项:将返回地址存储在返回
地址缓冲器中,或从返回地址缓冲器中去除返回地址。
[0106] 在示例6中,示例1的处理系统的返回地址验证逻辑可以进一步配置成用于响应于接收到返回地址缓冲器指针修改指令来执行下列各项中的至少一项:递增返回地址缓冲
器指针,或递减返回地址缓冲器指针。
[0107] 在示例7中,示例5-6的返回地址缓冲器修改指令可以是特许指令。
[0108] 在示例8中,示例1-7中的任何一个的处理系统的栈可以驻留在通信地耦合到处理系统的存储器内。
[0109] 在示例9中,示例1-7中的任何一个的处理系统的返回地址缓冲器可以至少部分地驻留在被合并进处理系统的存储器内。
[0110] 在示例10中,示例1-7中的任何一个的处理系统返回地址缓冲器可以包括第一部分和第二部分,其中,第一部分驻留在被合并进处理系统的存储器内,而第二部分驻留在外部存储器内。
[0111] 在示例11中,示例10的处理系统的外部存储器可由只读存储器提供。
[0112] 在示例12中,示例10-11中的任何一个的处理系统的返回地址缓冲器的第二部分可以配置成作为相对于第一部分的溢出缓冲器来操作。
[0113] 示例13是用于过程返回地址验证的方法,该方法包括:由处理系统修改栈指针;修改返回地址缓冲器指针;接收返回指令;将由栈指针引用的第一返回地址与由返回地址
缓冲器指针引用的第二返回地址进行比较;以及响应于确定了第一返回地址等于第二返回
地址,执行返回指令。
[0114] 在示例14中,示例13的方法可以进一步包括:响应于确定了第一返回地址与第二返回地址不同来生成栈错误异常。
[0115] 在示例15中,示例13的方法可以进一步包括:响应于接收到调用指令来将返回地址存储在栈上并且存储在返回地址缓冲器中。
[0116] 在示例16中,示例13的方法可以进一步包括:接收返回地址缓冲器修改指令;以及执行下列各项中的至少一项:将返回地址存储在返回地址缓冲器中,或从返回地址缓冲
器中去除返回地址。
[0117] 在示例17中,示例13的方法可以进一步包括:接收返回地址缓冲器修改指令;以及执行下列各项中的至少一项:递增返回地址缓冲器指针,或递减返回地址缓冲器指针。
[0118] 在示例18中,示例13的方法可以进一步包括:初始化返回地址缓冲器指针以指向内部返回地址缓冲器;修改返回地址缓冲器指针;确定到达了内部返回地址缓冲器的边
界;以及使返回地址缓冲器指针指向外部返回地址缓冲器。
[0119] 示例19是设备,该设备包括存储器以及耦合到该存储器的处理系统,其中,处理系统配置成用于执行示例13-18中的任何一个的方法。
[0120] 示例20是计算机可读的非暂态存储介质,其包括可执行指令,所述可执行指令当由处理系统执行时使该处理系统执行操作,这些操作包括:修改栈指针;修改返回地址缓
冲器指针;接收返回指令;将由栈指针引用的第一返回地址与由返回地址缓冲器指针引用
的第二返回地址进行比较;以及响应于确定了第一返回地址等于第二返回地址来执行返回
指令。
[0121] 在示例21中,示例20的计算机可读的非暂态存储介质可以进一步包括可执行指令,所述可执行指令使计算系统响应于确定了第一返回地址与第二返回地址不同而生成栈
错误异常。
[0122] 在示例22中,示例20的计算机可读的非暂态存储介质可以进一步包括可执行指令,所述可执行指令使计算系统响应于接收到调用指令来将返回地址存储在栈上并且存储
在返回地址缓冲器中。
[0123] 在示例23中,示例20的计算机可读的非暂态存储介质可以进一步包括可执行指令,所述可执行指令使计算系统接收返回地址缓冲器修改指令,并且执行下列各项中的至
少一项:将返回地址存储在返回地址缓冲器中,或从返回地址缓冲器中去除返回地址。
[0124] 在示例24中,示例20的计算机可读的非暂态存储介质可以进一步包括可执行指令,所述可执行指令使计算系统接收返回地址缓冲器修改指令,并且执行下列各项中的至
少一项:递增返回地址缓冲器指针,或递减返回地址缓冲器指针。
[0125] 在示例25中,示例20的计算机可读的非暂态存储介质可以进一步包括可执行指令,所述可执行指令使计算系统:初始化返回地址缓冲器指针以指向内部返回地址缓冲器;
修改返回地址缓冲器指针;确定到达了内部返回地址缓冲器的边界;以及使返回地址缓冲
器指针指向外部返回地址缓冲器。
[0126] 在对计算机存储器内的数据位的操作的算法和符号表示方面呈现了具体实施方式的一些部分。这些算法描述和表示是数据处理领域内技术人员使用以便最有效地将他们
的工作本质传达给其他本领域技术人员的手段。算法在此或一般是指导致所期望结果的自
洽的操作序列。这些操作是需要对物理量进行物理操控的操作。通常但非必须,这些量采用能被存储、传输、组合、比较、以及以其他方式操控的电信号或磁信号的形式。主要出于惯用法的原因,时不时地将这些信号称为位、值、要素、符号、字符、项、数字等已证明是方便的。
[0127] 然而,应当记住,所有这些和/或类似的术语用于与适当的物理量关联,并且仅仅是应用于这些量的方便的标记。除非专门声明,否则从上文的讨论中显而易见地看出,应当理解,贯穿本说明书,利用诸如“加密”、“解密”、“存储”、“提供”、“导出”、“获取”、“接收”、“认证”、“删除”、“执行”、“请求”、“通信”等等之类的术语的讨论是指计算系统或类似的电子计算设备的动作和/或进程,这些计算系统或类似的电子计算设备操纵数据,并且将被表
示为计算系统的寄存器和存储器内的物理(例如,电子)量的数据转换为类似地被表示为
计算系统存储器或寄存器或其他此类信息存储、传输和/或显示设备内的物理量的其他数
据。
[0128] 在此可使用词语“示例”或“示例性”来意指用作示例、实例或说明。本文中被描述为“示例”或“示例性”的任何方面或设计不一定被解释为优选于或更优于其他方面或设计。相反,使用词语“示例”或“示例性”旨在以具体的方式来呈现诸概念。如本申请中所使用的,术语“或”意指包括性的“或”而非排他性的“或”。也就是说,除非另有指定或从上下文来看是清楚的,否则“X包括A或B”意指自然的包括性排列中的任何一种。也就是说,如果X包括A;X包括B;或X包括A和B两者,则在任何以上实例中,都满足“X包括A或B。”此
外,如本申请中和所附权利要求书所使用的冠词“a”和“an”一般应解释为意指“一个或多个”,除非另有指定或从上下文来看显然指向单数形式。此外,通篇对术语“实施例”或“一个实施例”或“实现”或“一个实现”的使用不旨在意指同一个实施例或实现,除非是这样描述的。此外,如此处所使用的术语“第一”、“第二”、“第三”、“第四”等等旨在用作区别不同的元件的标记,可以不一定具有根据它们的数字指定的序数含义。
[0129] 此处所描述的各实施例还可以涉及用于执行此处的操作的设备。此设备可专门构造来用于所需目的,或其可包括通用计算机,该通用计算机由存储在该计算机内的计算机
程序有选择地激活或重新配置。这样的计算机程序可以存储在非暂态的计算机可读取的存
储介质上,诸如,但不仅限于,任何类型的磁(光)盘,包括软盘、光盘、CD-ROM,以及磁性光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,闪存,或适于存储电子指令的任何类型的介质。术语“计算机可读存储介质”应当被视为包括存储一个或
多个指令集的单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的高速缓
存和服务器)。术语“计算机可读介质”还应该被视为包括能够存储、编码或携带由机器执行的一组指令并且使机器执行各实施例的方法中的任何一个或多个的任何介质。术语“计
算机可读存储介质”相应地应当被视为包括但不局限于,固态存储器、光学介质、磁性介质,能够存储由机器执行的一组指令并且使机器执行各实施例的方法中的任何一个或多个的
任何介质。
[0130] 本文呈现的算法及显示并非固有地与任何特定计算机或其他装置相关。可以将各种通用系统与根据本文教导的程序一起使用,或可以证明构造更专门的装置来实现所要求
的方法步骤是方便的。各种这些系统的所需结构将从本申请中的描述中呈现。另外,不参
考任何特定编程语言来描述实施例。将会理解,可使用多种编程语言来实现本文描述的实
施例的教导。
[0131] 上面的描述阐述了诸如特定系统、组件、方法等等的示例之类的很多具体细节,以便提供对多个实施例的更全面的理解。然而,对本领域技术人员将显而易见的是,没有这些具体细节也可实施至少某些实施例。在其他情况下,没有详细示出或以简单框图格式来呈现已知的组件或方法,以便避免对各实施例造成不必要的模糊。如此,上文阐述的具体细节只是示例性的。特定实现可能不同于这些示例性细节,而仍在各实施例的范围内。
[0132] 应当理解,以上描述旨在是说明性的而非限制性的。在阅读并理解以上描述之后,许多其他实施方式对本领域内技术人员而言将是显而易见的。因此,实施例的范围应参考所附权利要求书以及使这些权利要求享有权利的等效方案的完全范围来确定。
相关专利内容
标题 发布/更新时间 阅读量
一种新型指针 2020-05-11 875
一种指针铆接用模具 2020-05-12 254
一种汽车仪表指针组件 2020-05-11 988
一种仪表指针半自动热铆机 2020-05-12 494
一种车用仪表指针 2020-05-11 525
一种盘状指针 2020-05-11 457
一种全自动指针装配机 2020-05-11 697
汽车仪表指针 2020-05-12 472
汽车仪表指针 2020-05-12 367
一种异形指针 2020-05-12 967
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈