使用主叫用户地址的安全软件smi调度的制作方法

文档序号:6626067阅读:184来源:国知局
专利名称:使用主叫用户地址的安全软件smi调度的制作方法
技术领域
本发明通常涉及一个系统管理模式(SMM)的操作,尤其涉及用于安全地从一个正常操作模式转移控制到SMM中以处理一个软件系统管理中断(SMI)的系统和方法。
本发明的背景技术在基于80×86的系统中,有几种正常操作模式,包括实时、保护和虚拟模式。在以这些模式操作期间,系统有可能转移控制到一个系统管理模式(SMM)。响应于一个被称作一个系统管理中断(SMI)的特定中断进入SMM。一个SMI的产生导致系统进入SMM,其从一个只能在SMM中可见的不同位置处开始执行代码。当在SMM中时,由CPU执行的这个代码位于系统管理RAM(SMRAM)中。当进入SMM时,所有当前的运行环境和CPU寄存器都被保存在一个被称作CPU保存状态表的特定区域中,其中该区域可以由处于SMM中的CPU访问。该保存状态表由该系统CPU本身、或者由在到该SMM入口上立即执行的代码填充。
当声明了一个通常被称作SMI#的引脚时,在一个系统中的一个或者多个CPU进入SMM。该引脚通常在该系统中的单个芯片、诸如SMI控制器的控制下,而且响应于各种硬件和软件启动事件被声明。例如,一个硬件SMI能够用来简要描述硬件动作,诸如该系统访问它的硬盘多少次。其它的硬件事件可以对应于一个计时器期满、温度测量、一个输入信号触发或者在一个特定引脚上的电压变高。一个软件SMI能够用来,例如,控制电源管理和处理有关多少代码能够被放置到固件中的空间限制。用于产生一个软件SMI的典型事件包括写入到一个I/O端口或者写入到一个特定存储单元中。系统通常提供软件来处理SMI,并且基于SMI源的类型调度SMI到一个处理例程。
在一个系统内,向SMM内的多个可能函数提供一个使用单个“软件”SMI事件源来进行调度的机构是有用的。通常,为了这个目的,使用了单个SMI事件源,以及用于指定一个目标函数的某些装置。通常,通过加载该目标函数的执行地址到一个通用寄存器中来指定该目标函数。一旦检测到SMI,用于处理该SMI的代码通过使用在该通用寄存器中的值来调用该目标函数。该通用寄存器的值从CPU保存状态表中读出,其中该状态表是在SMI时包含该CPU寄存器内容的区域。
当在一个多处理器系统中执行时,有可能确定哪个处理器产生该SMI。为了进行这个确定,在该SMI被声明时,每一个CPU的指令指针与在该固件中能够产生一个软件SMI的已知执行地址的表格进行比较,其中CPU的指令指针可以在CPU保存状态区域中找到。一个匹配指示该CPU产生了SMI。然后检查该识别的处理器的CPU保存状态区域,以查找指定了目标函数的通用寄存器的内容。
还有可能验证在该通用寄存器中的值是否指向一个批准了的目标函数。一个安全表格添加一个批准了的目标函数的列表。然后该通用寄存器的内容与在该表格中的所有入口进行比较。如果找到了该入口,则调用该目标函数。如果没有找到该入口,则系统从SMM中退出。虽然这向系统提供了某些安全性,但是它仅仅验证了目标函数而不是主叫用户,即产生该软件SMI的代码。
这些SMI处理系统有几个缺点。首先,因为一个通用寄存器必须被用来保持该目标函数地址,所以这个寄存器不能用于传递任何其它参数,这导致要编写更大量和更难的代码。此外,通过在未经同意的时间调用批准了的目标函数就能够绕过安全措施。此外因为没有验证该调用地址,所以很容易编写使用了一种用于确定到该目标函数的批准入口点的强力方法“破解”应用程序。另一个缺点是验证该目标地址的当前实现没有把该目标表格分类排序,因此需要更多的时间。最后,这些实现使用批准了的函数的一个集中列表,这经常意味着比当前产品严格需要的函数更多的函数被列为“批准的”。
发明概述简要地说,按照本发明,在一种用于在一台计算机上执行的一段程序中产生一个系统管理中断(SMI)之后、安全地转移控制到一个系统管理模式(SMM)中的方法中,检测到来自在该程序中一个主叫用户的一个SMI的产生。然后,在SMM中,确定该主叫用户是否被包含在一个调度表中。如果确定该主叫用户被包含在该调度表中,则把程序控制调度到与该调度表中的主叫用户有关的一个目标函数。然后执行该目标函数。
在本发明的一个进一步的特征中,在一种用于开发一个程序系统的方法中,其中该程序系统能够验证由一个可以源代码形式得到的程序所产生的系统管理中断(SMI)调用,编译该源代码。在编译期间,在该源代码中识别至少一个标识了一个SMI调用位置以及它的目标的预定指示。基于与该预定指示有关的信息创建一个调度表,在该调度表中的每一个入口把在该程序中产生一个SMI的一个主叫用户与将要在一个系统管理模式(SMM)中执行的目标函数相关联。该调度表被存储在它可以由SMM中的一个调度程序访问的地方。
附图简要说明

图1是一个SMI处理过程的流程图。
图2是按照本发明,用于创建一个用以验证一个SMI的主叫用户的调度表的过程的流程图。
图3是按照本发明,用于为一个软件SMI安全地转移控制到SMM的过程的流程图。
图4是按照本发明,用于实现该软件SMI处理过程的一台计算机的框图。
最佳实施例的详细说明本发明将在一个特定实施例的环境中进行描述,但是本发明并不打算被这样限制。
图1显示了一个SMI处理过程的流程图。如图1所示,该SMI处理过程首先检测到当前执行的应用程序已经产生了一个SMI事件(步骤110)。从中产生SMI的、在当前执行的应用程序中的指令被称为主叫用户。在这一点上,正在执行产生该SMI的应用程序的CPU的当前运行环境和CPU寄存器被保存在CPU保存状态表中。当处理SMI时,如果需要的话,SMM可以访问保存在该CPU保存状态表中的信息。
SMI处理过程然后识别SMI事件的类型(步骤120)。例如,该SMI可以是一种软件型或者硬件型的SMI,以及在本领域内已知的其它类型SMI。基于所识别的SMI类型,SMM把SMI调度到适当的SMI事件处理程序(步骤130)。通常,SMM为每一种可以产生的不同SMI类型包含一个SMI事件处理程序。
SMI事件处理程序然后开始所产生SMI的处理(步骤140)。如果该SMI是一个软件型SMI,则SMI的处理包括调度到与所产生的SMI有关的一个目标函数(步骤150)。通常,硬件型SMI的处理不包括调度到一个目标函数。在处理一个软件SMI中被调度到的目标函数类似于在一个应用程序中的一个子程序或者函数调用。然而,在SMM中被调度的目标函数仅仅在SMM内是可见的,而且不可由在其它任何操作模式中的CPU访问。
如果在其中产生SMI的系统是一个多处理器系统,则该SMI事件处理程序还仔细搜索所安装的CPU,查找对应于所安装CPU中一个的一个代码段(CS)和指令指针(IP),以便确定哪个CPU保存状态表与从中产生SMI的CPU有关。如果执行的目标函数需要来自于该CPU保存状态表的信息,则可能有必要知道要参考哪个CPU的保存状态表。
在该目标函数的执行已经完成之后,SMI处理过程从SMM中退出,并且返回控制到先前执行的应用程序(步骤160)。此外,恢复在该CPU保存状态表中的信息。
图2是按照本发明,用于创建一个用以验证一个SMI主叫用户的调度表的软件程序开发过程的流程图。为了创建把批准了的主叫用户和特定目标函数连接在一起的调度表,修改用于产生一个应用程序的源代码以包含一个将产生一个软件SMI的指示(步骤210)。该指示可以被实现为,例如,一个宏或者明确产生该软件SMI的代码。该指示的一个参数指定响应于该软件SMI的产生被调用的目标函数。例如,当被实现为一个宏时,该指示能够是把要被调用的目标函数的地址以及该主叫用户的地址添加到一个特定代码段中的宏代码。然后在该源代码中、在其处出现用于产生该软件SMI的指示的那个点,对应于在上面讨论中所给出的“主叫用户”。
当这个源代码可以被构造到最终软件产品、诸如一个应用程序或者一个ROM BIOS组件中时,它首先被编译(步骤220)。在该源代码编译期间,编译器定位每一个用于产生该软件SMI的指示(步骤230)。对于每一个被定位的指示,该编译器在该指示的位置处产生一条用于产生一个软件SMI的指令(步骤240)。取决于在该系统中使用的特定芯片组,由该编译器产生的指令可以是一条“外部”指令。所产生指令的地址起一个产生该软件SMI的主叫用户的标识的作用。该目标函数的地址连同所产生指令的地址,以及其它相似的、用于其它SMI软件中断调用的主叫用户和目标函数地址对一起,由该编译器放置到特定段中。然而,所产生的指令本身没有为处理该SMI提供要被执行的目标函数或者它地址的指示。通过不在该程序代码中留下该目标函数身份的指示,仅仅当处于SMM中时能够看见从一个主叫用户到一个特定目标函数的连接,从而使得查看该最终软件产品代码的人将不会看到正由一条外部指令调用用于产生一个软件SMI的目标函数。
除了为每个被定位的指示产生一条“外部”指令之外,编译器还从把每个主叫用户和在该指示中指定的相应目标函数连接的特定段数据中创建一个表格入口(步骤250)。为了识别该主叫用户和它的相关目标函数,每个入口最好具有该主叫用户的地址和该目标函数的地址。类似于软件SMI的产生,该调度表中每个入口的创建部能够使用一个宏来执行。每一个所创建的表格入口然后由,例如编译器、一个连接器或者由一个特定的后连接器放置到该调度表里,而且被保存在SMM代码中(步骤260)。在最后的步骤中,在编译期间创建的目标代码被连接到一起以创建最终软件产品(步骤270)。
当从所创建的表格入口中创建该调度表时,有可能最优化该调度表的组织结构。特别地,一个工具可以被用来按照它们的地址分类排序这些主叫用户,以及删除任何重复的入口。这个分类排序还能够在软件初始化期间进行。通过分类排序这些入口,因为SMI事件处理程序能够使用一个对分搜索而不是线性搜索,所以能够加速在该最终软件产品执行期间所产生的软件SMI的处理。此外,通过删除重复的入口,减少了在该调度表中的入口数目,因为SMI事件处理程序处理更少的入口,由此加速了它的处理。重复入口的删除还减少了该调度表所需要的,诸如在一个ROM内的,存储空间的数量。
为了了解有关编译、连接、段的使用、以及分类排序的详情,请参阅由Cohen等人在1999年9月24日提出的、题为“A SoftwareDevelopment System that Presents a Logical View of ProjectCemponents,Facilitates Their Selection,and Signals MissingLinks Prior to Compilation”、申请号为09/404,298的申请,在此将它包含在内作为参考。
图3是按照本发明,用于安全地转移控制到SMM以处理一个软件SMI的过程的流程图。如图1所示,在这个过程中的第一个步骤是检测一个软件SMI的产生(步骤310)。检测到的软件SMI然后被调度到处理软件SMI的SMI事件处理程序(步骤320)。使用产生所检测到的、软件SMI主叫用户的适当标识、最好是该主叫用户的地址,SMI事件处理程序仔细搜索该调度表以确定该主叫用户是否存在于该调度表中(步骤330)。如上讨论,如果该调度表已经被分类排序了,则该SMI事件处理程序能够执行一个对分搜索以确定该主叫用户是否存在于该调度表中。如果该主叫用户不存在于该调度表中,则系统从SMM中退出,从CPU保存状态表中恢复信息,并且返回控制到在产生SMI的指令处的应用程序(步骤370)。
如果该主叫用户存在于该调度表中,则SMI事件处理程序在该调度表中识别和该主叫用户连接的目标函数(步骤340)。类似于主叫用户的标识,该目标函数最好是由它的地址进行标识。在识别了该目标函数之后,SMI事件处理程序调度程序控制到该目标函数(步骤350)。然后执行该目标函数(步骤360)。一旦目标函数的执行完成了,该系统就从SMM中退出,从该CPU保存状态表中恢复信息,并且返回控制到产生该SMI的指令处的应用程序(步骤370)。
由于在主叫用户和要被执行的目标函数之间的唯一连接在该调度表中,而且该调度表位于SMM代码中,所以仅仅当在SMM中时能够看见从一个主叫用户到一个特定目标函数的连接。因此,查看该最终软件产品代码的人不会看到指定的目标函数,但是仅仅会看到只产生一个软件SMI的一条“外部”指令。因此,只有从在该调度表内找到的一个地址处执行的一个有效主叫用户,可以产生实际上调度程序控制到一个目标函数的SMI。由于大多数软件SMI是从一个保存在相对难以访问的影象RAM中的ROM代码映象中产生的,所以破解工具非常难以写这个代码,因此使得转移控制到SMM更加安全。
图4是实现本发明的软件SMI处理过程的一个计算机系统的框图。如图4所示,一台计算机400包含一个CPU404、一个主存储器406、一个ROM408、一个存储设备410以及一个通信接口418,所有这些经由一条总线402连接在一起。CPU404可以被实现为单个微处理器或者用于一个多处理系统的多处理器。主存储器406最好是用一个RAM以及一个较小尺寸的高速缓存来实现。ROM408是一个非易失性存储设备,它可以被实现为例如一个EPROM或者NVRAM。存储设备410能够是一个硬盘驱动器或者其它任何类型的非易失性、可写存储器。用于实现本发明的软件SMI处理过程的程序设计或者代码最好是被保存在ROM408或者存储设备410中。
该系统包含一个SMM RAM407,它一般是主存储器RAM406的一部分。SMM RAM407通常是不能访问的。例如,它可以占据和外部视频存储器相同的地址。一般地,在系统初始化期间,SMM程序从ROM408传送到SMM RAM 407。
在计算机400之外的是一个显示器412、一个输入设备414、以及一个光标控制设备416,它们都被连接到总线402。显示器412可以被实现为一个CRT或者LCD显示设备。输入设备414最好为一个键盘,而且光标控制设备416可以被实现为鼠标、跟踪球或者其它指示设备。
通信接口418经由一条到一个局部网络422的网络链路420,提供一个双向的数据通信连接。例如,如果通信接口418是一个综合业务数字网络(ISDN)卡或者一个调制解调器,则通信接口418提供了一个到相应类型电话线的数据通信连接。如果通信接口418是一个局域网(LAN)卡,则通信接口418提供了一个到一个兼容LAN的数据通信连接。无线连接也是可能的。在任何这样的实现中,通信接口418发送和接收电、电磁或者光信号,其携带表示不同类型信息的数字数据流。
网络连接420一般通过一个或多个网络提供到其它数据设备的数据通信。例如,网络连接420可以通过局域网络422提供到一个主机424或者到由一个国际互连网服务供应商(ISP)426操作的数据装置的一个连接。ISP426反过来通过国际互连网428提供数据通信业务。局域网络422和国际互连网428都使用携带数字数据流的电、电磁或者光信号。携带了往返于计算机400的数字数据、通过各种网络的信号以及在网络连接420上和通过通信接口418的信号,是传送信息的载波的示例形式。
计算机400能够通过网络、网络连接420以及通信接口418发送消息和接收数据,包括程序代码。在该国际互连网实例中,服务器430可以通过国际互连网428、ISP426、局域网络422和通信接口418传送用于一个应用程序的被请求代码。按照本发明,一个这样下载的应用程序是在这里描述的软件SMI处理过程。
所接收的代码可以由CPU在接收它时执行,并被保存在存储设备410中、或者保存在其它非易失性存储器中用于随后执行。以这样的方式,计算机400可以以一种载波形式获得应用程序代码。
虽然已经把本发明描述和说明为其中扫描了原有平面,然而这不是关键的。事实上,本领域技术人员将很容易理解,该技术有多少可以被用来扫描三维图像。然而,最佳实施例是一个其中感兴趣的图像在一个介质、诸如一张纸、一个透明物体、或者一张照片、以及与该介质接触的扫描设备上形成的实施例。
权利要求
1.一种用于在由一段在一台计算机上执行的程序产生一个系统管理中断(SMI)之后、安全地转移控制到一个系统管理模式(SMM)的方法,包含检测来自于该应用程序中的一个主叫用户的一个SMI的产生;在SMM中确定该主叫用户是否被包含在一个调度表中;如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数;以及执行该目标函数。
2.如权利要求1所述的方法,进一步包含在完成目标函数的执行之后从SMM中退出;以及继续执行该应用程序的处理过程。
3.如权利要求1所述的方法,进一步包含识别被检测到的SMI类型;以及基于所识别的类型,调度检测到的SMI到一个在SMM中的SMI事件处理程序,其中该SMI事件处理程序确定所检测到的SMI是否被包含在调度表中。
4.如权利要求1所述的方法,进一步包含如果确定主叫用户没有被包含在该调度表中,则从SMM中退出。
5.如权利要求1所述的方法,其特征在于该调度表仅仅在SMM中可见。
6.如权利要求1所述的方法,其特征在于在编译该程序期间创建该调度表。
7.一种用于在由一段在一台计算机上执行的程序产生一个系统管理中断(SMI)之后、安全地转移控制到一个系统管理模式(SMM)的工具,包含一个监控单元,用于检测来自于该应用程序中的一个主叫用户的一个SMI的产生,并且在SMM中确定该主叫用户是否被包含在一个调度表中;一个转移单元,用于如果确定该主叫用户被包含在该调度表中,则调度到与在该调度表中的主叫用户有关的一个目标函数;以及一个处理单元,用于执行该目标函数。
8.如权利要求7所述的工具,进一步包含一个完成单元,用于在完成该目标函数的执行之后从SMM中退出,以继续执行该应用程序的处理过程。
9.如权利要求7所述的工具,进一步包含一个类型检测单元,用于识别被检测到的SMI的类型;以及一个处理单元,用于基于所识别的类型,调度检测到的SMI到一个在SMM中的SMI事件处理程序,其中该SMI事件处理程序确定所检测到的SMI是否被包含在该调度表中。
10.如权利要求7所述的工具,进一步包含一个完成单元,用于如果确定该主叫用户没有被包含在该调度表中,则从SMM中退出。
11.如权利要求7所述的工具,其特征在于该调度表仅仅在SMM中可见。
12.如权利要求7所述的工具,其特征在于在编译该程序期间创建该调度表。
13.一个具有一个在正常模式或者系统管理模式(SMM)中操作的CPU的计算机系统,该计算机系统包含一个用于在由一段在该计算机系统上执行的程序产生一个系统管理中断(SMI)之后、安全地转移控制到该SMM的设备,该设备被配置为检测来自于该应用程序中的一个主叫用户的一个SMI的产生;在SMM中确定该主叫用户是否被包含在一个调度表中;如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数;以及执行该目标函数。
14.如权利要求13所述的设备,进一步被配置为在完成目标函数的执行之后从SMM中退出;以及继续执行该应用程序的处理过程。
15.如权利要求13所述的设备,进一步被配置为识别被检测的SMI的类型;以及基于所识别的类型,调度所检测到的SMI到一个在SMM中的SMI事件处理程序,其中该SMI事件处理程序确定所检测到的SMI是否被包含在该调度表中。
16.如权利要求13所述的设备,进一步被配置为如果确定主叫用户没有被包含在调度表中,则从SMM中退出。
17.如权利要求13所述的设备,其特征在于该调度表仅仅在SMM中可见。
18.如权利要求13所述的设备,其特征在于在编译该程序期间创建该调度表。
19.一个计算机可读存储设备,具有一个用于在由一段在计算机系统上执行的程序产生一个系统管理中断(SMI)之后、安全地转移控制到一个系统管理模式(SMM)的工具,该工具包含一个监控单元,用于检测来自于该应用程序中的一个主叫用户的一个SMI的产生,并且在SMM中确定该主叫用户是否被包含在一个调度表中;一个转移单元,用于如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数;以及一个处理单元,用于执行该目标函数。
20.如权利要求19所述的工具,进一步包含一个完成单元,用于在完成目标函数的执行之后从SMM中退出,以继续执行该应用程序的处理过程。
21.如权利要求19所述的工具,进一步包含一个类型检测单元,用于识别被检测到的SMI的类型;以及一个处理单元,用于基于所识别的类型,调度所检测到的SMI到一个在SMM中的SMI事件处理程序,其中该SMI事件处理程序确定所检测到的SMI是否被包含在该调度表中。
22.如权利要求19所述的工具,进一步包含一个完成单元,用于如果确定该主叫用户没有被包含在该调度表中,则从SMM中退出。
23.如权利要求19所述的工具,其特征在于该调度表仅仅在SMM中可见。
24.如权利要求19所述的工具,其特征在于在编译该程序期间创建该调度表。
25.一种用于开发一个程序系统的方法,该程序系统能够验证由一段能以源代码形式得到的程序产生的系统管理中断(SMI)调用,该方法包含编译该源代码;在该源代码中识别至少一个标识了一个SMI调用的位置以及它的目标的预定指示;基于与该预定指示有关的信息创建一个调度表,在该调度表中的每一个入口把在该程序中产生一个SMI的一个主叫用户与将要在一个系统管理模式(SMM)中被执行的目标函数相关联;以及把该调度表存储在它可由在SMM中的一个调度程序访问的地方。
26.如权利要求25所述的方法,其特征在于该预定指示识别要调度到哪个目标函数。
27.如权利要求25所述的方法,进一步包含通过地址标识在该调度表中的主叫用户,以及依据主叫用户的地址分类排序在该调度表中的入口。
28.如权利要求25所述的方法,进一步包含连接所编译的SMM代码和该调度表。
29.如权利要求28所述的方法,进一步包含执行该程序;检测来自于该程序中的一个主叫用户的一个SMI的产生;在SMM中确定该主叫用户是否被包含在该调度表中;如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数;以及执行该目标函数。
30.一种用于开发一个程序系统的工具,其中该程序系统能够验证由一个能以源代码形式得到的程序产生的系统管理中断(SMI)调用,该工具包含一个编译器,用于编译该源代码,并且识别在该源代码中至少一个标识了一个SMI调用的位置以及它的目标的预定指示;一个表格单元,用于基于与该预定指示有关的信息创建一个调度表,在该调度表中的每一个入口把在该程序中产生一个SMI的一个主叫用户与将要在一个系统管理模式(SMM)中被执行的目标函数相关联;以及一个连接器,用于把该调度表存储在它能够由在SMM中的一个调度程序访问的地方。
31.如权利要求30所述的工具,其特征在于该预定指示标识要调度到哪个目标函数。
32.如权利要求30所述的工具,进一步包含一个标识单元,用于通过地址标识在该调度表中的主叫用户,以及一个分类排序单元,用于依据主叫用户的地址,分类排序在该调度表中的入口。
33.如权利要求30所述的工具,其特征在于该连接器连接所编译的SMM代码和该调度表。
34.如权利要求33所述的方法,进一步包含一个处理单元,用于执行该程序;一个监控单元,用于检测来自于该应用程序中的一个主叫用户的一个SMI的产生,并且在SMM中确定该主叫用户是否被包含在该调度表中;一个转移单元,用于如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数,其中该处理单元执行该目标函数。
35.一个计算机系统,包含一个用于开发一个程序系统的设备,其中该程序系统能够验证由一段可以源代码形式得到的程序产生的系统管理中断(SMI)调用,该设备被配置为编译该源代码;在该源代码中识别至少一个标识了一个SMI调用的位置以及它的目标的预定指示。基于与该预定指示有关的信息创建一个调度表,在该调度表中的每一个入口把在该应用程序中产生一个SMI的一个主叫用户与将要在一个系统管理模式(SMM)中被执行的目标函数相关联;以及把该调度表存储在它能够由在SMM中的一个调度程序访问的地方。
36.如权利要求35所述的方法,其特征在于该预定指示标识要调度到哪个目标函数。
37.如权利要求35所述的方法,进一步被配置为通过地址标识在该调度表中的主叫用户;以及依据主叫用户的地址分类排序在该调度表中的入口。
38.如权利要求35所述的方法,进一步被配置为连接所编译的SMM代码和该调度表。
39.如权利要求38所述的方法,进一步被配置为执行该程序;检测来自于该应用程序中的一个主叫用户的一个SMI的产生;在SMM中确定该主叫用户是否被包含在该调度表中;如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数;以及执行该目标函数。
40.一个计算机可读存储设备,具有一个用于开发一个程序系统的工具,其中该程序系统能够验证由一个可以源代码形式得到的程序产生的系统管理中断(SMI)调用,该工具包含一个编译器,用于编译该源代码,并且识别在该源代码中至少一个标识了一个SMI调用的位置以及它的目标的预定指示;一个表格单元,用于基于与该预定指示有关的信息创建一个调度表,其中在该调度表中的每一个入口把在该程序中产生一个SMI的一个主叫用户与将要在一个系统管理模式(SMM)中被执行的目标函数相关联;以及一个连接器,用于把该调度表存储在它能够由在SMM中的一个调度程序访问的地方。
41.如权利要求40所述的工具,其特征在于该预定指示标识要调度到哪个目标函数。
42.如权利要求40所述的工具,进一步包含一个标识单元;用于通过地址标识在该调度表中的主叫用户;以及一个分类排序单元,用于依据主叫用户的地址分类排序在该调度表中的入口。
43.如权利要求40所述的工具,其特征在于该连接器连接所编译的SMM代码和该调度表。
44.如权利要求43所述的方法,进一步包含一个处理单元,用于执行该程序;一个监控单元,用于检测来自于该应用程序中一个主叫用户的一个SMI的产生,并且在SMM中确定该主叫用户是否被包含在该调度表中;以及一个转移单元,用于如果确定该主叫用户被包含在该调度表中,则调度到与该调度表中的主叫用户有关的一个目标函数,其中该处理单元执行该目标函数。
全文摘要
通过参考产生一个SMI的一条调用指令的地址,利用仅仅在SMM中可见的一个调度表,一个系统和方法响应于该SMI,安全地转移控制到一个系统管理模式(SMM)中。在该调度表中的入口提供了在该调用指令和它的目标函数之间的连接。为了创建该调度表,能够插入一个宏到被构造的一个软件产品的源代码中以指定一个目标函数。在编译期间,定位所插入的宏,并且创建连接该调用指令和目标函数的一个入口。在最终软件产品中的调用指令不提供该目标函数地址的指示。
文档编号G06F9/48GK1460208SQ00817499
公开日2003年12月3日 申请日期2000年10月24日 优先权日1999年10月25日
发明者T·A·路易斯 申请人:凤凰技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1