公开/公告号CN112306632A
专利类型发明专利
公开/公告日2021-02-02
原文格式PDF
申请/专利权人 成都融微软件服务有限公司;
申请/专利号CN202011128496.2
发明设计人 张麒;
申请日2020-10-21
分类号G06F9/455(20060101);G06F9/448(20180101);
代理机构11595 北京科石知识产权代理有限公司;
代理人徐红岗
地址 610041 四川省成都市高新区云华路333号9栋
入库时间 2023-06-19 09:58:59
技术领域
本发明涉及嵌入式计算机技术领域,特别涉及一种Java Card虚拟机执行引擎及执行方法。
背景技术
Java Card虚拟机系统是安全元件(Security Element)的开放应用平台,它能够使得安全模块,譬如智能卡或者其他的防篡改安全芯片,支持Java技术的各类应用,它提供了在单个资源受限的设备上存储和更新多个应用程序的安全且共通的执行平台。在PC机上由JAVA语言编写的Applet的函数,通过编译器编译成字节码,然后字节码下载到安全元件中,在需要执行时由执行引擎执行。
在当前的国内环境中,Java Card技术的供应商相对较少,Java Card技术核心之一的Java Card虚拟机执行引擎的实现方式,更多的是采用在安全芯片和智能卡原有的Native COS上直接对字节码进行解释执行或采用类似的方式,此类方式实现的Java Card虚拟机执行引擎执行效率较低,可移植和可扩展性较差。
发明内容
本公开提供一种Java Card虚拟机执行引擎,提升其解释执行的效率及其可移植性和可扩展性,降低与Java Card虚拟机系统中其他组成部份的功能重合度和耦合度,尤其适用于各类安全芯片和密码卡等。
本公开提供的Java Card虚拟机执行引擎,包括:
字节码指令模板,被配置为与字节码在Java Card虚拟机规范中的值相对应的汇编指令集合;
字节码解释器,被配置为从运行环境中获取待执行字节码指令,并通过查询所述字节码指令模板,将待执行字节码指令解释为对应的汇编指令并执行,以及将执行结果返回到运行环境。
进一步地,所述字节码指令模板以列表方式预置在安全元件的非失易性存储器中,当字节码指令需要解释执行时,通过查表直接使用。
进一步地,所述执行引擎在获取待执行字节码指令的同时获取栈帧地址及大小,然后根据所述栈帧地址和大小,进行数据的操作,而不再对硬件内存进行分配。
进一步地,所述执行引擎对来自多个不同Applet的字节码指令进行分时运行。
进一步地,对于分时运行的多个不同Applet的字节码指令,所述执行引擎根据获取的栈帧地址,动态切换需要操作的虚拟机栈帧,而对字节码指令的解释执行则不考虑其来自哪个Applet。
进一步地,所述执行引擎具有多个所述字节码指令模板,用于支持底层不同种类的硬件。
进一步地,所述执行引擎支持不同种类的解释性语言。
本公开还提供了一种应用以上执行引擎的Java Card虚拟机执行方法,包括以下步骤:
从运行环境中获取待执行字节码指令及相关信息,包括操作数、栈帧地址及大小;
查询所述字节码指令模板,将所述待执行字节码指令解释为对应的汇编指令并执行;
将执行结果返回到运行时环境。
进一步地,执行过程中根据从运行环境中获取的栈帧地址和大小,直接对栈帧内的数据和执行过程中产生的数据进行操作,而不再对硬件内存进行分配。
进一步地,其中所述查询所述字节码指令模板,将所述待执行字节码指令解释为对应的汇编指令并执行的步骤包括:
判断是否从运行环境获取了新的栈帧地址,如果是,则采用所述新的栈帧地址执行后续字节码指令;
判断所述待执行字节码指令是否是返回指令,如果是,则返回执行结果,并获取与跳转之前的栈帧地址之偏移,如果无偏移,则表明当前无Applet中的函数正在执行;
查询所述字节码指令模板,获取所述待执行字节码指令对应的汇编指令并执行。
进一步地,对来自多个不同Applet的字节码指令进行分时运行。
本公开提供的Java Card虚拟机执行引擎及执行方法,通过将字节码和对应的汇编语言指令事先存入模板,执行引擎查询该模板,即可对字节码指令进行解释执行,不仅提高程序的执行效率,而且能够通过配置多种此类模板适应不同的底层硬件,可以大大提升可移植性和可扩展性;进而,在执行字节码时直接访问运行环境传来的栈帧而不再对内存进行分配管理,进一步提升运行效率,并能实现对多个Applet的分时运行,简化了执行引擎的实现难度,对资源有限的嵌入式系统非常有利。
与现有技术相比,本公开的有益效果是:①高度简化:系统资源占用少,字节码执行效率高,极为适合安全芯片和密码卡等嵌入式设备;②支持多Applet中字节码的分时独立运行:各Applet具有独立的栈帧空间,不同的Applet的字节码分时由执行引擎解释执行;③可扩展:通过增加对针对不同的解释性语言的中间码、字节码的汇编代码模板,能够实现对其他解释性语言的支持;④可移植:该执行引擎的实现高度简化,耦合度低,通过与硬件抽象层的接口,可以快速的移植到其他安全芯片或安全模块上。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例方式中,相同的参考标号通常代表相同部件。
图1显示示例性Java Card虚拟机执行引擎实施例的组成示意图;
图2显示示例性Java Card虚拟机执行方法实施例工作流程图;
图3为栈帧数据组成示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
如附图1所示,示例性的Java Card虚拟机执行引擎实施例包括:
字节码指令模板,与字节码在Java Card虚拟机规范中的值相对应的汇编指令集合;
字节码解释器,从Java Card虚拟机运行环境中获取待执行字节码指令,通过查询字节码指令模板,将待执行字节码指令解释为实际要执行的汇编指令并执行,然后将执行结果返回到运行环境。
其中的字节码指令模板为根据字节码在Java Card虚拟机规范中的值,定义的宏或者枚举值,并根据每条指令的作用形成的对应的汇编指令集合。
作为优选方案,字节码指令模板预置在安全元件的非失易性存储器中,并以列表的方式提供给所述字节码解释器,列表中对应的每一项元素即为字节码所对应的汇编指令数据。当字节码指令需要解释执行时通过查表方式直接使用,能够提高指令执行的速度。
作为优选方案,示例性执行引擎在获取待执行字节码指令的同时获取栈帧地址及大小,然后根据所述栈帧地址和大小,进行数据的操作,而不再对硬件内存进行分配。
执行引擎不涉及硬件的内存分配,只根据获取到的函数栈帧地址和大小,对其中的数据和函数执行时所产生的数据进行操作,能够简化执行引擎的功能,提升其运行效率,并使其具备更好的移植性。
作为优选方案,示例性执行引擎对来自多个不同Applet的字节码指令进行分时运行。
作为分时运行的优选方案,执行引擎根据从运行环境中获取的栈帧地址,动态切换需要操作的虚拟机栈帧,而对字节码指令的解释执行则不考虑其来自哪个Applet。
作为优选方案,示例性执行引擎具有多个字节码指令模板,用于支持底层不同种类的硬件。这些模板中的汇编语言指令数组形成列表,根据字节码的值查表使用,使同一Applet能够在不同的硬件平台运行。
作为优选方案,示例性执行引擎通过增加对针对不同的解释性语言的中间码、字节码的汇编代码模板,能够支持不同种类的其他解释性语言。
示例性的采用以上Java Card虚拟机执行引擎的执行方法实施例,包括以下步骤:
从Java Card虚拟机运行环境中获取待执行字节码指令及相关信息,包括操作数、栈帧地址及大小;
查询所述字节码指令模板,将所述待执行字节码指令解释为对应的汇编指令并执行;
将执行结果返回到运行时环境。
作为优选方案,示例性实施例中,根据从运行环境中获取的栈帧地址和大小,直接进行数据的操作,而不再对硬件内存进行分配。
作为优选方案,所述查询所述字节码指令模板,将所述待执行字节码指令解释为对应的汇编指令并执行的步骤包括:
判断是否从运行环境获取了新的栈帧地址,如果是,则采用所述新的栈帧地址执行后续字节码指令;
判断所述待执行字节码指令是否是返回指令,如果是,则返回执行结果,并获取与跳转之前栈帧地址的偏移,如果没有,则表明当前无Applet中的函数正在执行;
查询所述字节码指令模板,获取所述待执行字节码指令对应的汇编指令并执行。
作为优选方案,在示例性实施例中,对来自多个不同Applet的字节码指令进行分时运行。
分时运行时,执行引擎根据从运行环境中获取的栈帧地址,动态切换需要操作的虚拟机栈帧,而对字节码指令的解释执行则不考虑其来自哪个Applet。
应用示例:
一个具体的工作流程如附图2所示,具体描述如下:
S101:等待、获取来自Java Card虚拟机运行环境的数据,包括将要执行的AppletJava方法的信息——含Java方法的起始地址和大小,传递给执行引擎;以及当前要执行的字节码指令;
S102:根据运行环境是否传入了新的栈帧地址,判断是否需要栈帧地址初始化,如果是,则采用所述新的栈帧地址执行后续字节码指令;
S103:判断字节码指令是否是返回指令,如果是则返回执行结果,并获取与跳转之前的栈帧地址之偏移,如果偏移为0,则表明当前无Applet中的函数正在执行;
S104:查询字节码指令模板,获取待执行字节码指令对应的汇编指令并执行;
S105:返回执行结果;
S106:计算新的栈帧地址并开始后续字节码指令的执行。
可见,根据示例性实施例的JC虚拟机执行引擎和执行方法,可以得到一种简单、高效、可移植性和可扩展性良好的JavaCard虚拟机执行引擎。
上述技术方案只是本发明的示例性实施例,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施例所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。
机译: 具有JAVA虚拟机的装置和从JAVA字节码到具有JAVA虚拟机的本机代码的选择性编译方法
机译: Java虚拟机调度的执行方法及操作系统调度
机译: JAVA虚拟机阵列访问的集成字节码执行方法