CN1370294A - 管理协议、验证和转换下载程序片断的方法及对应的系统 - Google Patents
管理协议、验证和转换下载程序片断的方法及对应的系统 Download PDFInfo
- Publication number
- CN1370294A CN1370294A CN00811932.5A CN00811932A CN1370294A CN 1370294 A CN1370294 A CN 1370294A CN 00811932 A CN00811932 A CN 00811932A CN 1370294 A CN1370294 A CN 1370294A
- Authority
- CN
- China
- Prior art keywords
- instruction
- type
- register
- stack
- program segment
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
Abstract
本发明涉及管理协议,并涉及验证已经下载到便携系统的程序片断或小应用程序的方法。小应用程序的下载命令(100a,100b)被执行。一旦收到正响应,则读取小应用程序的对象代码(101)并逐条指令经过验证过程(102)。验证过程由一阶段组成,该阶段包括类型栈和寄存器类型表的初始化,它们表示在小应用程序代码的执行开始时便携系统的虚拟机状态;以及对每一目标当前指令逐条指令的验证,包括验证目标转移指令,目标异常处理程序调用或目标子程序调用的存在性,验证和更新指令对类型栈和寄存器类型表的效果。如果验证成功(103a),小应用程序被寄存(104)并向下载驱动器发送(105)确认。否则,小应用程序被删除(106)。本发明适用于Java环境的便携系统。
Description
本发明涉及用于管理的协议,对下载的程序片断验证和转换的方法,以及对应的系统,特别着重于就存储器和计算能力而言具有很少可用资源的板载数据处理系统。
参见图1a,一般来说,通常认为板载数据处理系统10包括微处理器11,永久存储器,诸如包含可执行程序代码的非可写存储器12,及包含存储在系统中的数据的EEPROM型可重写非易失永久存储器15,易失性随机访问存储器14,程序在执行时在其中存储其中间结果,以及允许系统与其环境交互的输入/输出装置。在板载数据处理系统由板卡型微处理器卡组成的情形下,则输入/输出装置15由串行链路组成,允许卡与诸如读卡器终端等终端通信。
在传统的板载数据处理系统中,系统所执行的程序代码在系统构成期间,或至少当后者在交付最终用户之前被定制时,是固定的。
然而,更精致的板载数据处理系统已经实现,这些系统是可重编程的,诸如JavaCard型微处理器卡。至于先进的类型,这些可重编程系统通过下载程序片断,增加了系统投入服务之后强化程序的可能性。常常由“小应用程序”所指的这些程序片断,在本说明书中不加区别地指小型应用程序或程序片断。对于JavaCard系统更为详细的说明,宜参照由SUNMICROSYSTEMS INC.公司发布的文件,并特别是在www(World Wide Web)网址http://java.sun.com/products/javacard/index.html,可用的电子文档,JavaCard技术文章,1996年6月。
图1b示出这种可重编程板载数据处理系统的结构。这种结构类似于传统的板载系统,所不同在于,可重编程板载系统还能够通过其输入/输出装置之一接收小应用程序,然后在其永久性存储器13中存储这些程序,然后从该存储器这些程序可被执行,作为对主程序的补充。
由于不同板载数据处理系统之间的可移植性,小应用程序以对于标准虚拟机的代码形式呈现。这种代码是不能直接由微处理器11执行的,而必须由虚拟机16以软件术语解释,该虚拟机是由驻留在非可写永久性存储器12中的一个程序组成的。在上述JavaCard卡的例子中,所使用的虚拟机是一Java虚拟机子集。至于有关Java虚拟机的规范及所使用的虚拟机的说明,宜参见由Tim LINDHOLM和Frank YELLIN公布的著作,标题为“TheJava Virtual Machine Specification(Java虚拟机规范)”,Addison-Wesley 1996,并参见由SUN MICROSYSTEMS INC.发布的文件“JavaCard 2.1 Virtual Machine Specification”,电子可用的文档在www网址http://java.sun.com/products/javacard/JCVMSpec.pdf,1999年3月。
向工作中的板载数据处理系统下载小应用程序的操作造成相当大的安全问题。偶然或甚至是故意地不良写入的小应用程序可能错误地修改系统上呈现的数据,妨碍主程序正确地或在正确的时间执行,或修改先前下载的其它小应用程序,造成它们不能使用或有害。
由计算机黑客所书写的小应用程序也可能泄漏存储在系统中的机密信息,例如在银行卡的情形下的访问代码等信息。当前,就纠正小应用程序安全问题已经提出三种解决方案。
第一个解决办法是使用加密签字,以便只接收来自可信团体或人员的小应用程序。
在上述银行卡的例子中,只接收带有发卡银行的加密签字的小应用程序,并由卡执行,在下载操作过程中任何其它非签字小应用程序都被拒绝。而一个卡的恶意用户,由于没有来自银行可用的密钥,于是不可能执行卡上非签字且危险的小应用程序。
这第一个解决办法可用于所有小应用程序来自同一单一来源的情形,例如上述的银行。这种解决办法难以用于小应用程序来自若干来源的情形,诸如在银行卡的例子中,卡的制造商,银行,通过银行卡管理服务的团体,提供客户诚信程序并合法提出向卡下载小应用程序的大型商业配送组织。对于小应用程序的电子签字所必须的密钥,在这些各种经济参与者之间共享或持有,则造成主要的技术,经济和法律上的问题。
第二个解决办法是在小应用程序执行期间,对访问和键入进行动态检验。
在这一解决办法中,在小应用程序执行期间虚拟机进行一定数目的检验,诸如:
-检验对存储器的访问:对存储区中每一读和写,虚拟机检验小应用程序对于对应数据的访问权限;
-数据类型的动态验证:对来自小应用程序的每一指令,虚拟机验证满足对数据类型的约束。举例来说,虚拟机可以对诸如有效存储地址等数据进行特别的处理,并通过整数/地址转换或对地址的算术运算防止小应用程序产生无效存储地址;
-检测栈溢出及对虚拟机的执行栈的非法访问,在一定的条件下,就前面的检验机制来说,它们可能会干扰其操作。
这第二个解决办法允许在安全的条件下执行范围广泛的小应用程序。然而,其缺点是由动态检验范围所引起的,使执行明显变慢。为了达到降低这种变慢,某些这些验证可由微处理器本身承担,然而其代价是增加其本身的复杂性,并因而增加板载系统的成本。这种验证还增加了对系统随机访问和永久性存储器的需求,原因是增加的与处理的数据相关所必须的类型信息。
第三个解决办法是在下载期间,对小应用程序的代码进行静态验证。
这个解决办法中,这种静态验证模拟小应用程序在数据类型级的执行,并一劳永逸地确定,小应用程序的代码符合虚拟机所要求的数据类型和访问控制规则,而不会引起栈溢出。如果这一静态验证成功,则小应用程序能够被执行,而不必动态验证符合这一规则。在静态验证过程失败的情形下,板载系统拒绝“小应用程序”,且不允许其随后的执行。对于上述第三个解决办法更详细的说明,宜参见以上引述的由Tim LINDHOLM和FrankYELLIN公布的著作,参见由James A.GOSLING发表的文章,标题为“JavaIntermediate Byte Codes(Java中间字节代码)”ACM SIGPLAN会议文集,中间表示法研讨会(IR’95),页111-118,1995,1月,及1998年5月5日授予的美国专利5,748,964。
与第二个解决办法相比,第三个解决方案的优点是小应用程序执行速度快得多,因为在执行期间虚拟机不进行任何验证。
然而第三个解决方案的缺点是,不论就进行这一过程所必须的代码量,包含验证中间结果必须的随机访问存储器的大小以及计算时间来说,代码的静态验证过程复杂而成本高。举例来说,集成到由SUN MICROSYSTEMS出售的Java JDK系统的代码验证有大约50kbytes的机器代码,且其随机访问存储器的耗用量正比于(Tp+Tr)×Nb,其中Tp表示最大栈空间,Tr表示寄存器最大数,而Nb表示由子程序使用的转移目标最大数,也广泛地由小应用程序方法指定。这些存储器需求大大超过当今大部分板载数据处理系统的资源容量,特别是市售微处理器卡。
已经提出第三个解决方案的几种变形,其中小应用程序的写入程序向验证程序除了发送小应用程序代码之外,还发送一定量特定的补充信息,诸如预计算的数据类型或正确数据类型的预估计验证。对于对应的操作模式更为详细的说明,宜参见由Eva ROSE与Kristofer HGSBRO ROSE公布的文章,“Lightweight Bytecode Verification(轻量字节代码验证)”,Proceedings of the Workshop Formal Underspinning of Java,1998年10月,以及由George C.NECULA发表的“Proof-Carrying Code(证明进位代码)”,Proceedings of the 24th ACM Symposium Principles ofProgramming Lanuages(第24届ACM专题研讨会编程语言原理),页106-119。
这种补充信息使得能够更快地验证代码并稍微降低了验证程序的代码量,然而没能降低对随机访问存储器的需求,或甚至有相当的增加,特别是在正确数据类型预估计验证信息的情形下。
本发明的目的是要纠正上述先有技术的缺点。
具体来说,本发明的一个目的是实现用于管理下载程序片断或小应用程序的协议,允许后者通过诸如微处理器卡,这种具有很少可用资源的板载数据处理系统执行。
本发明的另一目的还在于实现验证下载的程序片断或小应用程序的方法,其中当小应用程序被下载时,进行小应用程序代码的静态验证过程,这一过程可能至少在原理上与上述第三个解决办法类似,但是其中引入了新的验证技术,因而允许在微处理器卡和其它低性能板载数据处理系统所能提供的存储器大小和计算速度值限制内,执行这种验证。
本发明的另一目的是实现对所获得的通常类型的程序片断进行转换的方法,例如,通过对标准的程序片断或小应用程序使用Java编译程序,如果优先满足作为本发明目的的验证方法的验证准则,目的是在当前微处理器卡或板载数据处理系统水平下,加速验证和执行小应用程序的过程。
最后,本发明的另一目的是产生一种板载数据处理系统,该系统允许实现上述用于管理的协议,及实现上述验证下载程序片断的方法及数据处理系统,如上所述,允许实现把通常的程序片断或小应用程序转换为标准化的程序片断或小应用程序的方法。
作为本发明的目的,用于管理可重新编程板载系统的下载程序片断的协议,特别用于装有可重写存储器的微处理器卡。程序片断由对象代码构成,这是由板载系统的微处理器可执行的一系列指令,通过装有由这些指令处理的执行栈和装有局部变量或寄存器的虚拟机执行,并使得能够解释这种对象代码。板载系统与终端互连。
值得注意的是,在检测用于下载程序片断的命令时,它至少是在板载系统级构成的。在对检测下载命令的阶段有正响应时,系统进而读取构成程序片断的对象代码,并把这种对象代码存储在可重写存储器中。存储在存储器中的所有对象代码逐个指令地经过验证过程。验证过程至少有以下阶段,即初始化类型栈和寄存器类型表的阶段,这表示虚拟机在开始执行暂时存储的对象代码时的状态,以及后继的阶段是,对每一当前指令逐个指令验证目标,转移指令目标,异常处理程序目标的存在性,并在于验证和更新当前指令对类型栈和寄存器类型表的效果。在对象代码不成功验证的情形下,当省略在可用程序片断的目录中记录程序片断时,作为本发明的目的协议在于删除暂时记录的程序片断,并向阅读器发送出错代码。
作为本发明的目的,验证下载到板载系统的程序片断的方法特别用于装有可重写存储器的微处理器卡。程序片断由对象代码组成,并包含至少一个子程序,一系列指令,可由板载系统的微处理器通过装有由这些指令处理的执行栈及操作数寄存器的虚拟机执行,并能够解释这种对象代码。板载系统与阅读器互连。
值得注意的是,在检测下载命令和在可重写存储器中存储构成程序片断的对象代码之后,对于每一子程序该方法是执行这样一个阶段,即通过数据初始化类型栈和寄存器类型表,数据表示虚拟机在开始执行暂时存储的对象代码时的状态,在于通过对每一当前指令辨别转移指令目标,异常处理程序调用目标,或子程序调用目标的存在性,执行逐个指令地验证暂时存储的对象代码,并在于基于转移指令目标,目标子程序的调用或异常处理程序调用的目标的存在性,执行当前指令对类型栈和寄存器类型表的数据类型的效果的验证和更新。当在所有指令验证过程中寄存器类型表没有被修改时,验证是成功的,验证过程逐个指令进行到寄存器类型表稳定,没有出现修改为止。否则,验证过程被中断。
作为本发明的目的,把程序片断的对象代码转换为同一程序片断的标准化对象代码的方法,用于程序片断的一种对象代码,其中每一指令的操作数属于由这一指令处理的数据类型,执行栈不出现任何溢出现象,并对每一转移指令,在这一转移时的栈的变量类型与这一转移的目标处相同。所获得的标准化对象代码是这样的,即每一指令的操作数属于由这一指令处理的数据类型,执行栈不出现任何溢出现象,并在每一转移目标指令处执行栈为空。
值得注意的是,该方法在于,对所有的对象代码指令,在这一指令执行之前和之后,以执行栈的数据类型注释每一当前指令,通过分析与这一指令相关的数据流而计算注释数据,在于在这些指令内和当前指令内,检测执行栈非空的转移的存在性,检测操作是基于分配给每一当前指令的栈变量类型的注释数据而进行的。在出现检测到非空执行栈时,该方法进而在于,在这些转移或这些转移目标的任一侧向转移栈变量插入指令,以便在这一转移之前,把执行栈的内容清空到临时寄存器,并在这一转移之后从临时寄存器重建执行栈,并且否则在于不插入任何转移指令。
于是,这一方法使得能够对于同一程序片断获得标准化对象代码,其中在没有对程序片断的执行有任何修改时,执行栈在每一转移指令及转移目标指令处为空。
此外作为本发明的目的,把程序片断的对象代码转换为同一程序片断的标准化对象代码的方法,用于程序片断的对象代码,其中每一指令的操作数属于由这指令处理的数据类型,且已由这一对象代码的指令写入寄存器的给定类型的操作数,通过这一对象代码的另一指令以相同的给定的数据类型从这同一寄存器重新读出。所获得的标准化对象代码是这样的,即操作数属于由这一指令处理的数据类型,在全部标准化对象代码中同一种数据类型分配给同一寄存器。
值得注意的是,该方法在于,对于对象代码的所有指令,在这指令执行之前和之后以寄存器数据类型注释每一当前指令,注释数据通过对与此指令相关的数据流的分析被计算,并在于通过把这些原始寄存器划分为分开的标准化寄存器,对采用不同类型的原始寄存器重新分配。一个标准化寄存器被分配给使用的每一数据类型。对处理使用标准化寄存器的操作数的指令进行重新更新。
作为本发明的目的,用于管理程序片断的协议,验证程序片断的方法,把程序片断的对象代码转换为标准化对象代码的方法及对应的系统,在开发可重编程板载系统,诸如微处理器卡,特别是在Java环境中,找到应用。
在阅读说明并细看以下附图时对它们将能够更好地理解,其中除了图1a和1b与先有技术相关之外,它们是:
-图2示出一流程图,表示用于管理下载到可重新编程板载系统的程序片断的协议,
-图3a示例表示根据本发明目的的验证下载程序片断方法的一流程图,
-图3b示出一示意图,表示通过作为本发明目的下载程序片断的管理方法和验证方法实现的数据类型与子类型的关系,
-图3c表示如图3a所述的与管理转移指令相关的验证方法的细节,
-图3d表示如图3a所述的与管理子程序调用指令相关的验证方法的细节,
-图3e表示如图3a所述的与管理异常处理程序目标相关的验证方法的细节
-图3f表示如图3a所述的与管理不兼容转移的目标相关的验证方法的细节,
-图3g表示如图3a所述的与转移目标的不存在的管理相关的验证方法的细节,
-图3h表示如图3a所述的与管理当前指令对类型栈效果相关的验证方法的细节,
-图3i表示如图3a所述的与管理用于读取寄存器的指令相关的验证方法的细节,
-图3j表示如图3a所述的与管理用于向寄存器写入的指令相关的验证方法的细节,
-图4a示出一流程图,表示把程序片断的对象代码转换为同一程序片断的带有空栈的转移指令分别还有转移目标指令的标准化对象代码的方法,
-图4b示出一流程图,表示使用类型寄存器,把程序片断的对象代码转换为同一程序片断的标准化对象代码的方法,单一特定数据类型属于每一寄存器,
-图5a表示实现图4a中所示转换方法的细节,
-图5b表示实现图4b中所示转换方法的细节,
-图6表示用于开发标准化程序片断的系统以及可重编程微处理器卡完整结构的功能示意图,允许实现根据本发明的目的管理协议和验证程序片断的方法。
一般来说应当指出,作为本发明的目的,管理协议和验证与转换下载程序片断的方法,及对应的系统可被实现,是由于软件体系结构用于在带有很少资源的板载数据处理系统,特别是诸如微处理器卡上,小应用程序的可靠的下载和执行。
一般来说应当指出,以下的说明涉及本发明在JavaCard型可重编程微处理器卡的场合的应用,比较本说明前面开头提及的来自SUNMICROSYSTEMS INC.公司可得的电子文档JavaCard Technology。
然而,通过下载以虚拟机代码书写的小应用程序本发明可用于任何可重编程的板载系统,该虚拟机包含执行栈,局部变量或寄存器,其执行模型类型明确,小应用程序代码的每一指令只用于特定的数据类型。以下将参照图2更为详细地说明,作为本发明的目的,管理下载到可重编程板载系统的程序片断的协议。
参照上述图示可见,构成程序片断或小应用程序的对象代码由一系列指令组成,这些指令借助于上述虚拟机可由板载系统微处理器执行。虚拟机使得能够解释上述对象代码。板载系统例如通过串行链路与终端互连。
参照上述图2,作为本发明的目的的管理协议,至少是在阶段100a,100b在板载系统中检测下载这一程序片断的命令。于是,阶段100a可由读取上述命令的阶段组成,而阶段100b可由测试已经读取的命令及验证下载命令的存在性的阶段组成。
在对上述检测下载命令的阶段100a,100b有正响应时,作为本发明的目的的协议继而是在阶段101读取构成相关程序片断的对象代码,并把上述对象代码暂时存储在板载数据处理系统的存储器中。上述暂时存储的操作能够在板载系统的可重写存储器执行,或如果适宜而有足够的容量时在随机访问存储器中执行。读取对象代码并暂时在可重写存储器中存储的阶段在图2中被表示为加载小应用程序代码。
然后,上述阶段之后是阶段102,该阶段是向上述对象代码的验证过程逐个指令提交所有暂时存储的对象代码。
验证过程至少是由初始化类型栈和数据类型表阶段构成,数据类型表示虚拟机在开始执行暂时存储的对象代码的状态,并在于后继阶段是逐个指令进行验证,这是通过对每一被指定为Ii的当前指令,辨别诸如已指定CIB的转移指令目标,异常处理程序调用目标或子程序调用目标的存在性。就当前指令Ii对类型栈和对寄存器类型表的效果进行验证和更新。
当在阶段103a验证已经成功时,作为本发明的目的的协议在阶段104是在可用的程序片断目录中记录下载的程序片断,并在阶段105向阅读器发送正的接收确认。
另一方面,在阶段103b对象代码不成功验证的情形下,作为本发明的目的的协议是在阶段103c禁止在板载系统执行任何暂时记录的程序片断。禁止阶段103c能够以各种方式实现。作为非限制性例子,这一阶段可以在阶段106删除临时记录的程序片断,而不把这一程序片断记录在可用的程序片断目录中,并在阶段107,向阅读器发送一出错代码。在阶段106和104之后阶段107和105能够分别或者按顺序实现,或者对它们进行多任务化操作实现。
参见同一图2,在对阶段100b检测下载命令阶段为负响应时,作为本发明的目的的协议是在阶段108检测一命令,以便从程序片断的目录选择可用的程序片断,并在对阶段108的响应为正时,则已经检测了可用程序片断的选择,在阶段109调用这一被选择的可用程序片断以便执行这一程序片断。跟随阶段109之后是阶段110,由虚拟机执行所调用的可用程序片断,当每一指令被执行时,对变量类型,对调用的可用程序片断处理的对象的访问权,或执行栈的溢出,进行动态验证。
在阶段108获得负响应的情形下,这一阶段是检测一命令,以便选择被调用的可用程序片断,作为本发明的目的的协议进到阶段111,以便处理板载系统的标准命令。
考虑到没有对类型或访问例如JavaCard类型对象权限的动态验证,要指出验证的这种缺失并不影响卡的安全性,因为小应用程序代码必须成功通过验证。
更具体来说,应当指出,正如作为本发明的目的的方法中所述,在微处理器卡或板载数据处理系统上所执行的代码验证,与对于Java虚拟机通常的代码验证,如本说明前面提及的标题为“Java虚拟机规范”工作中所述相比较要有更多的选择。
然而,Java虚拟机的任何代码,只要就传统的Java验证程序来说它是正确的,则就能够转换为一种等效的代码,这种代码能够成功地通过在微处理器卡上进行的代码验证。
然而可以想象,直接书写的Java代码,它满足上述在实现作为本发明的目的协议的场合所提及的验证准则,后者明显的目的也是实现把任何标准的Java代码自动转换为同一程序片断的标准化代码的方法,因而必定满足上述已实现的验证准则。随后将在说明中详细叙述转换为标准化代码的方法及对应的系统。
现在将参照图3a及随后的图示,更为详细地说明根据本发明的目的验证程序片断或小应用程序的方法。
一般来说应当指出,作为本发明目的的验证方法,能够或者作为上述参照图2所述本发明的目的的管理程序片断的协议的部分来实现,或者独立地提供任何必须被判断的验证过程。
一般来说应当指出,程序片断由包括至少一个子程序的对象代码组成,更普遍指定的一个方法,是由板载系统的微处理器通过虚拟机可执行的一系列指令构成。
如图3a所示,对于每一子程序的验证方法在于执行阶段200,这是通过数据使虚拟机的类型栈和寄存器类型表初始化,这些数据表示在开始执行作为验证目的对象代码时这一虚拟机的状态。如上参照作为本发明的目的的协议的实现所述,这一对象代码能够被暂时存储。
然后,上述的阶段200随后是阶段200a,该阶段在于把当前索引为i的指令Ii的读取定位在对象代码的第一指令。阶段200a之后是阶段201,该阶段在于逐个指令地进行上述对象代码的验证,这是通过对每一当前指令(指定为Ii),辨别转移指令目标CIB、的异常处理程序调用目标(指定为CEM)、或子程序调用CSR的目标的存在性而进行的。
验证阶段201之后是阶段202,该阶段验证并更新当前指令Ii对类型栈和寄存器类型表的数据类型的效果,这是对于由另一指令指向的当前指令,作为转移指令目标CIB、子程序调用目标CSR目标或异常处理程序调用目标CEM存在性的函数。
对于当前指令Ii的阶段202之后是阶段203,该阶段测试是否到达最后的指令,该测试书写为:
Ii=对象代码的最后指令?对测试203的响应为负时,过程进到下一个指令204,写为i=i+1,并返回进到阶段201。
应当指出,当在构成对象代码的所有指令Ii的验证期间寄存器类型表没有被修改时,则上述在阶段202的验证已经成功。为此,提供了对寄存器类型表的稳定状态存在性的测试205。这一测试写为:
?寄存器类型表的稳定状态。在对测试205正响应时,验证已经成功。
另一方面,在没有修改缺失通知的情形下,通过返回阶段200a验证过程被重复并被重新初始化。表明该过程保证在最大NrxH叠代之后结束,其中Nr表示使用的寄存器数目,H表示与子分类关系有关的常数。
现在参照图3b给出与以上参照图3a所述验证过程的过程中处理的变量类型相关的各种指示。
上述变量类型至少包括对应于在受到验证的程序片断中定义的对象类的类标识符,数值变量类型至少包括short类型,按p位编代码的整数,这里p的值可以是16,以及跳转指令JSR的返回地址的类型,这种地址类型定义为retaddr,关于零对象参照的null类型,关于对象性质的object类型,表示所有类型的交集并且对应于值零nul的特定类型⊥,表示所有类型的并集并且对应的任何值类型的另一特定类型T。
参照图3b,应当指出所有上述变量类型要实现子分类关系:
objectεT;
short,retaddrεT;
⊥εnull,short,retaddr
现在参照附录中表T1所示数据结构的第一个例子,给出如图3a所示验证过程的一个更具体的例子。
上述例子涉及以Java代码书写的小应用程序。
通过指向被验证的指令Ii的指针,验证过程访问形成受到验证的小应用程序的子程序的代码。
验证过程记录对应于上述表T1的例子中saload的当前指令Ii的执行栈的大小和类型。
然后验证过程通过其类型栈指针在类型栈中记录当前指令执行栈的大小和类型。
如本说明以上所述,这种类型栈反映了虚拟机在当前指令Ii处执行栈的状态。在表T1所示的例子中,在将来执行指令Ii时,栈将包含三个项:对C类的对象的参照,对按p=16位编代码的整数表的参照,类型short[],以及类型short的p=16位的整数。这还示于类型栈中,该栈也包含所三个项:C,C类对象类型,short[],整数p=16位和short的表的类型,整数p=16位的类型。
另一值得注意的数据结构由整数型表组成,这种表反映虚拟机寄存器的状态,即是说存储局部变量的寄存器的状态。
继续来看表T1中所指的例子,指出寄存器类型表的项0包含类型C,即在将要执行当前指令时Ii=saload,保证寄存器0包含对C类对象的参照。
在验证期间处理并存储在寄存器类型表和类型栈中的各种类型表示在图3b中。这些类型包括:
-对应于在小应用程序中定义的特定对象类的类标识符CB;
-基类型,诸如short,按P=16位编代码的整数,int1和int2,例如分别按2p位编代码的整数的最高和最低有效p位,或retaddr,上述指令返回地址;
-类型null,表示零对象的参照。
关于子分类关系,指出如果类型T1的每一有效值也是类型T2的有效值,则类型T1是类型T2的子类。类标识符之间的子分类反映了小应用程序的类之间的继承性体系。关于其它类型,子分类通过图3b所示的格定义,其中⊥是所有类型的子类型,并且所有类型是T的子类型。
参照上述表T1,验证形成小应用程序的子程序的过程顺序如下。
验证过程独立于小应用程序的每一子程序进行。对于每一子程序,过程对相关子程序的指令进行一次或多次验证扫描。在附录的表T2中给出验证过程的伪代码。
验证子程序的过程以初始化表T1所示的类型栈和寄存器类型表开始,这种初始化反映了在所考察的子程序执行开始时虚拟机的状态。
类型栈最初是空的,栈指针等于零,且寄存器类型以子程序的参数类型初始化,表示这样的事实,即虚拟机扫描这些寄存器中的这一子程序的参数。由子程序分配的寄存器类型初始化为数据类型⊥,表示这样的事实,即在子程序执行的开始,虚拟机把这些寄存器初始化为零。
然后,对子程序的指令和每一当前指令Ii进行一个或多个验证扫描。
在实施验证扫描或连续几次扫描结束时,例如,验证过程判断在验证扫描期间,包含在附录表T1所示的寄存器类型表中的寄存器类型是否已经改变。在没有改变时,验证终止并向主程序返回一个成功代码,使得能够在在图2所示的管理协议的阶段105发送正的接收确认。
如果出现对上述寄存器类型表的改变,则验证过程重复验证扫描直到包含在寄存器类型表中的寄存器类型稳定为止。
现在将参照图3c到3j说明进行一次或多次直到寄存器类型表稳定的验证扫描的特有的顺序。
对于每一当前指令Ii,进行以下验证:
参照图3a在阶段201,如上所述,验证过程判断当前指令Ii是否是转移指令、子程序调用或异常处理程序调用的目标。通过检验子程序及与这一子程序相关异常处理程序代码中的转移指令,进行这一验证。
参见图3c,该图示以阶段201开始,在当前指令Ii是转移指令的目标时,这一条件通过由Ii=CIB表示的测试300实现,这一转移是无条件的或有条件的,验证过程通过测试301在子程序这一点检验类型栈为空。在对测试301为正响应时,通过标记继续A(continue A)的上下文继续阶段继续进行验证过程。在对测试301响应为负时,类型栈不为空,验证失败且小应用程序被拒绝。这种失败是由失败(Failure)阶段表示的。
参见以继续A阶段开始的图3d,在当前指令Ii是子程序调用目标时,这一条件由测试304Ii=CSR实现,在测试305中验证过程验证前一指令Ii-1在序列中没有继续。当前一指令是无条件转移,子程序返回或引起异常时,这一验证是由测试305实现的。阶段305的测试标记如下:
Ii-1=IBunconditional,返回RSR或引起L-EXCEPT。
在对测试305有负响应时,验证过程在失败阶段失败。另一方面,在对测试305正响应时,验证过程重新初始化类型栈,使得它只包含retaddr类型的一个项,即上述子程序的返回地址。如果在阶段304当前指令Ii不是子程序的调用目标,则验证过程在继续B阶段处的上下文继续。
参见图3e,在当前指令Ii是异常处理程序的目标时,这一条件由标记为Ii=CEM的测试307实现,其中CEM表示异常处理程序的目标,这一条件是由测试307实现的,标记为:
Ii=CEM在对测试307正响应时,过程通过测试305验证前一指令是无条件转移,子程序返回或异常的引起,标记为:
Ii-1=IBunconditional,返回RSR或引起L-EXCBPT。
在对测试305正响应时,验证过程进到在阶段308的重新更新类型栈,这是通过输入标记为EXCEPT类型的异常类型进行的,阶段308之后是上下文继续阶段,即继续C。在对测试305负响应时,验证过程以标记为失败(Failure)的阶段失败。
参图3f,在当前指令Ii是多个不兼容转移目标时,这一条件由测试309实现,它标记为:
Ii=不兼容XIBs例如不兼容转移是无条件转移和子程序调用,或两个不同的异常处理程序。在对测试309正响应时,转移是不兼容的,验证过程以标记为失败的阶段失败,且程序片断被拒绝。在对测试309负响应时,验证过程以标记为继续D的阶段继续。测试309以本说明中前面提及的继续C阶段开始。
参见图3g,在当前指令Ii不是任何转移目标时,这一条件由以上述继续D开始的测试310实现,这一测试标记为
其中
表示存在符号,在对测试310负响应时验证过程继续,过渡到阶段311的类型栈的更新,阶段311和对测试310的正响应之后是阶段202处的上下文继续阶段,该阶段在以上参照图3a的说明中已说明.
现在参照图3h,给出在上述阶段202验证当前指令对类型栈的效果的阶段的更为详细的说明。
根据上述图示,这一阶段能够至少包括一个验证阶段400,类型执行栈至少包含为当前指令包含的操作数那样多的项。这一测试阶段400标记为:
Nbep≥NOpi其中Nbep表示类型栈的项数,而Nopi表示包含在当前指令中的操作数的数目。
在对测试400正响应时,这一测试之后是使类型栈非堆栈的阶段401a,以及401b验证,在栈的顶部项的类型是上述当前指令操作数类型的子类型。在测试阶段401a,指令i的操作数类型标记为Topi,在栈的项部项的类型标记为Targs。
在阶段401b,验证对应于子分类关系Topi的Targs子类型的验证。
在对测试400和401b负响应时,验证过程失败,这由到失败阶段的通路表示。另一方面,在对测试401b正响应时,验证过程继续,并在于进行:
-验证存在足够的类型栈存储器空间,以进行当前指令结果的栈存储。这一验证阶段是由测试402实现的,标记为:
栈-空间≥结果-空间其中表达式每一边表示对应的存储器空间。
在对测试402负响应时,验证过程失败,这由失败阶段表示。另一方面,在对测试402正响应时,这时验证过程进到在阶段403对指定给结果的数据类型进行栈存储,栈存储是在指定给这些结果的数据类型栈上进行的。
作为一个非限制性例子应当指出,为了实现图3h验证当前指令对类型栈的效果,当前指令由对应于读取在整数表中按p=16位编代码的整数元素的Java saload指令(这整数表由整数表和表中的整数索引定义),以及读取这表中这一索引处的整数结果构成,对于这一当前指令,验证过程检验类型栈至少包含两个元素,在类型栈顶部的这两个元素分别是short[]和short的子类型,进到非栈存储过程,并然后进到对作为结果类型的数据类型short进行栈存储的过程。
此外,参见图3i,为了实现验证当前指令对类型栈的效果的阶段,在当前指令Ii是标记为IR的地址n的寄存器的读指令时,这一条件由标记为Ii=IRn的测试404实现,在对上述测试404正响应时,验证过程在阶段405通过读取寄存器类型表中的项n验证这一读取结果的数据类型,然后通过对对应于这一当前指令操作数的栈的项的非栈存储的操作406a,以及通过406b对这一结果数据类型的栈存储,确定当前指令Ii对类型栈的效果。指令Ii的操作数标记为OPi。阶段406a和406b之后是返回上下文继续,即继续F。在对测试404负响应时,验证过程以上下文继续,即继续F继续进行。
参见图3j,在当前指令Ii是标记为IW的地址n的寄存器的写指令时,这一条件由标记为Ii=IWm的测试实现,在对测试407正响应时,验证过程在阶段408判断当前指令对类型栈和写入地址n的寄存器的操作数的类型t的效果,然后在阶段409,以紧靠在先前存储的类型之上和写入地址n的寄存器的操作数类型t之上的类型,替换地址n处的寄存器类型表的类型项。阶段409之后是返回上下文继续,即继续204。在对测试407负响应时,验证过程由上下文继续,即继续204继续进行。
作为一个例子,在当前指令Ii对应于把类型D的值写入地址1的寄存器,且寄存器1的类型在指令验证之前为C时,则寄存器1的类型由类型object替换,这是图3b所示的类型格中高于C和D的最小类型。
同样地作为一例,在当前指令Ii是对寄存器0的内容进行栈存储的指令aload-0的读取,且寄存器类型表的项0为C时,则验证程序把C栈存储到类型栈。
现在将参照附录中表T3和T4,给出验证在Java环境中书写的子程序的一例。
表T3表示对应于包含在这一表中的Java子程序的特定JavaCard代码。
表T4表示寄存器类型表和类型栈在每一指令验证之前的内容。对各种指令操作数的类型约束都可观察到。在由箭头表示的指令5转移到指令9之后以及上述转目标9之前栈都是空的。当检验到指令1在寄存器1存储类型null的值时,其初始时为⊥的寄存器1的类型变为null,即null和⊥的上界,然后当处理指令8在寄存器1中存储类型short[]的值时,变为类型short[],即类型short[]和null的上界。如果在第一个验证扫描期间寄存器1的类型已经改变,则进行第二次扫描,分配在第一次结束时获得的寄存器类型。这第二次验证扫描如同第一次扫描那样成功,且不改变寄存器类型。于是验证过程成功终止。
现在参见附录中的表T5给出验证过程对不正确代码的四个例子的失败情形的各种例子:
-在表T5的点a),作为例子所给出的代码的目的是使用关于指点器的算术过程试图形成一个无效的对象参照。通过指令2 sadd的变元类型的验证它被拒绝,该指令要求这两个变元为类型short。
-在表T5的点b)和c),代码的目的是要进行两种试图,以便把任何整数转换为一个对象参照。在点b),寄存器0与类型short,指令0一同使用,而指令5与类型null一同使用。于是,验证过程向记录0指定类型T,并当寄存器0作为指令7处的类型object的结果而被返回时,检测类型错误。
-在表T5的点c),一组类型转移“if…then…else…”用来在栈的顶部留下由整数或对象参照构成的结果。验证过程拒绝这种代码,因为在从由箭头表示的指令5向指令9的转移时检测出栈不是空的。
-最后在表T5的点d),代码包括一个循环,该循环在每一次叠代的效果是要在栈的顶部栈存储另外的一个整数,于是在一定数目的叠代之后将引起栈溢出。验证过程拒绝这种代码,在由返回箭头表示的从指令8向指令0向后转移时通知栈为非空。在转移点栈不是空的。
以上参照表T3,T4和T5给出的各种例子表明,作为本发明的目的的验证过程是特别有效的,它可适用于小应用程序,并特别适用于其子程序,对于它们,栈类型,类型栈的先前空字符,以及到转移指令或转移目标的条件都分别满足。
明显地,这种验证过程蕴含着满足这些准则的写入对象代码,这些对象代码可能对应于上述表T3中的子程序。
然而,为了保证不一定满足作为本发明的目的的方法的验证准则的现有的小应用程序和小应用程序的子程序的验证,特别关于在Java环境中书写的小应用程序和子程序,本发明的目的是要建立把这些小应用程序或子程序转换为标准化小应用程序或程序片断的方法,使得能够成功地进行作为本发明的目的的验证方法以及实现这种方法的管理协议的验证测试。
为此,本发明的目的是实现用于转换形成小应用程序的传统的对象代码的方法和程序,这种相关的小应用程序在生成时,它能够在板载系统或微处理器之外实现这种方法和这种转换程序。
作为一个纯粹的示例,现在在Java环境的框架下说明,作为本发明的目的的把代码转换为标准化代码的方法。
通过现有的Java编译程序产生的JVM代码满足各种准则,现叙述如下:
C1:每一指令的变元实际上属于这一指令预期的类型;
C2:栈不溢出
C`3:对于每一转移指令,这一转移处的栈类型与对于这一转移可能的目标处的类型相同;
C`4:在代码的一点写入寄存器的以及在代码的另一点从同一寄存器再读取的类型t的值,总是以相同的类型t被再读取;
准则C`3和C`4被为验证所提供的对象代码所验证,作为本发明的目的的验证方法的实现蕴含着它们将由以下准则C3和C4代替:
C3:在每一转移指令处及在每一转移目标处栈是空的;
C4:相同的寄存器由子程序所有的代码的同一类型使用;
参见上述的准则,应当指出,Java编译程序只保证了较弱的准则C`3和C`4。作为本发明目的的验证过程及对应的管理协议事实上保证了更严格的准则C3和C4,使得能够保证小应用程序执行和管理的可靠性。
包括代码向标准化代码的转换的标准化的概念可表现出各个方面,就以准则C3和C4代替准则C`3和C`4来说,依照作为本发明的验证过程,能够被独立地实现,以保证在每一转移指令处及每一转移目标处栈为空,并还保证对小应用程序打开的寄存器分类型,且为相关小应用程序执行所指定的单一数据类型对应于每一打开的寄存器,或另一方面,同时满足了作为本发明目的的整个验证过程。
以下将以所述的两种不同的实现方式说明,把对象代码转换为本发明中所述的标准化代码的方法,第一种实现方式对应于把满足准则C1,C2,C`3,C`4的对象代码转换为满足准则C1,C2,C3,C`4的标准化对象代码,它们对应于带有空转移指令或转移目标的标准化代码,然后,如所述在第二实现方式中,其中满足相同初始准则的传统对象代码被转换为满足准则C1,C2,C`3,C4的标准化对象代码,它们例如对应于使用被分类的寄存器的标准化代码。
现在将参照图4a说明作为本发明的目的的代码转换方法的第一实现方式。在图4a所示的实现方式中,认为初始的传统代码满足准则C1+C2+C`3,而认为作为转换结果获得的标准化代码要满足准则C1+C2+C3。
根据上述图示,对于代码或子程序的每一当前指令Ii,转换方法在阶段500,在这一指令执行之前和之后对每一指令以栈的数据类型进行注释。注释数据标记为AIi,并对其以相关的当前指令关系IiAIi相关联。通过分析与这一指令相关的数据流计算出注释数据。指令执行之前和之后的数据类型分别标记为tbei和taei。通过分析数据流计算注释数据是业内专业人员所熟知的一种传统的计算方法,故在此不再详述。
在阶段500所实现的操作表示在附录的表T6中,其中对于包含12个指令的小应用程序或小应用程序的子程序,引入了由寄存器类型和栈类型构成的注释数据AIi。
然后上述的阶段500之后是阶段500a,该阶段使索引I定位在第一指令Ii=I1。阶段500a之后是阶段501,该阶段是在指令中及每一当前指令Ii中检测标记为IB的转移或其执行栈非空的转移目标CIB的存在性。这一检测501是通过一种测试实现的,该测试是基于分配给每一当前指令的栈变量的类型的注释数据AIi而进行的,对于当前指令该测试标记为:
Ii是IB或CIB且栈(AI)?空。
在对测试501正响应时,即呈现出检测到非空执行栈,则上述测试之后是在这些转移IB一侧或在转移目标CIB一侧插入转移栈变量指令的阶段,以便在这一转移之前把执行栈的内容清空到暂时寄存器,并在这一转移之后从暂时寄存器重新建立执行栈。在图4a中该插入阶段标记为502。这阶段之后是阶段503,以测试到达最后的指令,标记为
Ii=最后的指令?在对测试503为负响应时,进行504的增量i=i+1,进行到下一个指令而返回阶段501。在对测试503为正响应时起动一结束阶段。在对测试501为负响应时,在没有插入转移指令之下,转换方法通过向阶段503转移而继续进行。如图4a所示,把传统的代码转换为带有具空栈转移指令的标准化代码的方法的实现,使得能够在不对程序片断的执行作任何修改的情形下,获得对于相同初始程序片断的标准化对象代码,其中在每一转移指令处和每一转移目标指令处栈变量的栈为空。在Java的环境情形下,在栈和寄存器之间转移数据的指令是Java虚拟机的load和store指令。
现在返回表T6中引入的例子,该转换方法在指令9处检测到栈非空的一个转移目标。然后该方法在导致上述指令9的转移指令5之前插入一指令istore 1,以便在寄存器1中保存栈的内容,并保证该栈在转移时为空。对称地,在指令9之前插入一指令iload 1,以便建立栈的内容完全与转移之前一样。最后,在指令8之后插入指令istore 1,以保证栈在导致指令9的两个通路上平衡。在表T7中示出这样进行的向标准化代码转换的结果。
现在将参照图4b说明作为本发明的目的的转换方法的第二个实现方式,所在的情形是,初始的传统对象代码满足准则C1+C`4,而标准化对象代码满足准则C1+C4。
参见上述图4b,应当指出,按这一实现方式的方法在所述的阶段500,与图4a所示的情形几乎相同,是在这一指令执行之前和之后以寄存器数据类型注释每一指令Ii。同样地,通过分析与这指令相关的数据流计算出注释数据AIi。
然后,注释阶段500之后是进行配寄存器重新分配的阶段,该阶段标记为601,重新分配的进行是通过检测以不同类型使用的原始寄存器,并把这些原始寄存器划分为分开的标准化寄存器,一个标准化寄存器分配给使用的每一数据类型。阶段601之后是阶段602,该阶段重新更新处理使用上述标准化寄存器的操作数的指令。阶段602之后是上下文继续阶段302。
参见在表T6中给出的例子,应当指出,转换方法检测标记为r0的序号0寄存器用于两种类型,即object,指令0和1,以及int,指令9及随后的指令。然后该方法将把原始寄存器r0划分为两种寄存器,即用于object类型的寄存器0,及用于int类型的寄存器1。然后通过把它们转换为对记录1的参照而重写对int类型的记录0的参照,获得的标准化代码表示在附录的表T8中.
要注意,以非限制性方式在参见上述表T8引入的例子中,新的寄存器1同时用于通过把寄存器0划分为两种寄存器而使栈标准化及分类的寄存器的生成。
现在,在一优选的与图5a相关的非限制性例子中,将更为详细地说明把传统的代码转换为带有具图4a所示空栈的转移指令的标准化代码的方法。
这一实现方式涉及阶段501,该阶段在于在指令内及当前指令Ii内,检测转移IB或分别地栈为非空的转移目标CIB的存在性.
在判断栈为非空的目标指令之后,这一条件在阶段504a标记为Ii栈≠空,转换过程在上述阶段504a使一组新的寄存器与这些指令相关联,每一在这些指令处有效的栈单元一个。于是,如果i表示其相关的栈类型非空的转移目标的序号,且是类型tp1i到tpni,其中n>0,栈非空,则转换过程分配n个新的未使用的寄存器r1到rn,并使它们与对应的指令i相关联。该操作在阶段504a处实现。
阶段504a之后是阶段504,该阶段在于检验每一已检测的序号i的指令,并在测试阶段504鉴别转移目标CIB或转移IB的存在性。阶段504以由以下所示的测试形式示出:
在序号i的指令是由以上等式表示的转移目标CIB,且在这一指令处的栈变量的栈非空,即对测试504的正响应的情形下,对由转移组成的序号i-1的每一个前边指令,异常的引起或程序返回,这一条件在测试阶段505实现,表示为:
Ii-1=IB,EXCEPT引起,Prog。返回。被检测的序号i的指令只能由转移访问。在对上述测试505正响应时,转换过程执行阶段506,该阶段是在相关的被检测的序号为i的指令之前插入来自新的寄存器集的一组load类型的加载指令。插入操作506之后是507使所有指向被检测的序号为i的指令的转移重新定向到第一插入的加载指令load。插入和重新定向操作示于附录中表T9中。
对于按顺序连续进行的序号i-1的每一个前边指令,即序号i的当前指令可同时由一转移和来自前面指令访问,这一条件由测试508实现,并由以下关系表示:
Ii-1→Ii以及
IB→Ii转换过程在于阶段509,该阶段在被检测的序号i的指令之前插入备份一组新的寄存器的备份指令store,以及从这一组新的寄存器加载的一组加载指令load。然后阶段509之后是阶段510,该阶段是把所有指向被检测的序号i的指令的转移重新定向到第一插入的加载指令load。
在被检测的序号i的指令是向一已判断的指令转移的情形下,对于任何由无条件转移构成的被检测的序号i的指令,这一条件由测试511实现,标记为:
Ii=IBuncondit如图5a所示转换过程在对测试511正响应时,在阶段512,在检测的序号i的指令之前插入多个备份指令store。作为一例如表T11所示,转换过程在指令i之前插入n个指令store。指令store寻址寄存器r1到rn,其中n表示寄存器的数目。这样,备份指令与每一新的寄存器相关联。
对于由条件转移组成的每一被检测的序号i的指令,以及对于由这一条件转移指令处理的操作数大于0的数目mOp,这一条件由测试513实现,标记为:
Ii=IBcondit
其中mOp>0在对上述测试513正响应时,转换过程在阶段514,在被检测的序号i的指令之前,在序号i的被检测指令的mOp操作数及n随后的值的栈变量的栈的顶部,插入标记为swap_x的置换指令。置换操作使得能够在栈变量的栈顶部收集n个值以便备份在新的寄存器组r1到rn。阶段514之后是阶段515,是在序号i的指令之前插入一组备份指令store以便备份新的寄存器集r1到rn。上述插入阶段515本身之后是阶段516,该阶段是在被检测的序号i的指令之后插入一组加载指令load以便从新的寄存器组r1到rn加载。对应的插入操作集在附录的表12中示出。
为了完整性并参见图5a,应当指出,在对测试504负响应时,转换过程的继续是由上下文继续阶段即阶段503实现的,对测试505,508,511和513的负响应本身也是通过上下文继续阶段即阶段503由转换过程的继续跟随的,以及这同样适用于在上述重新定向阶段507和510及插入阶段512和516之后的操作的继续。
现在将参照图5b给出,使用图4b所示的已分类型的寄存器,使对象代码标准化并将其转换为标准化对象代码的方法更为详细的说明。更具体来说,这一实现方式涉及阶段601的这一非限制性的优选实现方式,以便通过检测用于不同类型的原始寄存器而重新分配寄存器。
参见上述图5b,要指出的是上述阶段601在于在阶段603判断标记为IDj的每一寄存器rj的生命区间。这些生命区间,表示为“live range”或“webs”,对一个寄存器r定义为局部迹的最大集,使得寄存器r在这些迹的所有点处都是生存的。这些概念更为详细的定义宜参见由Steven S.MUCHNIK编辑的著作,标题为“Advanced Compiler Design andImplementation”,16.3节,Morgan KAUFMANN,1997。阶段603由以下关系表示:
IDjrj其中所述对应的的生命区间IDj与每一寄存器rj相关联。
上述阶段603之后是阶段604,是在阶段604判断标记为tpj的每一生命区间IDj的主数据类型。对于寄存器rj生命区间IDj的主类型是由属于上述生命区间的备份指令sotre存储在这一寄存器rj中的数据类型的上界定义的。
阶段604本身之后是阶段605,这阶段在于在如以上阶段603和604定义的生命区间之间建立一种干扰图,这种干扰图由非有向图构成,其每一顶点由生命区间构成,而如果顶点包含对其它顶点的寄存器寻址的备份指令则其在图5b中标记为aj1,j2的两个顶点IDj1和IDJ2之间的弧存在,或反之也然。图5b中,干扰图的结构被示意性表示出,基于业内专业人员所知道的计算技术能够实现这种结构。对于这类图的结构更详细的描述,宜参见由Alfred V.AHO,Ravi SETHI及Jeffrey D.ULLMAN发表的著作,标题为“Compilers:principles,techniques,and tools”,Addison-Wesley1986,Section 9.7。
阶段605之后,图5b所示的标准化方法在阶段606,通过在顶点对的两个顶点没有同一相关的主数据类型时,在干扰图的所有顶点对之间添加弧,转化分配给干扰图中每一寄存器rj的数据类型的唯一性。应当理解到,分配给每一寄存器的数据类型的唯一性的字符转化明显对应于转化并把准则C4纳入干扰图,这一准则在说明的前面提及。然后,上述阶段606之后是阶段607,其中进行干扰图的示例化,这种示例化更一般地表示为如通常的技术所述的干扰图的绘图阶段。在阶段607期间,转换过程向每一生命区间IDjk指定一检寄存器号码rk,使得干扰图中两个邻接的区间收到不同的寄存器号码。
能够基于任何适当的过程实现这一操作。作为一非限制性例子,指出一种优选的过程可以是:
a)在干扰图中选择最小阶顶点,最小阶定义为邻接顶点最小数,并从图中取消它。这阶段能够被重复直到图变为空。
b)每一先前取消的顶点按它们取消的反序被重新引入干扰图,最后被取消的顶点是首先引入的顶点,即按取消顺序的反序顺序进行。于是能够向每一被重新引入的顶点指定不同于指定给所有邻接顶点号码的最小寄存器号码。最后,通过示于图4b中的阶段602,转换和重新分配过程向相关小应用程序的子程序的代码中的寄存器重新写入访问指令。在对应的的生命区间内访问给定的寄存器由访问不同的寄存器代替,其号码是在示例化阶段被指定的,还指定绘图阶段。
现参照图6给出板载数据处理系统以及小应用程序开发系统的详细说明,该板载数据处理系统使得能够实现如本发明的目的中所述的程序片断或小应用程序的管理协议和验证过程。
关于带有标号10的对应的的板载系统,回忆起这一板载系统就是包括如图1b中所示主要组件的可重编程型系统。认为上述的板载系统通过串行链路与终端互连,终端本身例如通过局域网连接,如果有适当的远程网络,则连接到标号为20的小应用程序开发计算机。在板载系统10上运行一主程序,该主程序读取并执行终端在串行链路上发送的命令。此外,微处理器卡的标准命令,诸如ISO 7816协议的标准命令,能够被实现,且主程序识别两个附加的命令,一个用于小应用程序的远程加载,另一个用于选择先前已经加载到微处理器卡的小应用程序。
根据本发明的目的,主程序的结构是这样实现的,即遵循参照图2的说明中如上所述用于管理下载程序片断的协议,包含至少一个用于管理和验证下载的序片断的程序模块。
此外,遵循在参照图3a到3j的说明中以上所述的验证方法,该程序模块还包含一子程序模块以便验证下载程序片断。
因此,存储器的结构,特别是非可写永久性存储器ROM,被这样修改,使得除了主程序之外特别包含如上所述的一个协议管理和验证模块17。最后,关于EEPROM型的非易失可重写存储器,最好包含一个小应用程序目录,标记为18,使得能够实现作为本发明的目的的管理协议和验证过程。
参见同一图6,应当指出,根据本发明的目的的小应用程序开发系统,实际上如说明中以上所述使得能够把传统的满足Java环境框架中的准则C1+C2+C`3+C`4的对象代码,转换为同一程序片断的标准化对象代码,与传统的Java编译器21相关,包含标记为22的一个代码转换模块,正如以上参照图4a,4b和5a和5b的说明中的第一实现方式和第二实现方式所述,该模块进行把代码转换为标准化代码。事实上应当理解,一方面,原始对象代码标准化为带有空栈的转移指令的标准化对象代码,并使用划分类型的寄存器转换为标准化代码,另一方面,如说明中以上所述,使得能够满足由作为本发明的目的的验证方法施加的验证准则C3和C4。
代码转换模块22之后是JavaCard转换器23,该转换器使得能够保证通过远程或局域网向终端,并通过串行链路向微处理器卡10传输。于是,图6所示的小应用程序开发系统20使得能够把由Java编译器21从小应用程序的Java源代码产生的已编译的类文件,转换为等效的但是符合额外的约束C3,C4的类文件,这些约束是由板载微处理器卡10的管理协议和验证模块施加的。这些已转换的类文件在卡上由标准的JavaCard转换器23转换为可下载的小应用程序。
现在给出作为本发明的目的的协议成分,方法和系统集合值得注意的各种组成部分,只供参考。
与说明书引言中提及的先有技术验证过程相比较,作为本发明的目的的验证方法值得注意的表现在于,该方法把验证的着重点集中在操作数的划分类型的性质上,即遵从与每一指令相关的类型约束且没有栈溢出,它们对于每一小应用程序的执行的可靠性是至关重要的。其它的验证就可靠性而言没有显现出重要性,特别是在第一次读取代码之前代码正确初始化每一寄存器的验证。反之,作为本发明的目的的验证方法,是通过在方法被初始化时把所有来自的虚拟机的寄存器初始化为零而操作的,以便保证读取非初始化的寄存器不会削弱卡的可靠性。
此外,由作为本发明的目的的验证方法施加的要求,如所述其中在每一转移或转移目标指令处栈必须是空的,这保证了在转移执行之后,以及程序已经转移到的指令执行之前,栈处于相同的空的状态。这种操作方式保证了栈处于一致的状态,而不论通过相关的子程序或小应用程序的代码被跟随的执行程序如何。这样,即使存在转移或转移目标,也保证了栈的一致性。先有技术的方法和系统中必须在随机访问存储器中保留每一转移目标的栈类型,这必须有正比于Tp×Nb的随机访问存储器的量,Tp×Nb是所使用的执行栈大小与代码中转移目标数的乘积,与此相反,作为本发明的目的的验证方法只需要验证期间指令时间的执行栈类型,并不在代码的其它点在存储器中保持这种栈类型。因而,与Tp成正比,而与Nb无关的,于是与子程序或小应用程序的代码的长度成正比的随机访问存储器的量,即可满足作为本发明的目的的方法。
准则C中所述的要求,其中所述给定的寄存器必须在子程序所有代码中与同一类型使用,保证了上述代码不会以不一致的方式使用一寄存器,例如,在程序的一点向寄存器写入short整数,而在程序的另一点作为对象参照读取之。
在先有技术中所描述的验证过程中,特别是在先前提及的由TimLINDHOLM和Frank YELLIN编辑的标题为“The Java Virtual MachineSpecification”的Java规范中,为了保证上述通过转移指令使用的一致性,必须在随机访问存储器中保持每一转移目标处的寄存器类型的表的拷贝。这种操作必须有正比于Tr×Nb的随机访问存储器的量,其中Tr表示由子程序使用的寄存器数目,而Nb表示这一子程序的代码中转移目标数。
与此相反,作为本发明的目的的验证过程在寄存器类型的全局表上进行操作,而无需在随机访问存储器中保持代码的不同点处的拷贝。因而为了实现验证过程所需的随机访问存储器与Tr成正比而与Nb无关,于是与相关的子程序代码长度成正比。
如所述在所有的点,即在相关代码的每一指令处,给定的寄存器要与同一类型使用这样的限制,相当程度地简化了子程序的验证。反之,在先有技术的验证过程中,在没有这种限制的情形下,验证过程必须建立严格的栈规则,并必须关于一定的寄存器类型多方面验证子程序体。
总之,与先有技术相比,作为本发明的目的的验证过程,一方面使得能够降低执行验证方法的程序代码量,另一方面,能够降低在验证操作期间随机访问存储器的消耗,在作为本发明的目的的验证过程的情形下复杂度为O(Tp+Pr)形,而不是对于先有技术验证过程的(O(Tp+Pr)×Nb),然而却提供了关于被验证代码执行的可靠性的同样的保证。
最后,把原始的传统的代码转换为标准化代码是通过代码的本地化的转换实现的,而无需向验证器组件,即微处理器卡或板载数据处理系统传输额外的信息。
关于图4b和5b中所述的重新分配寄存器的方法,这种方法不同于已知的先有技术的方法,如美国专利4,571,678和5,249,295中具体所述的方法,不同在于以下事实:
-寄存器重新分配保证了同一寄存器不会分配给两个带有不同主类型的区间,这样就保证了给定的寄存器在所有代码中与同一类型使用;以及
-在以上文献中所述的现有的寄存器分配算法假设固定数目的寄存器,并试图使在寄存器和栈之间的转移最小化,称为“溢出(spills)”,然而,作为本发明的目的中所述的寄存器重新分配以寄存器总数可变的框架操作,其结果是当进行使寄存器总数最小化的过程时,不必在寄存器与栈之间进行转移。
作为本发明的目的的管理下载到板载系统的程序片断的协议,以及分别验证这种下载的程序片断对象代码及转换这种下载的程序片断对象代码的方法,当然能够以软件实现。
因而,本发明还涉及能够直接加载到可重新编程的板载系统的内部存储器的计算机程序产品,这种板载系统使得能够下载由对象代码即一系列指令组成程序片断,这种对象代码可由板载系统的微处理器以虚拟机的方式执行,该虚拟机装有执行栈和本地寄存器或通过这些指令处理的变量,使得这种代码能够被解释。对应的计算机程序产品包含对象代码部分,以便当这种板载系统与终端互连且这种程序由这种板载系统以虚拟机的方式执行时,执行用于管理下载到这种板载系统的程序片断的协议,如以上说明中所述的图2和6所示。
本发明还涉及一种计算机程序产品,该产品可直接加载到诸如带有可重写存储器的微处理器卡,这种可重新编程的板载系统的内部存储器。这种计算机程序产品包含对象代码部分,以便执行对下载到这种板载系统的程序片断进行验证的的阶段,如以上说明中参照图3a到3j图所示和所述。当这种板载系统与终端互连,且这种程序通过这种板载系统由虚拟机执行时,执行这种验证。
本发明还涉及一种计算机程序产品;这计算机程序产品包含对象代码部分,以执行把程序片断的对象代码转换为这同一程序片断的标准化对象代码的转换方法的各阶段,如图4a,4b,5a,5b所示,及本说明中以上所述。
本发明还涉及一种计算机程序产品,该产品记录在可用在可重新编程的板载系统中的介质上,例如装有可重写存储器的微处理器,这种板载系统使得能够下载由对象代码组成的程序片断,这种对象代码可由这种微处理器以虚拟机方式执行,虚拟机装有执行栈及通过这些指令处理的本地变量或寄存器,以便允许对这种对象代码进行解释。上述的计算机程序产品至少包含可由板载系统的微处理器通过虚拟机读取的程序模块,以便命令执行用于对被下载的程序片断进行下载管理的过程,如图2所示并如以上说明中所述,一种可由微处理器通过虚拟机读取的程序模块,以便命令执行用于逐个指令验证构成这种程序片断的对象代码的过程,如以上说明中参照图3a到3j所示和所述,以及一种可由这种板载系统通过虚拟机读取的程序模块,以便把这种程序片断的对象代码转换为同一程序片断的标准化对象代码之后或在没有这样作的情形下,命令执行被下载的程序片断,如图2所示。
上述的计算机程序产品还包含可由微处理器通过虚拟机读取的一个程序模块,以便在上述程序片断不成功验证过程的情形下,命令在板载系统上禁止执行该程序片断,如以上参照图2的说明中所示和所述。表2验证程序模块的伪代码验证程序模块的伪代码所使用的全局变量:
Tr 当前方法要求的寄存器数
Tp 当前方法要求的栈最大容量
tr[Tr] 寄存器类型表(图4中的402)
tp[Tp] 栈类型(图4中的403)
pp 栈指针(图4中的404)
chg 指示tr是否已被改变的标志初始化pp→0初始化来自方法的n个变元的类型tp[0]…tp[n-1]初始化tp[n]...tp[Tr-1]为⊥初始化chg为真当chg为真时:
复位chg为假
定位在方法的第一指令
当没有到达方法的结束时:
如果当前指令是一转移指令的目标
如果pp≠0,验证失败
如果当前指令是一子程序调用的目标
如果先前的指令按顺序继续进行,则失败
取tp[0]←etaddr以及pp←1
如果当前指令是C类异常处理程序:
如果先前的指令按顺序继续进行,则失败
作tp[0]←C以及pp←1
如果当前指令是不同种类的目标:
验证失败
判断指令变元的类型a1…an
如果pp<n,则失败(栈溢出)
对于i=1,…,n
如果tp[pp-n-i1]不是ai的子类型,则失败
作pp←pp-n
判断指令结果的类型r1,…,rn
如果pp+m≥Tp,则失败(栈溢出)
对于i=1,…,m,作tp[pp+i-1]?ri
作pp←pp+m
如果当前指令是向一寄存器r写入:
判断向记录写入的值的类型t
作tr[r]←lower bound(t,tr[r])
如果tr[r]已经改变,作chg←真
如果当前指令是一转移:
如果pp≠0,验证失败
进到下一个指令返回验证成功代码表T3
static short[]meth(short[]table) { short[]result=null; if(table length>=2)result=table; return table }
Claims (27)
1.一种用于管理程序片断的协议,程序片断是下载到诸如装有可重写存储器的微处理器卡这种可重编程板载系统的,所述程序片断由对象代码即一系列指令组成,对象代码可由板载系统的微处理器通过虚拟机执行,虚拟机带有执行栈并带有通过这些指令处理的局部变量或寄存器,并使得能够解释这些对象代码,所述板载系统与终端互连,其特征在于这种协议在所述板载系统级上至少包括:
a)检测用于下载这种程序片断的命令;并在对这一阶段正响应时检测下载命令,
b)读取构成这种程序片断的对象代码并暂时存储这种对象代码;
c)使所有暂时存储在存储器中的对象代码经受验证过程,这一验证过程至少包括初始化类型栈和寄存器类型表阶段,它们表示所述虚拟机在开始执行暂时存储的对象代码时的状态,并且包括以下后继的阶段,通过对每一当前指令判断目标、转移指令目标、异常处理程序调用目标、或子程序调用目标的存在性,逐个指令地进行验证,并且包括验证和更新所述当前指令对类型栈和寄存器类型表的效果,并且在所述对象代码的成功验证的情况下,
d)把下载的程序片断记录在可用的程序片断的目录中,并在所述对象代码的不成功验证的情况下,
e)在所述板载系统上禁止所述程序片断的执行。
2.如权利要求1所述的协议,其特征在于所述禁止执行的阶段e)包括:
f)当省略在所述可用程序片断的目录中记录后者时,删除暂时记录的程序片断,以及
g)向所述阅读器发送出错代码。
3.如权利要求1或2所述的协议,其特征在于,在对所述检测下载目录的阶段a)是负响应时,则包括:
b`)检测一命令,该命令是从程序片断目录选择一可用程序片断;并在对这阶段为正响应时,检测选择可用程序片断的命令;
c`)调用所述已被选择的可用程序片断;
d`)通过虚拟机执行所述被调用的可用程序片断,当每一指令被执行时,对于变量类型、对于由所调用的可用程序片断处理的对象的访问权,或对于执行栈的溢出不进行动态验证,并且在对这一阶段是负响应时,检测选择可用程序片断的命令,
e`)前进到处理板载系统的标准命令。
4.一种验证程序片断的方法,程序片断是下载到诸如装有可重写存储器的的微处理器卡这种可重编程板载系统的,所述程序片断由对象代码组成,并至少包含一个子程序即一系列指令,验证是通过板载系统的微处理器由虚拟机进行的,虚拟机带有执行栈及由这些指令处理的操作数寄存器,并使得能够解释这种对象代码,所述板载系统与阅读器互连,其特征在于所述方法在检测下载命令并把构成程序片断的所述对象代码存储到所述可重写存储器中之后,对于每一子程序:
α)通过数据进行使类型栈和寄存器类型表初始化的阶段,这些数据表示虚拟机在开始执行暂时存储的对象代码时的状态;
β)通过对每一当前指令判断目标、转移指令目标、异常处理程序调用目标或子程序调用目标的存在性,逐个指令地对所述暂时存储的对象代码指令进行验证;
γ)基于转移指令目标、子程序调用目标或异常处理程序调用目标的存在性,就所述当前指令对所述类型栈和所述寄存器类型表的数据类型的效果进行验证和更新,当寄存器类型表在所有指令的验证过程中没有被修改时,所述验证是成功的,并且验证过程逐个指令地进行直到寄存器类型表稳定而没有修改出现为止,否则验证过程被中断。
5.如权利要求4所述的验证方法,其特征在于,在验证过程期间被处理的变量类型至少包含:
-对应于在程序片断中定义的对象类的类标识符;
-数值变量类型,至少包含类型short,按p位编码的整数,以及用于跳转指令JSR的返回地址的类型retaddr;
-与零对象的参照相关的类型null;
-与对象相关的类型object;
-第一特定类型⊥,表示所有类型的交集并且对应于值0,nil;
-第二特定类型T,表示所有类型的并集并且对应于任何值的类型。
6.如权利要求5所述的方法,其特征在于,所有所述变量类型验证子类型分类关系:
objectεT;
short,retaddrεT;
⊥εnull,short,retaddr。
7.如权利要求4到6之一中所述的方法,其特征在于,当所述当前指令是转移指令的目标时,所述验证方法包括验证类型栈是空的,在肯定的验证的情形下,验证过程对随后的指令继续进行,否则验证过程失败且程序片断被拒绝。
8.如权利要求4到7之一中所述的方法,其特征在于,当所述当前指令是子程序调用的目标时,所述验证过程验证前一指令是无条件转移,子程序返回或异常的引起,在肯定的验证的情形下,验证过程进到通过retaddr类型实体,子程序的返回地址,重新更新变量类型栈,否则验证过程失败且程序片断被拒绝。
9.如权利要求4到8之一中所述的方法,其特征在于,在当前指令是异常处理程序的目标时,所述验证过程验证前一指令是无条件转移,子程序返回或异常引起,在肯定的验证的情形下,所述验证过程进到通过输入异常类型而重新更新类型栈,否则验证过程失败且程序片断被拒绝。
10.如权利要求4到9之一中所述的方法,其特征在于,在当前指令是多个不兼容转移的目标时,验证过程失败且程序片断被拒绝。
11.如权利要求4到10之一中所述的方法,其特征在于,在当前指令不是任何转移目标时,验证过程通过过渡到类型栈的更新而继续。
12.如权利要求4到11之一中所述的方法,其特征在于,当前指令对类型栈的效果的验证阶段至少包含:
-验证类型执行栈至少包含象当前指令包含的操作数那么多的项的阶段;
-非栈存储及验证栈的顶部项的类型是这一指令的操作数的操作数的类型的子类型的阶段;
-验证类型栈上有足够的存储空间存在以便进到对当前指令结果进行栈存储的阶段;
-在栈上把指定给这些结果的数据类型进行栈存储的阶段。
13.如权利要求12所述的方法,其特征在于,在当前指令是对地址n的寄存器进行读取的指令时,验证过程包括:
-通过读取寄存器类型表中的项n,验证这一读取结果的数据类型;
-通过使对应于这一当前指令操作数的栈的项作非栈存储,并通过对这一结果的数据类型作栈存储,判断当前指令对类型栈的效果;
14.如权利要求12所述的方法,其特征在于,在当前指令是对地址m的寄存器进行写入的指令时,验证过程包括:
-判断当前指令对类型栈和已写入地址m的这一寄存器的操作数的类型t的效果;
-以紧接在先前存储的类型之上以及已写入地址m的这一寄存器的操作数的类型t之上的类型,代替地址m处的寄存器类型表的类型项。
15.一种把程序片断对象代码转换为同一程序片断的标准化对象代码的方法,在转换前的对象代码中,每一指令的操作数属于由这一指令处理的数据类型,执行栈对每一转移指令不出现任何溢出现象,这一转移的栈变量的类型与这一转移的目标处的类型相同,在转换后标准化对象代码中,每一指令的操作数属于由这一指令处理的数据类型,执行栈不出现任何溢出现象,执行栈在每一转移指令处及每一转移目标指令处为空,其特征在于,对于所述对象代码的所有指令这一方法包括:
-以这一指令执行前及执行后的栈的数据类型注释每一当前指令,通过分析与这一指令相关的数据流计算出注释数据;
-在所述指令内及每一当前指令内检测转移或分别是转移目标的存在性,其所述执行栈是非空的,基于分配给每一当前指令的栈变量类型的注释数据,并在非空执行栈的检测存在时,进行检测操作,
-插入指令以便在这些转移或这些转移的目标任何一侧转移栈变量,以便分别在这一转移之前把执行栈内容清空到临时寄存器,并且在这一转移之后从所述临时寄存器重建执行栈,且否则不插入任何转移指令,使得能够对于这同一程序片断获得标准化对象代码,其中在对所述程序片断的执行没有任何修改时,在每一转移指令处以及在每一转移目标指令处执行栈为空。
16.把程序片断的对象代码转换为同一程序片断标准化对象代码的方法,其中在转换前对象代码中,每一指令的操作数属于由这一指令处理数据类型,且由这一对象代码的一指令写入寄存器的给定类型的操作数,由这一对象代码另一指令以相同给定数据类型从这一相同寄存器读出,其中转换后每一指令操作数属于由这一指令处理的数据类型,相同的数据类型在所述所有标准化对象代码中被分配给相同的寄存器,其特征是,对所述对象代码的所有指令这一方法在于:
-以这一指令执行前及执行后的寄存器的数据类型注释每一当前指令,通过分析与这一指令相关的数据流计算出注释数据;
-进行寄存器的重新分配,为此检测采用不同类型的原始寄存器,把这些原始寄存器划分为分开的标准化寄存器,一个标准化寄存器用于使用的每一数据类型,并重新更新处理使用所述标准化寄存器的操作数的指令。
17.如权利要求15所述的方法,其特征在于这样的阶段,该阶段是,在其执行栈非空的所述指令内及每一当前指令内,检测转移或分别是转移目标的存在性,还在于随后对序号为i的每一对应的指令的检测:
-使每一序号为i的指令与一组新的寄存器相关联,一个新的寄存器与在这一指令处有效的每一栈变量相关联;
-检验每一被检测的序号为i的指令并分别判断转移目标或转移的存在性,并在序号为i的指令是转移目标且这一指令处的执行栈非空的情形下,
●对每一先前的序号为i-1的由转移、引起异常或程序返回的指令,被检测的序号为i的指令只能由转移访问,
●●在所述被检测的序号为i的指令之前,插入一组加载指令load,以便从该组新的寄存器加载,把所有指向被检测的序号为i的指令的转移重新定向到第一插入的加载指令load;以及
●对每一先前的序号为i-1的按顺序继续进行的指令,被检测的序号为i的指令可同时由转移和从先前的序号为i-1的指令访问,
●●在所述被检测的序号为i的指令之前,插入一组备份指令store以便向该组新的寄存器备份,以及一组加载指令load以便从这组新的寄存器加载,使所有指向被检测的序号为i的指令的转移重新定向到第一插入的加载指令load,并在所述被检测的序号为i的指令是指向给定的指令的转移的情形下,
●对每一被检测的序号为i的由无条件转移构成的指令,
●●在被检测的序号为i的指令之前,插入多个备份指令store,一个备份指令与每一新的寄存器相关联;以及
●对于每一被检测的序号为i的由条件转移构成的指令,以及对于由这一条件转移指令处理的操作数的数目m>0,
●●在这一被检测的序号为i的指令之前,在该被检测的序号为i的指令的m个操作数以及随后的n个值的执行栈的顶部,插入置换指令swap-x,这一置换操作使得能够在执行栈的顶部收集将要备份到该组新的寄存器中的n个值,以及
●●在序号为i的指令之前,插入一组备份指令store,以便备份该组新的寄存器,以及
●●在被检测的序号为i的指令之后,插入一组加载指令load以便从这组新的寄存器加载。
18.如权利要求16所述的方法,其特征在于,通过检测与不同类型使用的原始寄存器而重新分配寄存器的阶段在于:
-确定每一寄存器的生命区间;
-确定每一生命区间的主数据类型,对于寄存器r的生命区间j的主数据类型由属于生命区间j的备份指令store存储在这一寄存器r中的数据类型的上界定义;
-建立生命区间之间的干扰图,这种干扰图由非定向图构成,其每一顶点由生命区间构成,如果一个顶点包含定址到另一顶点的寄存器的备份指令,则其两个顶点j1和j2之间的弧存在,或反之也然;
-当一对顶点的两个顶点没有相同的相关联的主数据类型时,通过在干扰图的所有顶点对之间添加弧,转化分配给干扰图中每一寄存器的数据类型的唯一性;
-通过向每一生命区间指定一寄存器号码,使得不同的寄存器号码指定给干扰图中两个邻接的生命区间,进行干扰图的示例化。
19.一种板载系统,该系统能够通过下载的程序片断被重编程,该系统至少包括一个微处理器,一个随机访问存储器,一个输入/输出模块,一个电可重编程非易失存储器以及一个永久性存储器,其中装有主程序和虚拟机,该虚拟机使用所述微处理器使得能够执行主程序及至少一个程序片断,其特征在于,所述板载系统包含至少一个程序模块,以管理和验证下载的程序片断,所述管理和验证程序模块安装在永久性存储器中。
20.一种板载系统,该系统能够通过下载的程序片断被重编程,该系统至少包括一个微处理器,一个随机访问存储器,一个输入/输出模块,一个电可重编程非易失存储器以及一个永久性存储器,其中装有主程序和虚拟机,该虚拟机使用所述微处理器使得能够执行主程序及至少一个程序片断,其特征在于,所述板载系统包含至少一个程序模块,以便根据权利要求1到3之一所述的用于管理下载的程序片断的协议而管理和验证下载的程序片断,所述管理和验证程序模块安装在永久性存储器中。
21.如权利要求20中所述的板载系统,其特征在于,该系统包含至少一个子程序模块,以便根据权利要求4到14之一所述的验证过程而验证下载的程序片断。
22.一种把程序片断的对象代码转换为同一程序片断的标准化对象代码的方法,其中转换前的对象代码中,每一指令的操作数属于由这一指令处理的数据类型,对每一转移指令执行栈不出现任何溢出现象,在这一转移处的栈变量的类型与这一转移的目标处的类型相同,且由这一对象代码的一指令写入一寄存器的给定类型的操作数由这一对象代码的另一指令以相同给定的数据类型从这一相同的寄存器再读取,在转换后的标准化对象代码中,每一指令的操作数属于由这一指令处理的数据类型,执行栈不出现溢出现象,执行栈在每一转移指令处及每一转移目标指令处是空的,相同的数据类型在所有的标准化对象代码中指定给相同的寄存器,其特征在于,所述转换系统至少包含安装在开发计算机或工作站的工作存储器中的一个程序模块,以便根据如权利要求15到18之一所述的方法把这一对象代码转换为标准化对象代码,使得能够产生对于所述程序片断的标准化对象代码,满足对于验证这一下载程序片断的准则。
23.一种计算机程序产品,该产品能够直接加载到诸如装有可重写存储器的微处理器卡这种可重编程的板载系统的内部存储器中,这一板载系统使得能够下载由对象代码即一系列指令组成的程序片断,这种对象代码可由板载系统的微处理器通过虚拟机执行,虚拟机装有执行栈及通过这些指令处理的局部变量或寄存器,并使得能够解释这一对象代码,这种计算机程序产品包含对象代码部分,以便当这一板载系统与一终端互连,且这一程序由这一板载系统微处理器通过所述虚拟机执行时,执行如 1到3之一中所述的用于管理下载到这一板载系统上的程序片断的协议。
24.一种计算机程序产品,该产品能够直接加载到诸如装有可重写存储器的微处理器卡这种可重编程的板载系统的内部存储器中,这一板载系统使得能够下载由对象代码即一系列指令组成的程序片断,这种对象代码可由板载系统的微处理器通过虚拟机执行,虚拟机装有执行栈及通过这些指令处理的操作数寄存器,并使得能够解释这一对象代码,这种计算机程序产品包含对象代码部分,以便当这一板载系统与一终端互连,且这一程序由这一板载系统微处理器通过所述虚拟机执行时,执行如权利要求4到14之一中所述的阶段,即验证下载到这一板载系统上的程序片断。
25.一种计算机程序产品,包含对象代码部分,以便执行转换方法的阶段,如权利要求15的18之一所述,该方法是把下载的程序片断的对象代码转换为对同一程序片断的标准化对象代码。
26.一种记录在介质上的计算机程序产品,该产品能够用于诸如装有可重写存储器的微处理器卡这种可重编程的板载系统,这一板载系统使得能够下载由对象代码即一系列指令组成的程序片断,这种对象代码可由板载系统的微处理器通过虚拟机执行,虚拟机装有执行栈及通过这些指令处理的局部变量或寄存器,并使得能够解释这一对象代码,这种计算机程序产品至少包含:
-程序资源,这些资源能够由这种板载系统的微处理器通过所述虚拟机读取,以便命令执行这样的过程,该过程用于管理被下载的程序片断的下载;
-程序资源,这些资源能够由这种板载系统的微处理器通过所述虚拟机读取,以便命令执行这样的过程,该过程用于逐个指令地验证构成所述程序片断的对象代码;
-程序资源,这些资源能够由这种板载系统的微处理器通过所述虚拟机读取,以便在把这一程序片断的对象代码转换为同一程序片断的标准化对象代码之后或没有这样操作时,命令执行下载的程序片断。
27.如权利要求26中所述的计算机程序产品,还包含程序资源,该程序资源能够由这种板载系统的微处理器通过所述虚拟机读取,以便在这一程序片断的验证过程不成功的情形下,命令禁止在所述板载系统上执行所述程序片断。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9910697A FR2797963B1 (fr) | 1999-08-23 | 1999-08-23 | Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants |
FR99/10697 | 1999-08-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1370294A true CN1370294A (zh) | 2002-09-18 |
CN1220939C CN1220939C (zh) | 2005-09-28 |
Family
ID=9549281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00811932.5A Expired - Fee Related CN1220939C (zh) | 1999-08-23 | 2000-08-21 | 管理协议,验证和转换下载程序片断的方法及对应的系统 |
Country Status (11)
Country | Link |
---|---|
US (1) | US7720939B1 (zh) |
EP (1) | EP1212678B1 (zh) |
JP (1) | JP2003507811A (zh) |
CN (1) | CN1220939C (zh) |
AT (1) | ATE252742T1 (zh) |
AU (1) | AU769363B2 (zh) |
CA (1) | CA2382003C (zh) |
DE (1) | DE60006141T2 (zh) |
ES (1) | ES2209969T3 (zh) |
FR (1) | FR2797963B1 (zh) |
WO (1) | WO2001014958A2 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063371A (zh) * | 2010-12-29 | 2011-05-18 | 大唐微电子技术有限公司 | 验证芯片处理器逻辑设计的方法和系统 |
CN101321353B (zh) * | 2008-07-14 | 2011-08-24 | 中兴通讯股份有限公司 | 一种支持Java应用下载空间检测的方法 |
CN109968359A (zh) * | 2019-03-28 | 2019-07-05 | 台州九牛慧联机器人技术有限公司 | 一种工业机器人控制系统 |
CN111679945A (zh) * | 2020-06-12 | 2020-09-18 | 地平线(上海)人工智能技术有限公司 | 处理器的检测方法、装置及计算机可读存储介质 |
CN113127285A (zh) * | 2021-06-17 | 2021-07-16 | 北京燧原智能科技有限公司 | 一种错误数据调试方法、装置、芯片及计算机设备 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092147A (en) | 1997-04-15 | 2000-07-18 | Sun Microsystems, Inc. | Virtual machine with securely distributed bytecode verification |
US6363523B1 (en) | 1999-11-12 | 2002-03-26 | Sun Microsystems, Inc. | Optimization of N-base typed arithmetic expressions |
US7207037B2 (en) | 1999-11-12 | 2007-04-17 | Sun Microsystems, Inc. | Overflow sensitive arithmetic instruction optimization using chaining |
US8453133B2 (en) | 1999-11-12 | 2013-05-28 | Oracle America, Inc. | Optimization of N-base typed arithmetic instructions via rework |
US7010786B2 (en) | 1999-11-12 | 2006-03-07 | Sun Microsystems, Inc. | Predictive arithmetic overflow detection |
US7158993B1 (en) | 1999-11-12 | 2007-01-02 | Sun Microsystems, Inc. | API representation enabling submerged hierarchy |
US7107581B2 (en) | 1999-11-12 | 2006-09-12 | Sun Microsystems, Inc. | Overflow predictive arithmetic instruction optimization using chaining |
US6883163B1 (en) | 2000-04-28 | 2005-04-19 | Sun Microsystems, Inc. | Populating resource-constrained devices with content verified using API definitions |
US6986132B1 (en) | 2000-04-28 | 2006-01-10 | Sun Microsytems, Inc. | Remote incremental program binary compatibility verification using API definitions |
US6651186B1 (en) | 2000-04-28 | 2003-11-18 | Sun Microsystems, Inc. | Remote incremental program verification using API definitions |
US6981245B1 (en) | 2000-09-14 | 2005-12-27 | Sun Microsystems, Inc. | Populating binary compatible resource-constrained devices with content verified using API definitions |
US20100174717A1 (en) * | 2002-02-28 | 2010-07-08 | Olivier Fambon | Interative serialisation procedure for structured software objects |
FR2840084A1 (fr) * | 2002-05-27 | 2003-11-28 | Gemplus Card Int | Procede de verification de codes pour microcircuits a ressources limitees |
US20040003380A1 (en) * | 2002-06-26 | 2004-01-01 | Microsoft Corporation | Single pass intermediate language verification algorithm |
US20040163087A1 (en) * | 2003-02-14 | 2004-08-19 | Carl Sandland | Computer program code and method for delivering external data to a process running on a virtual machine |
AU2004237808B2 (en) * | 2003-02-14 | 2010-08-12 | Actividentity (Australia) Pty Ltd | System and method for delivering external data to a process running on a virtual machine |
FR2853741B1 (fr) * | 2003-04-14 | 2005-09-09 | Gemplus Card Int | Procede de gestion d'un code executable telecharge dans un systeme embarque reprogrammable |
US7574695B2 (en) * | 2003-12-23 | 2009-08-11 | Ntt Docomo, Inc. | Performing checks on the resource usage of computer programs |
US7908653B2 (en) * | 2004-06-29 | 2011-03-15 | Intel Corporation | Method of improving computer security through sandboxing |
FR2884994A1 (fr) | 2005-04-22 | 2006-10-27 | Gemplus Sa | Procede de verification de pseudo-code charge dans un systeme embarque, notamment une carte a puce |
DE102005026384A1 (de) * | 2005-06-08 | 2006-12-14 | Giesecke & Devrient Gmbh | Validierung eines zur nativen Ausführung durch einen Prozessor eines Datenträgers vorgesehenen Programms |
CN102479155B (zh) * | 2010-11-30 | 2014-07-02 | 国际商业机器公司 | 用于网络应用服务器系统的内存过载管理的方法和系统 |
CN102591696A (zh) * | 2011-01-14 | 2012-07-18 | 中国科学院软件研究所 | 一种手机软件行为数据提取方法及系统 |
US8874688B1 (en) * | 2012-01-11 | 2014-10-28 | Amazon Technologies, Inc. | Securing execution of customer-supplied network page generation code |
US8819477B1 (en) | 2012-02-01 | 2014-08-26 | Amazon Technologies, Inc. | Error handling in a network page generation environment |
US9800455B1 (en) | 2012-02-08 | 2017-10-24 | Amazon Technologies, Inc. | Log monitoring system |
KR101412576B1 (ko) * | 2012-06-27 | 2014-06-27 | 한국과학기술원 | 가상 보드 플랫폼, 시스템-온-칩 시뮬레이션 장치, 시스템-온-칩 시뮬레이션 방법 및 시스템-온-칩 검증 방법 |
US10089089B2 (en) * | 2015-06-03 | 2018-10-02 | The Mathworks, Inc. | Data type reassignment |
US10409600B1 (en) | 2016-01-25 | 2019-09-10 | Apple Inc. | Return-oriented programming (ROP)/jump oriented programming (JOP) attack protection |
US9977725B2 (en) * | 2016-08-26 | 2018-05-22 | Cisco Technology, Inc. | Automatic classification and parallel processing of untested code in a protected runtime environment |
EP3435270B1 (de) * | 2017-07-27 | 2020-09-23 | Siemens Aktiengesellschaft | Vorrichtung und verfahren zum kryptographisch geschützten betrieb einer virtuellen maschine |
CN112905196A (zh) * | 2019-11-19 | 2021-06-04 | 广州汽车集团股份有限公司 | 软件更新的方法、装置及存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4571678A (en) * | 1982-11-05 | 1986-02-18 | International Business Machines Corporation | Register allocation and spilling via graph coloring |
US5249295A (en) | 1990-06-20 | 1993-09-28 | Rice University | Digital computer register allocation and code spilling using interference graph coloring |
US5276881A (en) * | 1990-06-25 | 1994-01-04 | Hewlett-Packard Company | ANDF producer using the HPcode-Plus compiler intermediate language |
US5694539A (en) * | 1994-08-10 | 1997-12-02 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US5668999A (en) * | 1994-12-20 | 1997-09-16 | Sun Microsystems, Inc. | System and method for pre-verification of stack usage in bytecode program loops |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
US6275976B1 (en) * | 1996-03-15 | 2001-08-14 | Joseph M. Scandura | Automated method for building and maintaining software including methods for verifying that systems are internally consistent and correct relative to their specifications |
PT932865E (pt) * | 1996-10-25 | 2002-12-31 | Schlumberger Systems & Service | Utilizacao de linguagem de programacao de nivel elevado com um microcontrolador |
US6128774A (en) * | 1997-10-28 | 2000-10-03 | Necula; George C. | Safe to execute verification of software |
EP1071991A4 (en) * | 1997-12-11 | 2002-03-13 | Digits Corp | OBJECT CODE ANALYSIS AND IMPROVEMENT SYSTEM AND METHOD |
US6223337B1 (en) * | 1997-12-12 | 2001-04-24 | Hewlett-Packard Company | Random test generation for compiler optimization |
US6195774B1 (en) * | 1998-08-13 | 2001-02-27 | Xilinx, Inc. | Boundary-scan method using object-oriented programming language |
-
1999
- 1999-08-23 FR FR9910697A patent/FR2797963B1/fr not_active Expired - Fee Related
-
2000
- 2000-08-21 JP JP2001519256A patent/JP2003507811A/ja active Pending
- 2000-08-21 DE DE60006141T patent/DE60006141T2/de not_active Expired - Lifetime
- 2000-08-21 US US10/069,670 patent/US7720939B1/en not_active Expired - Fee Related
- 2000-08-21 CN CN00811932.5A patent/CN1220939C/zh not_active Expired - Fee Related
- 2000-08-21 ES ES00958714T patent/ES2209969T3/es not_active Expired - Lifetime
- 2000-08-21 EP EP00958714A patent/EP1212678B1/fr not_active Expired - Lifetime
- 2000-08-21 AU AU70150/00A patent/AU769363B2/en not_active Ceased
- 2000-08-21 CA CA002382003A patent/CA2382003C/fr not_active Expired - Fee Related
- 2000-08-21 WO PCT/FR2000/002349 patent/WO2001014958A2/fr active IP Right Grant
- 2000-08-21 AT AT00958714T patent/ATE252742T1/de not_active IP Right Cessation
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101321353B (zh) * | 2008-07-14 | 2011-08-24 | 中兴通讯股份有限公司 | 一种支持Java应用下载空间检测的方法 |
CN102063371A (zh) * | 2010-12-29 | 2011-05-18 | 大唐微电子技术有限公司 | 验证芯片处理器逻辑设计的方法和系统 |
CN109968359A (zh) * | 2019-03-28 | 2019-07-05 | 台州九牛慧联机器人技术有限公司 | 一种工业机器人控制系统 |
CN111679945A (zh) * | 2020-06-12 | 2020-09-18 | 地平线(上海)人工智能技术有限公司 | 处理器的检测方法、装置及计算机可读存储介质 |
CN113127285A (zh) * | 2021-06-17 | 2021-07-16 | 北京燧原智能科技有限公司 | 一种错误数据调试方法、装置、芯片及计算机设备 |
CN113127285B (zh) * | 2021-06-17 | 2021-10-08 | 北京燧原智能科技有限公司 | 一种错误数据调试方法、装置、芯片及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
EP1212678A2 (fr) | 2002-06-12 |
ES2209969T3 (es) | 2004-07-01 |
CN1220939C (zh) | 2005-09-28 |
CA2382003C (fr) | 2008-12-23 |
WO2001014958A2 (fr) | 2001-03-01 |
DE60006141D1 (de) | 2003-11-27 |
EP1212678B1 (fr) | 2003-10-22 |
JP2003507811A (ja) | 2003-02-25 |
US7720939B1 (en) | 2010-05-18 |
AU769363B2 (en) | 2004-01-22 |
CA2382003A1 (fr) | 2001-03-01 |
AU7015000A (en) | 2001-03-19 |
ATE252742T1 (de) | 2003-11-15 |
FR2797963A1 (fr) | 2001-03-02 |
WO2001014958A3 (fr) | 2001-12-13 |
DE60006141T2 (de) | 2004-08-26 |
FR2797963B1 (fr) | 2002-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1220939C (zh) | 管理协议,验证和转换下载程序片断的方法及对应的系统 | |
CN100351788C (zh) | 嵌入式设备的驱动方法 | |
CN100347731C (zh) | 半导体存储卡及对其进行控制的程序 | |
CN1183449C (zh) | 用微控制器使用高级程序设计语言 | |
CN1130627C (zh) | 一种以Java虚拟机实现的信息处理设备 | |
CN1111787C (zh) | 使面向目标的应用程序与过程操作系统接口的方法与装置 | |
CN1423232A (zh) | 可搭载多个卡管理程序的ic卡 | |
CN1759376A (zh) | 用于加载到一装置上的程序数据的排序 | |
CN1208720C (zh) | 用于对非置信模块进行可信验证的方法及装置 | |
CN1154071C (zh) | 数据处理单元及包括该数据处理单元的数据交换系统 | |
TW509871B (en) | Method for identifying sealed calls in Java packages whose targets are guaranteed to belong to the same package | |
CN1116881A (zh) | 面向目标的主机系统 | |
CN1203404C (zh) | 具有逐模块验证的完全迟缓链接 | |
CN1754151A (zh) | Java中的可变性分析 | |
CN1795434A (zh) | 程序执行控制设备,程序执行控制方法,控制程序和记录介质 | |
CN1637710A (zh) | 用于调度数据处理基础结构中工作单元执行的方法和系统 | |
CN1410876A (zh) | 微处理机 | |
CN1298512A (zh) | 基于堆栈的访问控制 | |
CN1906576A (zh) | 分布软件应用的方法与设备 | |
CN1630849A (zh) | 安全执行模式下信任客户使用安全核心系统 | |
CN1866260A (zh) | 向用户可操作设备提供程序的方法和系统 | |
CN1648874A (zh) | 一种银行主机运行压力测试系统 | |
CN1568458A (zh) | 无需修改现有代码即可增加新软件特征的方法 | |
CN1619455A (zh) | 采用文本屏障在小型注脚设备上实施安全的技术 | |
CN1758221A (zh) | 程序处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20050928 Termination date: 20130821 |