安全执行模式异常的制作方法

文档序号:6436568阅读:215来源:国知局

专利名称::安全执行模式异常的制作方法
技术领域
:本发明通常涉及计算机系统,尤其涉及为运算系统提供安全的方法。
背景技术
:图1为x86处理器执行例如Windows操作系统(MicrosoftCorp.,Redmond,WA)时产生的异常堆栈框架(exceptionstackframe)100。当进入异常处理程序(exceptionhandler)时,其保留应用程序的所有寄存器于异常发生时(即,“出错程序”),除了程序段(CS)、指令指针(EIP)、堆栈段(SS)、堆栈指针(ESP)寄存器器、以及EFLAGS。所述寄存器的内容可由所述异常堆栈框架100取得。所述异常堆栈框架100由段地址(segmentedaddress)SSESP开始。错误码(errorcode)驻于该异常堆栈框架100的段地址SSESP+00h。该出错程序的指令指针(EIP)寄存器的内容驻在该异常堆栈框架100的段地址SSESP+04h。该出错程序的程序区段(CS)寄存器的内容驻在该异常堆栈框架100的段地址SSESP+08h。该出错程序的诸标志(EFLAGS)寄存器的内容驻在该异常堆栈框架100的段地址SSESP+0Ch。该出错程序的堆栈指针(ESP)寄存器的内容驻在该异常堆栈框架100的段地址SSESP+10h。该出错程序的堆栈区段(SS)寄存器的内容驻在该异常堆栈框架100的段地址SSESP+14h。应注意,如果转移至该异常处理器的相关控制涉及优先级的改变,则该异常堆栈框架100内会出现ESP与SS数值。该出错程序的指令指针(EIP)寄存器的内容(在分段地址SSESP+04h)指向产生该异常的出错程序的指令。该出错程序的堆栈指针(ESP)寄存器的内容(在分段地址SSESP+10h)是该出错程序出错时堆栈框架的地址(即,指向)。与段相关的异常的错误码与保护模式选择器(protectedmodeselector)很类似。最高的13个位(位153)均为选择器索引,且位2为表格索引。不过,代替请求优先级(RPL),位0与1有以下约定如果错误是由程序外部事件引起则设置位0(EXT),以及如果该选择器参照IDT内的门描述符(gatedescriptor),则设置位1(IDT)。图2是AdvancedMicroDevices,Inc制造的x86处理器中使用的SYSCALL/SYSRET目标地址寄存器(STAR)200。该SYSCALL/SYSRET目标地址寄存器(STAR)200包含“SYSRETCS选择器与SS选择器基址”字段、“SYSCALLCS选择器与SS选择器基址”字段、以及“目标EIP地址”字段。在执行SYSCALL指令前的某点,操作系统为适当的系统服务码的程序段(CS)写入数值至该SYSCALL/SYSRET目标地址寄存器(STAR)200的SYSCALLCS选择器与SS选择器基址字段。操作系统也写入系统服务码内的第一个要执行指令的地址至该SYSCALL/SYSRET目标地址寄存器(STAR)200的目标EIP地址字段。该STAR寄存器是在系统引导时予以配置。该目标EIP地址可以指向操作系统内核的固定系统服务区(fixedsystemserviceregion)。执行SYSCALL指令期间,SYSCALLCS选择器与SS选择器基址字段的内容经复制到该CS寄存器。该SYSCALLCS选择器与SS选择器基址字段的内容,加上数值‘1000b’,复制到该SS寄存器。这有效增加该CS选择器的索引字段使得所得的SS选择器指向描述符表(descriptortable)内该CS描述符后的下一个描述符。该目标EIP地址字段的内容被复制到该指令指针(EIP)寄存器,并且指定第一个要执行指令的地址。在执行对应该SYSCALL指令的SYSRET指令的前的某点,操作系统写入呼叫码(callingcode)的程序段(CS)用的数值至该SYSCALL/SYSRET目标地址寄存器(STAR)200的SYSRETCS选择器与SS选择器基址字段。该SYSRET指令由ECX寄存器取得返回EIP地址(returnEIPaddress)。
发明内容根据本发明的一方面,提供一种方法。该方法包括于安全内存内基地址处建立安全异常堆栈框架。本方法也包括写入出错的码序列地址(faultingcodesequenceaddress)与一个或多个寄存器值至该安全异常堆栈框架,并且执行多个安全异常指令。根据本发明的另一方面,提供一个系统。该系统包括一个或多个安全检查单元,该单元被配置为可监视多个请求与多个安全储存位置。该系统也包含一个处理器,该处理器被配置可执行安全内核。该一个或多个安全检查单元经被进一步配置以产生安全异常响应请求中的一个。该处理器被进一步配置可在安全内存内基地址处建立安全异常堆栈框架并且写入出错的码序列地址与一个或多个寄存器值到该安全异常堆栈框架。该安全内核被配置可执行多个安全异常指令。根据本发明的再一方面,提供一种机器可读式媒体。该机器可读式媒体被多条指令配置,当其执行于配置计算机系统内时能完成本发明方法。根据本发明的另一方面,提供另一个方法。此方法包括于安全内存内基地址处接收安全异常以及因该安全异常的接收而建立的安全异常堆栈框架。此方法也包含写入出错的码序列地址与一个或多个寄存器值至该安全异常堆栈框架并且执行多个个安全异常指令。结合附图,参考以下说明可了解本发明,其中相同的索引号确定相同的成分。图1是x86处理器执行例如Windows操作系统时产生的异常堆栈框架的图表;图2是SYSCALL/SYSRET目标地址寄存器的图表;图3是计算机系统的一个具体实施方案的框图,该计算机系统可以根据本发明的一个方面被应用;图4图示根据本发明的一方面,计算机系统具体实施方案中各种硬件与软件组成部分的某些关系;图5A与图5B图示根据本发明不同方面,CPU诸具体实施方案;图6图示根据本发明的一方面,MMU的一个具体实方案,其中MMU具有内存安全检查单元(MEMSCU);图7A图示根据本发明的一方面,MEMSCU的一个具体实施方案,同时图7B图示根据本发明的一方面,I/OSCU的一个具体实施方案;图8图示根据本发明不同方面,储存于内存内的安全执行模式(SEM)I/O权限位图的一个具体实施方案,以及存取该SEMI/O权限位图的机制的一个具体实施方案;图9是根据本发明的一方面,图示用来处理SEM安全异常的安全模式SMCALL/SMRET目标地址寄存器(SMSTAR)与安全模式GS基址(SMGSBASE)寄存器的具体实施例;图10是根据本发明的一方面,图示出现SEM安全异常时产生的SEM安全异常堆栈框架的具体实施方案;图11是根据本发明的一个方面,图示SEM安全异常堆栈框架的错误码的示范格式的一个具体实施方案;以及图12是根据本发明的一方面,图示处理SEM异常的方法的具体实施方案的流程图。尽管本发明容易有各种形式的修改及替代方式,其特定的具体实施方案已由附图的实施例图示并且在此详细的描述。不过,应了解,不希望在此特定具体实施方案的说明将本发明限定为揭示的特定形式,反而,本发明是要涵盖所有落在附加权利要求范围所界定的本发明范畴及精神内的修改、等价物、以及替代物。具体实施例方式以下描述本发明说明性的具体实施方案。为求简明,本文未描述实际具体实施的所有特性。当然,应了解发展任何此类具体实施方案时,必需做出许多与特定具体实施有关的决策以达成开发人员的特定目标,例如要符合与系统相关及商务有关的限制,这在每一个具体实施中是会有所不同的。此外,应了解这一类的开发即复杂又花时间,然而本领域技术人员在受益于被揭示的内容之后该开发将是常规的工作。图3图示计算机系统300的一个具体实施方案,该计算机系统包括CPU302、系统或“主”桥304、内存306、第一设备总线308(例如,外设组件互连或PCI总线)、设备总线桥接器310、第二设备总线312(例如,工业标准架构或ISA总线)、以及4个设备硬件单元314A-314D。所述主桥304被连接到所述CPU302、所述内存306、以及所述第一设备总线308。所述主桥304转换所述CPU302与所述第一装置总线308的间的信号,并且可操作地使所述内存306连接到所述CPU302及所述第一设备总线308,该设备总线桥310被连接到所述第一设备总线308与所述第二设备总线312,并且转换所述第一装置总线308与所述第二设备总线312的间的信号。所述CPU302包括安全检查单元(SCU)316。可能将该SCU316被具体实施为一个或多个特定SCU316,诸如内存(MEM)SCU316A、控制寄存器(REG)SCU316B、以及输入/输出(I/O)SCU316C,以下将予以详述。所述MEMSCU316A保护该内存306免除CPU302所产生的未被授权的存取(即,“软件启动存取”)以及各种硬件启动存取。所述REGSCU316B保护数个控制寄存器(例如,控制寄存器508及/或SEM寄存器510)免除未被授权的存取。所述I/OSCU316C保护I/O空间(例如,I/O端口)免除未被授权的存取。在图3的具体实施方案中,设备硬件单元314A与314B均连接到所述第一设备总线308,并且设备硬件单元314C与314D均连接到所述第二设备总线312。一个或多个设备硬件单元314A-314D可能是,诸如储存设备(例如,硬盘、软盘、以及光盘),通讯设备(例如,调制解调器与网卡),或输入/输出设备(例如,视频设备、音频设备、以及打印机)。应注意,在其它的具体实施方案中,所述主桥304可能为所述CPU302的一部份,如图3所示。图4图示图3计算机系统300中各种硬件与软件部件间的关系。在图4的具体实施方案中,多个应用程序400、操作系统402、安全内核404、以及设备驱动406A-406D存储于所述内存306内。所述应用程序400、操作系统402、安全内核404、以及设备驱动406A-406D包含多个由所述CPU302执行的指令。该操作系统402提供用户界面与应用程序400运行的软件“平台”。该操作系统402也可以提供,例如,基本支持功能,包括文件系统管理、进程管理、以及I/O控制。所述操作系统402也可以提供基本的安全功能。例如,所述CPU302(图3)可能为x86处理器,其执行x86指令集的指令。就此情形而言,所述CPU302可以包括数个特定硬件单元以便在保护模式中提供虚拟内存与物理内存保护特性,如上述。所述操作系统402可以为,诸如Windows系列操作系统之一(MicrosoftCorp.,Redmond,WA,所述操作系统在所述CPU302的保护模式下运行,且使用该CPU302的特定硬件组件以提供虚拟内存与内存保护于保护模式下。所述内核404在所述系统402所提供的安全功能上提供额外的安全功能,例如,以保护储存于所述内存306的资料免除未被授权的存取。在图4的具体实施方案中,所述设备驱动程序406A-406D可操作地连接于,且连接于各自相应的设备硬件单元314A-314D。所述设备硬件单元314A及314D可能是,例如,“安全”设备,且所述相应的设备驱动程序406A及406D可能为“安全”设备驱动程序。所述安全内核404连接到所述操作系统402与所述安全设备驱动程序406A及406D之间,且可以监视所述应用程序400与所述操作系统402的所有存取以保护所述设备驱动程序406A及406D与其相应的安全设备314A及314D。所述安全内核404可以由所述应用程序400与所述操作系统402保护所述安全装置驱动器406A及406D与其相应的安全设备314A及314D免除未被授权的存取。另一方面,所述设备驱动程序406B及406C可以是“不安全”设备驱动程序,且相应的设备硬件单元314B及314C可以是“不安全”设备硬件单元。所述设备驱动程序406B及406C与其对应的设备硬件单元314B及314C可以是,诸如“旧的”设备驱动程序与设备硬件单元。应注意,在其它的具体实施方案中,所述安全内核404可能为所述操作系统402的一部份。在其它的具体实施方案中,所述安全内核404、设备驱动程序406A与406D、和/或设备驱动程序406B及406C可以为所述操作系统402的一部份。所述安全内核404也可以管理对安全应用内存空间和/或安全程序空间的存取。所述SCU316也是可操作性地连接于所述安全内核404。图5A图示计算机系统300的CPU302的一个具体实施方案。在图5A的具体实施方案中,该CPU302A包括执行单元500、内存管理单元(MMU)502、高速缓存单元504、总线接口单元(BIU)506、一组控制寄存器508、以及一组安全执行模式(SEM)寄存器510。该组SEM寄存器510用来在计算机系统300内具体实施安全执行模式(SEM)。所述SEM寄存器510可以被安全内核404存取(即,写入和/或读取)。MEMSCU316A位于MMU502内。该REGSCU316B位于所述执行单元500内。所述I/OSCU316C位于所述BIU506内。所述CPU的其它位置也可以被考虑。所述MEMSCU316A、REGSCU316B、以及I/OSCU316C的运算由所述SEM寄存器组510的内容管理。在图5A的具体实施方案中,所述SEM寄存器组510包括安全执行模式(SEM)位。例如,当(i)所述CPU302是在x86保护模式中运行的x86处理器,(ii)内存分页被使能,以及(iii)该SEM位被设定为‘1’时,图3的计算机系统300可以在安全执行模式(SEM)下运算。也可使用其它在SEM中的指示运算与SEM的其它运算的方法。一般而言,控制寄存器组508的内容用来管理所述CPU302的运算。因此,该控制寄存器组508的内容用来管理所述执行单元500、MMU502、高速缓冲存储单元504、和/或所述BIU506的运算。所述控制寄存器组508可以包括,例如x86处理器体系结构的多个控制寄存器。所述CPU302的执行单元500取指令(例如,x86指令)及数据、执行取得的指令、并且在指令执行期间产生信号(例如,地址、资料、以及控制信号)。所述执行单元500连接于所述高速缓冲存储单元504,且可以经由高速缓冲存储单元504与BIU506从所述内存306接收指令。所述计算机系统300的内存306包括多个存储单元,每个均有一个唯一的物理地址。当运算于保护模式且页面被使能时,所述CPU302的地址空间被分割为多个称作页框(pageframe)或“页”的块。在其它具体实施方案中,所述内存可以通过数个不同定义的内存区域被分割或存取。典型地,在任意给定时间,只将对应于一部份页面的数据储存于所述内存306内。在图5A的具体实施方案中,指令执行期间该执行单元500产生的地址信号代表分段过的(即,“逻辑”)地址。所述MMU502转换所述执行单元500产生的段地址为所述内存306对应的物理地址。所述MMU502提供物理地址给该高速缓冲存储单元504。所述高速缓冲存储单元504为一个相对较小的储存单元,其用来储存最近被执行单元500取得的指令与数据。所述BIU506连接于所述高速缓冲存储单元504与所述主桥304之间,且用来从内存306经由主桥304取得不在高速缓冲存储单元504内的指令与数据。应注意,使用高速缓冲存储单元504并非必须,但利于为CPU302提供较大的运算效率。也应注意,所述执行单元500可以执行标准指令、安全指令、和/或微码,这取决于具体实施。在一个具体实施方案中,在处理器302内执行的微码是硬件而非软件。当该计算机系统300在SEM中运行时,所述安全内核404产生且维护一个或更多安全属性数据结构(例如,表)于该内存306的保护部份内。每一个内存页具有对应的安全上下文识别(securitycontextidentification,SCID)值,以及对应的SCID值可被储存于所述安全属性数据结构内。所述MMU502使用指令执行期间产生的地址(例如,物理地址)存取一个或多个安全属性数据结构以得到对应内存页的SCID。一般而言,所述计算机系统300具有n个不同的安全上下文识别(SCID)值,此处n是整数并且n≥1。当所述计算机系统300在SEM中运行时,软件违反安全机制的各种活动会导致SEM安全异常。可以以类似于x86“SYSENTER”与“SYSEXIT”指令运算的方式通过一对寄存器(例如,模型特定寄存器或MSRs)分派该SEM安全异常。该对寄存器可以为“安全异常进入点”寄存器,且可以定义分支目标地址用以在SEM安全异常发生时执行指令。所述安全异常进入点寄存器可以定义程序段(CS)、指令指针(EIP,或64-位版本RIP)、堆栈段(SS)、以及堆栈指针(ESP,或64-位版本RSP)等要用来登录到SEM安全异常处理器(SEM,securityexceptionhandler)的值。所述执行单元500可以压入先前的SS、ESP/RSP、EFLAGS、CS、以及EIP/RIP等值于新的堆栈以表示那里出现异常。此外,执行单元500可以压入错误码到该堆栈。应注意,当先前的SS与ESP/RSP的数值一直被保存,且堆栈切换(stackswitch)一直是完成的时,则可以不使用中断(IRET)指令的正常返回,即使没有出现CPL的改变。因此,可以定义新的指令以完成该SEM安全异常处理器的返回(SMRET)。图5B图示计算机系统300的CPU302的另一具体实施方案。在图5B的具体实施方案中,该CPU302B包括执行单元500、MMU502、高速缓冲存储单元504、BIU505、控制寄存器组508、以及安全执行模式(SEM)寄存器组510,如上述图5A所描述的。此外,所述CPU302B包括微码机550与微码储存器552。该微码机550连接于执行单元500、MMU502、高速存储单元504、BIU505、控制寄存器组508、以及SEM寄存器组510。取决于微码指令、控制寄存器组508的内容、以及SEM寄存器组510的内容,所述微码引擎550执行储存在所述微码储存器552内的微码指令,并且产生控制执行单元500、MMU502、高速缓冲存储单元504、以及BIU505的运算的信号。在图5B的具体实施方案中,执行储存在该微码储存器552内微码指令的微码机550可以取代一个或多个MEMSCU316A、REGSCU316B、以及I/OSCU316C。在x86的具体实施方案中,所述微码机550也可以协助所述执行单元500执行更复杂的x86指令集的指令。在图5B的具体实施方案中,储存于该微码存储器552的微码指令中的一部份形成安全检查码554。该安全检查码554可以在所述计算机系统300在SEM中运行时被执行,并且指令已递送至所述执行单元500用以执行。在本质上,该安全检查码554的诸微码指令的执行导致该微码机550与执行单元500、MMU502、以及BIU505中的一些执行上述SCU316的功能。例如,当递送I/O指令至所述执行单元500用以执行时,所述执行单元500可以用信号通知所述微码机550有I/O指令存在。所述微码机550可以确定信号到所述MMU502与BIU505。为响应微码机550的信号,所述MMU502可以提供包括I/O指令的内存页的安全上下文识别(SCID)值给所述BIU505。所述执行单元500可以提供所述I/O指令所存取的I/O端口号给BIU505。为响应微码机550的信号,BIU505可以使用安全上下文识别(SCID)值与收到的I/O端口号以存取SEMI/O权限位图800(参考图8),并且可以提供SEMI/O权限位图800的对应位给所述微码机550。如果所述SEMI/O权限位图800的对应位被清除成‘0’,则所述微码机550可以继续协助所述执行单元500完成该I/O指令的执行。另一方面,如果该对应位被设定为‘1’,所述微码机550可以用信号通知所述执行单元500停止执行该I/O指令并且开始执行所述SEM异常处理器的指令。也应注意,所述执行单元500可以执行标准指令、安全指令、和/或微码,这取决于具体实施。因此,在一个具体实施方案中,所述执行单元500与微码机550两者均执行微码。在一个具体实施方案中,在处理器302执行的微码被认为是硬件动作而非软件动作。图6图示MMU502的一个具体实施方案,描述x86具体实施方案。在图6的具体实施方案中,所述MMU502包括分段单元600、分页单元602、以及选择逻辑604(其用以选择该分段单元600与该分页单元602的输出以产生物理地址)。如图所示,该分页单元602包括所述MEMSCU316A。如图6所示,所述分段单元600由所述执行单元500接收分段地址并且可以使用x86处理器架构的众所周知的分段至线性地址转换机制(segmented-to-linearaddresstranslationmechanism)以在输出处产生的线性地址。如图6所示,当被“分页”信号被使能时,所述分页单元602接收该分段单元600所产生的线性地址并且在输出处产生响应的物理地址。所述分页信号可以是映射所述x86处理器架构及控制寄存器组508的控制寄存器O(CRO)内的分页旗标(PG)位。当所述分页信号没有被确认时,内存分页不被使能,并且所述选择逻辑604产生由该分段单元600收到的线性地址作为物理地址。当该分页讯号被确认时,内存分页被使能,并且所述分页单元602使用x86处理器架构的线性至物理地址转换机制(linear-to-physicaladdresstranslationmechanism)转换由所述分段单元600收到的线性地址为相应的物理地址。在线性至物理地址转换运行期间,选定的页目录登录(pagedirectoryentry)与选定的页表格登录(pagetableentry)的U/S位的内容均进行逻辑AND运算以判定存取页框架(pageframe)是否被授权。同样,选定的页目录登录与选定的页表格登录的R/W位的内容均进行逻辑AND运算以判定存取该页框架是否被授权。如果该U/S与R/W位的逻辑组合表示该页框架被授权,则该分页单元602产生线性至物理地址转换运算所得的物理地址。该选择逻辑604接收该分页单元602产生的物理地址,产生由该分页单元602接收的物理地址作为物理地址,并且提供所述物理地址给高速缓冲存储单元504。另一方面,如果该U/S与R/W位的逻辑组合表示该页框架未被授权,则该分页单元602在线性至物理地址转换运算期间不产生物理地址。反而,该分页单元602确认页错误(pagefault,PF)信号,并且该MMU502传送该PF信号给执行单元500。为响应PF信号,所述执行单元500可以执行异常处理器例行程序,例如SEM安全异常处理程序,并且当PF信号被确认时最终暂停(halt)所述应用程序400中的一个的执行。在图6的具体实施方案中,所述MEMSCU316A位于所述MMU502的分页单元602内。所述分页单元602还可以包括转换后备缓冲器(translationlookasidebuffer,TLB)用以存储最近确定的线性至物理地址转换的相对较小的数目。图7A图示MEMSCU316的一个具体实施方案。在图7A的具体实施方案中,所述MEMSCU316包括连接于SEM寄存器组510的安全检查逻辑700A与安全属性表(SAT)登录缓冲器702。所述SAT登录可以在分页目录与对应内存分页的分页表格登录的U/S与R/W位上包括额外的安全信息。安全检查逻辑700A使用存储于给定SAT登录内的额外安全信息以预防未授权的软件激活存取至响应的内存分页。SAT登录缓冲器702用来存储最近存取的内存分页的SAT登录中的相对较小的数目。如上述,所述SEM寄存器组510可以用来具体实施所述计算机系统300内的SEM。所述SEM寄存器组510的内容管理所述MEMSCU316A的运算。所述安全检查逻辑700A由所述MMU502经由通信总线接收要储存于SAT登录缓冲器702内的信息,如图7A所示。所述安全检查逻辑700A也接收所述分页单元602所产生的物理地址。如图所示,所述安全检查逻辑700A是连接到通信总线且连接到所述SEM寄存器组510。所述检查逻辑700A可以产生页错误通知信号与SEM安全异常通知信号。图7B图示I/OSCU316C的一个具体实施方案。在图7B的具体实施方案中,所述I/OSCU316C包括安全检查逻辑700B。所述安全检查逻辑700B由所述执行单元500接收“使能”信号与I/O端口号,并且由所述MMU502接收SCID值。所述执行单元500可以在执行存取I/O地址空间内“目标”I/O端口的I/O指令之前确认所述“使能”信号。所述I/O端口号即该目标I/O端口的号码。所述SCID值表示包括I/O指令的内存分页的安全上下文等级(securitycontextlevel)。当该计算机系统300在SEM中运行时,所述安全内核404也可以产生并且维护所述内存306内的SEMI/O权限位图800。当所述执行单元500执行任务(task)的I/O指令时,所述CPU302内的逻辑可以先拿所述任务的当前优先级(CPL)与I/O优先级(IOPL)作比较。如果所述任务的CPL的优先级至少与所述IOPL的优先级相同(即,数字上小于或等于),则所述CPU302内的逻辑可以检查所述SEMI/O权限位图800。另一方面,如果该任务的CPL的优先级与所述IOPL的优先级不同(即,数字上大于),则所述执行单元500不执行所述I/O指令。在一个具体实施方案中,接着会出现一般保护错误(generalprotectionfault,GPF)。当所述执行单元500确认所述使能信号时,所述安全检查逻辑700B提供所述使能信号、收到的SCID值、以及收到的I/O端口号给所述BIU505内的逻辑。所述BIU505内的逻辑使用所述SCID值与收到的I/O端口号以存取所述SEMI/O权限位图800,并且由所述SEMI/O权限位图800提供相应的位给所述安全检查逻辑700B。如果所述SEMI/O权限位图800的相应位被清除成‘0’,则所述安全检查逻辑700B可以确认输出“执行”信号给所述执行单元500。为响应被确认的执行信号,所述执行单元500可以执行所述I/O指令。另一方面,如果所述相应的位被设定为‘1’,则所述安全检查逻辑700B可能确认所述执行单元500所提供的输出“SEM安全执行”信号。为响应被确定的SEM安全异常信号,所述执行单元500可以不执行所述I/O指令,并且反而可以执行所述SEM安全异常处理程序。当该I/O指令试图存取16位字节I/O端口,或32位的双字节I/O端口时,所述执行单元500可以依次提供多个字节I/O端口号给所述安全检查逻辑700B。如果所述安全检查逻辑700B确认用于所述字节I/O端口号的执行信号中的每一个,所述执行单元500可以执行所述I/O指令。另一方面,如果所述安全检查逻辑700B确认所述SEM安全异常信号用于一个或多个字节I/O端口号,则所述执行单元500可以不执行该I/O指令,且反而可以执行所述SEM安全异常处理程序。图8图示所述SEMI/O权限位图800的一个具体实施方案以及用于存取SEMI/O权限位图800的机制的一个具体实施方案。可以将图8的机制具体实施于BIU505内的逻辑中,且可以应用于该计算机系统300在SEM中运行时。在图8的具体实施方案中,所述SEMI/O权限位图800包括存储于部份内存306内的单一64k位(8千字节)I/O权限位图。所述I/O端口号用作从该模型特定的寄存器802内容(即,所述安全执行模式I/O权限位图800的基地址)到所述I/O权限位图表800的位偏移(bitoffset)。以此方式存取的位对应所述I/O端口(由所述I/O端口号定义)的位。如上述,所述计算机系统300具有不同的SCID值,此处n为一整数且n≥1。所述SEMI/O权限位图800可以包括用于n个不同的SCID值中的每一个的不同的I/O权限位图800。每一个单独的I/O权限位图800可以包括64k位,或8k字节。在其它的具体实施方案中,所述MSR802可以用来存储所述SEMI/O权限位图800的开始(即,基址)地址。包括存取I/O端口的I/O指令内存分页的SCID的值可以被用作从所述模型特定的寄存器802内容(即,所述SEMI/O权限位图800的基地址)到一个或多个64k位(8k字节)的组成I/O权限位图800的I/O权限位图的偏移地址。结果,对应SCID值的I/O权限位图将被存取。接着,所述I/O端口号可以被用作相应于SCID值的I/O权限位图的一位偏移。以此方式存取的位对应于I/O端口(由所述I/O端口号定义)的位。图9图示安全模式SMCALL/SMRET目标地址寄存器(SMSTAR)850与用来处理SEM安全异常的安全模式GS基址(SMGSBASE)寄存器852。基于安全的理由,所述SEM安全异常机制不能仰赖任何正常模式可存取的控制寄存器或数据结构的内容在SEM安全异常出现时提供所述SEM安全异常处理程序与堆栈的地址。所述SMSTAR寄存器850包括“SMRETCS选择器与SS选择器基址”字段、“SMCALLCS选择器与SS选择器基址”字段、以及“目标EIP地址”字段。所述SMGSBASE寄存器852包括安全模式GS基地址。存储于所述SMSTAR寄存器850与SMGSBASE寄存器852的值通常是在开机时被设定。图10图示出现SEM安全异常时所述操作系统402所产生的SEM安全异常堆栈框架900的一个具体实施方案。所述SEM安全异常堆栈框架900开始于GS。错误码驻于所述SEM安全异常堆栈框架900的GS,该出错程序的指令指针(EIP)的内容驻于所述SEM安全异常堆栈框架900的GS。所述出错程序的程序段(CS)寄存器的内容驻于所述SEM安全异常堆栈框架900的GS。所述出错程序或程序段的旗标(EFLAGS)寄存器的内容驻于所述SEM安全异常堆栈框架900的GS。所述出错程序的堆栈指针(ESP)寄存器的内容驻于所述SEM安全异常堆栈框架900的GS[10h]。出错程序的堆栈段(SS)寄存器的内容驻于所述SEM安全异常堆栈框架900的GS[14h]。图11图示图10中SEM安全异常堆栈框架900的错误码的示范格式1010。在图11的具体实施方案中,所述错误码格式包括写入/读取(W/R)位、用户/管理员(U/S)位、模型特定的寄存器(MSR)位、以及系统管理中断(SMI)位。所述写入/读取(W/R)位,当所述SEM安全异常在写入运行期间出现时为‘1’,以及当所述SEM安全异常在读取或执行运行期间出现时为‘0’。所述用户/管理员(U/S)位,当所述安全执行模式(SEM)异常在用户模式(CPL=3)出现时为‘1’,以及当所述SEM安全异常在管理员模式(CPL=0)出现时为‘0’。所述模型特定的寄存器(MSR)位,当所述SEM安全异常在试图存取安全模型特定的寄存器(MSR)期间出现时为‘1’,以及当所述SEM安全异常在试图存取安全MSR期间不出现时为‘0’。所述系统管理中断(SMI)位,当所述SEM安全异常在系统管理中断(SMI)期间出现时为‘1’,以及当所述SEM安全异常在SMI期间不出现时为‘0’。图12为根据本发明的一方面,图示一种处理SEM安全异常的方法1100的具体实施方案的流程图。该方法1100可以包括在方块1105通过硬件或通过软件(例如透过通过SMCALL指令)产生所述SEM安全异常。所述方法1100包括在方块1110,在基地址加上偏移地址处建立SEM堆栈框架900。所述安全模式GS基地址由该SMGSBASE寄存器852读取。所述SEM堆栈指针可以由所述安全模式GS基地址偏移所述SEM堆栈框架的字节数形成。所述SEM堆栈框架900可以被写入内存因此所述错误码是存储在所述SMGSBASE寄存器852的安全模式GS基地址所指向的位置。所述SEM安全异常的错误码由所述SEM异常硬件产生。所述SEM安全异常本身可能已由所述操作系统402、设备驱动程序406、应用程序400,等等产生。所述出错程序段值被写入GS空间,如图10所示。接下来,在方块1115,所述方法1100由S所述MSTAR寄存器850读取所述目标EIP地址以及SMCALLCS与SS选择器值,并且存储所述目标EIP地址以及所述SMCALLCS与SS选择器值于适当的寄存器。该目标EIP地址被加载到所述EIP寄存器。所述CS选择器值被加载到所述CS寄存器,以及所述SS选择器值被加载到所述SS寄存器。所述SS选择器地址可以由所述CS选择器地址得到。所述目标EIP地址为指向所述SEM安全异常处理器码的第一个指令。在方块1120,所述方法1100也执行SWAPGS指令。该SWAPGS指令的执行时将所述SMGSBASE寄存器902的内容与所述GS分段描述符的基地址互换,其是在CPU402中高速缓冲存取。随后的SEM安全异常处理器指令可使用只置换GS空间寻址法(GSspacedisplacement-onlyaddressing)存取所述SEM安全异常堆栈框架900与在所述SEM安全异常堆栈框架900上或下的内存。所述GS空间寻址法提供所述SEM安全异常处理程序用的安全内存。所述安全内核404内的SEM安全异常处理程序可能包括被安全位(securitybit)保护的数个分页的虚拟内存,例如储存于SEM寄存器510内或其它在此描述的安全措施。所述SEM安全异常处理程序可以包括被安全位保护的数个分页的物理内存,例如储存于SEM寄存器510内或其它在此描述的安全措施。接下来,在方块1120,所述方法1100分析(parse)所述错误码。当判定所述SEM安全异常的来源时,可以一次分析一个错误码位。视需要,在方块1130,所述方法1100将一个或多个在产生该SEM安全异常的前执行或准备执行的指令译码。所述特殊指令及其操作数可以提供所述SEM安全异常的来源的额外信息。在方块1135,所述方法1100基于所述错误码以及可以造成所述SEM安全异常的指令之前或之后的指令,估计所述SEM安全异常。方块1135的估计可以包括参考位图或执行安全算法。所述位图可以用一个或多个错误码、一个或多个位的错误码、以及一个或多个特定指令和/或其操作数加以索引。所述安全算法可以包括所述安全内核404所完成的编码树(codetree)。所述位图与安全算法两者取决于实际的硬件310,等等以及具体实施于计算机系统300内的操作系统402。一旦所述方法1100在方块1135估计到所述SEM安全异常,若需要,所述方法1100在方块1140对所述估计采取动作。所述SEM安全异常可以被忽略并恢复运行。所述出错的指令或程序段可以被忽略。所述出错的指令或程序段可以被容纳因此所述出错的指令或程序段由虚拟内存或I/O空间内的代理(proxy)执行。在方块1145,所述方法1100将所述计算机系统300大部份复原为SEM安全异常前的配置。在方块1150,当所述SEM安全异常处理程序退出时,执行另一个SWAPGS指令以返回所述安全模式基地址值为其原始值并执行SMRET指令以返回到先前的运行模式。当执行所述SWAPGS指令时,所述安全内核404写入所述出错的编码的程序段(CS)用的值至所述SMSTAR寄存器850的SMRETCS选择器与SS选择器基址字段。所述SMRET指令可以返回所述系统300至正常模式。和所述SYSRET指令不同,所述SMRET指令可以使目前的优先级(CPL)为0,并且不设定EFLAGS.IF位。应注意,在一个具体实施方案中,主要是在硬件中完成该方法1100的方块1105至1115,同时主要是在软件中完成方块1120至1135。在另一个具体实施方案中,主要是在软件中完成该方法1100。在另一个具体实施方案中,主要是在硬件中完成该方法1100。应注意,在一个具体实施方案中,将所述EIP地址修改以避开可能会导致SEM安全异常的指令。请回头参考图7A,当计算机系统300在SEM中运行时,安全检查逻辑700A收到当前执行任务(即,当前执行中的指令)的CPL,与正常的控制位及一个或多个SEM位509(与物理地址驻于的选定内存分页有关)。安全检查逻辑700A使用上述信息以判定存取那一部份内存是否被授权。所述CPU302可以是一个x86处理器,并且可以包括程序段(CS)寄存器,其为x86处理器架构的多个16位段寄存器中的一个。每一个段寄存器选定64k块的内存,称作一个段。在分页使能的保护模式中,所述CS寄存器被加载到段选择器(segmentselector),其表示分段可执行的内存306。所述分段选择器的最高阶(即,最高有效)位是用来存储表示分段内存的信息,所述分段内存包括下一个要由CPU302的执行单元500执行的指令。指令指针(IP)寄存器是用来存储所述CS寄存器所表示的分段的偏移地址。所述CSIP对是表示下一个指令的段地址。所述CS寄存器的两个最低阶(即,最小有效)位是用来存储当前执行单元500所执行任务的CPL的值(即,当前任务的CPL)。所述MEMSCU316A的安全检查逻辑700A可以产生页错误(“PF”)信号与“SEM安全异常”信号,并且提供所述PF与所述SEM安全异常信号至所述分页单元602内的逻辑。当所述安全检查逻辑700A确认所述PF信号时,所述MMU502传送所述PF信号至执行单元500。为响应PF信号,执行单元500可以使用x86处理器架构的众所周知的中断描述符表(IDT)向量机制(vectoringmechanism)存取及执行PF处理程序例行程序(handlerroutine)。当所述安全检查逻辑700A确认所述SEM安全异常信号时,所述MMU502传送所述SEM安全异常信号至执行单元500。与正常处理器异常使用x86处理器架构IDT向量机制不同,不同的向量方法可以用来处理SEM安全异常。可以通过一对寄存器(例如,MSRs)分派所述SEM安全异常,其是与x86“SYSENTER”和“SYSEXIT”指令运行的方式类似。该对寄存器可能是“安全异常进入点”寄存器,并且可以定义所述SEM安全异常出现时执行指令用的分支目标地址。所述安全异常进入点寄存器可能定义程序段(CS),然后指令指针(EIP,或64位版本RIP)、堆栈段(SS)、以及堆栈指针(ESP,或64位本RSP)等要登录至SEM安全异常处理器的值。所述执行单元500可以存入先前的SS、ESP/RSP、EFLAGS、CS、以及EIP/RIP等值于新的堆栈以表示在那里出现SEM安全异常。此外,所述执行单元500可以存入错误码到所述堆栈。如上述,当先前的SS与ESP/RSP值被存储,并且完成堆栈切换时,可以不使用IRET指令,即使没有出现CPL的改变。所述SEM安全异常处理程序经由SMRET指令返回。可以将以上揭示的本发明的某些方面具体实施于硬件或软件。因此,详细说明于此的某些部份最后是以硬件实施过程呈现而详细说明于此的某些部份最后以软件实施过程呈现,其包括对运算系统或计算设备的内存内数据位的运算的符号表示(symbolicrepresentation)。所述描述与表示是本领域技术人员向其它使用硬件及软件的熟练于本领域的技术人员最有效表达他们工作成果本质的手段。方法与运算两者均需要物理量的物理处理。就软件而言,通常尽管不需要,所述物理量采取能够予以储存、传送、结合、比较、及其它方式处理的电子、磁性、或光学信号的形式。主要是基于一般用法,有时称所述信号为位、值、单元、符号、字符、项、数目、诸如此类被证明是很方便的。不过,应注意,所有这些及类似的术语是要与适当的物理量有关且为只适用于所述量的便利标记。除非特别说明或显而易见,本揭示内容从头到尾的描述论及电子设备的动作与处理,该电子设备是在某些电子设备储存器处处理及转换表现为物理(电子、磁性、或光学)量的数据为同样表现于储存器、传输装置、或显示装置内物理量的其它数据。表示此类描述的示范性术语有(但不局限于)“处理”、“运算”、“计算”、“判断”、“显示”、诸如此类。应注意,本发明软件实施方面通常在某种形式的程序存储媒介或被实施为某种类型的传输媒介上被编码。该程序储存媒介可能为磁性类型(例如,软盘或硬盘)或光学类型(例如,只读光盘内存,或“CDROM”),且可以是只读或随机存取。同样,该传输媒介可能是对绞线(twistedwirepair),同轴电缆(coaxialcable),光纤,或某些其它本领域公知的适当的传输媒介。本发明不局限于任何给定的具体实施方面。以上揭示的特定具体实施方案只具有图示说明性,因为对受益于本文教导的本领域的技术人员而言显然能将本发明修改及实施为不同但等价的方式。此外,除了以下权利要求中所描述的内容,不希望受限于在此陈述的构造及设计的细节。因此,显然有可能改变或修改以上所描述的特定的具体实施方案,且将所有此类的改变视为是在本发明的范畴及精神内。相应的,提出以下权利要求恳请保护。权利要求1.一种方法,包括在安全内存内基地址处建立安全异常堆栈框架(900);写入出错码序地址与一个或多个寄存器值到所述安全异常堆栈框架(900);以及执行多个安全异常指令。2.根据权利要求1所述的方法,其中建立该安全异常堆栈框架(900)包括接收安全异常,其包括硬件安全执行模式安全异常与软件安全执行模式安全异常中的至少一项,并且其中在所述安全内存内基地址处建立安全异常堆栈框架(900)进一步包括确认与所述安全异常关联的错误码的位置。3.根据权利要求1所述的方法,其中在所述安全内存内基地址处建立安全异常堆栈框架(900)进一步包括在错误码上写入目标地址;以及从一个或多个寄存器(510)写入多个寄存器值。4.根据权利要求1所述的方法,进一步包苦括由一个或多个安全寄存器(510)读取目标地址与复多个寄存器值。5.根据权利要求1所述的方法,其中在安全内存内基地址处建立安全异常堆栈框架(900)包括在所述安全内存内基地址写入堆栈指针加上一个偏移地址。6.根据权利要求1所述的方法,进一步包括交换内存基地址寄存器的一个地址和安全寄存器(902)内的一个地址,并且交换安全寄存器(902)内的地址和内存基地址寄存器的地址。7.根据权利要求1所述的方法,其中执行所述多个安全异常指令包括分析错误码或译码出错的指令以判定该安全异常的原因。8.一种系统,包括一个或多个安全检查单元(316)经配置用于监视请求,其中一个或多个安全检查单元(316)被进一步配置用以产生安全异常以响应一个或多个请求;多个安全储存位置(510);以及处理器(302)被配置用于在安全内存内基地址处建立安全异常堆栈框架(900);以及写入出错码的序地址与一个或多个寄存器值到所述安全异常堆栈框架(900);其中所述处理器(302)被进一步设置用于执行安全内核(404),其中所述安全内核(404)被进一步配置用于执行多个安全异常指令。9.根据权利要求8所述的系统,其中所述安全内核(404)被进一步配置可用来接收安全异常通告,包含错误码、硬件安全执行模式安全异常通告、以及软件安全执行模式安全异常通告中的至少一项。10.根据权利要求8所述的系统,其中所述处理器(302)被进一步配置可用于由一个或多个安全寄存器(510)读取一个或多个寄存器值;写入一个或多个寄存器值到所述安全内存;以及转移控制到所述安全内核(404)。全文摘要用于处理安全异常的一种方法与系统。该方法包括在安全内存内基地址处建立安全异常堆栈框架(900)。该方法还包括写入出错码的序地址与一个或多个寄存器值到所述安全异常堆栈框架(900),并且执行多个安全异常指令。文档编号G06F9/48GK1628284SQ02829059公开日2005年6月15日申请日期2002年12月17日优先权日2002年5月31日发明者R·W·施密特,B·C·巴恩斯,G·S·斯特龙金,D·S·克里斯蒂申请人:先进微装置公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1