一种Java卡虚拟机中本地函数的调用方法及装置的制造方法_2

文档序号:9288343阅读:来源:国知局
evirtual/invokespecial/invokestatic)、函数(普通函数 / 本地函数)、函数的位 置。
[0059] 所述判断模块,用于对已生成的Java卡汇编文件中是否含有本地函数进行判断。 Java卡虚拟机中本地函数是指用native关键字修饰的函数,因此,所述判断模块通过判断 所述Java卡汇编文件中的函数是否已用native关键字进行声明,确定所述Java卡汇编文 件中是否含有本地函数。具体地说,如果所述函数已用native关键字进行声明,那么将所 述函数确定为本地函数,否则将所述函数确定为普通函数。
[0060] 所述处理模块,若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原 有链接关系修改为能够直接执行所述本地函数的本地函数链接关系。具体地说,所述处理 模块将所述普通指令替换为用来直接调用所述本地函数的专用指令,然后在所述专用指令 之后,加上用来指示所述本地函数的位置的索引值。例如在所述Java卡汇编文件中有条普 通指令,其调用本地函数Y,具体为:invokespecial+本地函数Y。在经过链接过程后,将在 链接文件中形成所述本地函数Y的本地函数链接关系,具体为invokenative+m。其中,m是 所述本地函数Y的索引值,其值的多少视链接时本地函数Y的位置而定。
[0061] 所述调用模块,用于利用所述本地函数链接关系,调用所述本地函数。具体地说, 所述调用模块根据所述本地函数链接关系中的专用指令,找到所述索引值对应的本地函数 并直接执行。例如,当使用invokenative调用本地函数Y时,利用所述索引值m,找到本地 函数Y,然后直接执行所述本地函数Y。
[0062] 本发明所述装置与现有技术相比,具有执行效率更高,存储空间更节省等优点。
[0063] 本发明将本地函数的调用与Java卡普通函数的调用进行区分,根据本地函数的 特点,将本地函数调用进行了指令扩展。在生成Java代码时,将本地函数的调用过程直接 用新指令进行了替换。图4是本发明实施例提供的掩膜文件生成过程示意图,如图4所示, 具体执行流程如下:
[0064] 步骤一:编写java代码。
[0065] 编写含有本地函数的java代码,此过程如普通Java语言的编程没有区别,本地函 数用native关键字进行声明。
[0066] 具体地,在编辑器中编写".java"源文件,然后在源文件里编写类和方法(即函数) 代码。示例如下:
[0067] // 源文件:HelloWorld.java
[0068]publicclassHellofforld
[0069] {
[0070]//native方法
[0071]publicnativevoidmethodNativel();
[0072] //普通java方法
[0073]publicvoidmethodNormall();
[0074] }
[0075] 所述methodNativel用native关键字修饰,为native方法(即本地函数), methodNormall无native关键字修饰,为普通java方法(即普通函数)。
[0076] 步骤二:编译java代码。
[0077] 用通用java语言编译器对java源文件进行编译,生成class文件。所述class 文件用于存储java虚拟机可执行的java字节码。
[0078]Java语言编译器不对本地函数和普通函数进行区别,都生成class文件。
[0079] 步骤三:生成jca文件。
[0080] 利用converter工具,将步骤二中生成的class文件进行转换,生成jca文件。所 述jca文件是java卡汇编文件,用于存放java卡可执行的字节码信息,包括所述jca文件 的包AID、导入其他的包信息、常量池信息,类信息及方法信息。所述jca文件是CAP文件的 另一种表现形式,cap文件是java卡应用文件。
[0081] 步骤四:链接jca文件。
[0082] 将输入的所有jca文件进行链接,输出掩膜文件。在此链接过程中,将普通java 函数的链接与本地函数的链接进行区分,把本地函数链接成新指令加本地函数索引值的形 式。具体链接过程如下:
[0083] 1、解析jca文件,分析并记录invokevirtual+ 函数,invokespecial+ 函数, invokestatic+函数在jca文件中的位置信息;
[0084] 2、解析上述三条指令后跟的方法是否为本地方法(本地方法在jca文件中以 native关键字进行区分),并记录其位置信息。
[0085] 3、将上述记录的调用本地函数的指令invokevirtual/invokespecial/ invokestatic用自定义的invokenative专用指令进行替换。例如:
[0086] 在jca文件中有条指令:invokestatic本地方法Z ;
[0087] 在经过上述的链接过程后,将在链接文件中形成:invokenative5;
[0088] 其中,5是上面本地方法Z的索引值。
[0089] 图5是本发明实施例提供的本地函数调用流程图,如图5所示,步骤包括:
[0090] 步骤一 :Java卡虚拟机调用本地函数。
[0091] 步骤二:读取所述本地函数的参数,即本地函数的索引值。
[0092] 步骤三:根据所述参数直接执行本地函数。
[0093] 例如本地函数X,其索引值为n,则解析invokenative+n时,取出函数索引n,再以 n为参数调用本地函数X。具体实例如下:
[0094]
[0095] 综上所述,本发明具有以下技术效果:
[0096] 1、本发明应用于Java卡虚拟机系统的研发,Java卡虚拟机是Java卡技术的核心, 它是一种解释执行的虚拟机技术,其性能指标是Java卡虚拟机的重要指标之一,本发明对 于提高Java卡虚拟机的性能具有重要的实用价值;
[0097] 2、本发明也适用于除Java卡虚拟机之外的其他虚拟机技术,只要该虚拟机技术 具有本地函数的调用需求,且本地函数调用没有采用专用指令进行处理的情况。
[0098] 另外,本方法不需要存储本地函数头信息
[0099] 尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员 可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为 落入本发明的保护范围。
【主权项】
1. 一种Java卡虚拟机中本地函数的调用方法,其特征在于,包括: 对已生成的Java卡汇编文件中是否含有本地函数进行判断; 若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原有链接关系修改为 能够直接执行所述本地函数的本地函数链接关系; 利用所述本地函数链接关系,调用所述本地函数。2. 根据权利要求1所述的方法,其特征在于,在所述的对已生成的Java卡汇编文件中 是否含有本地函数进行判断的步骤之前,还包括: 通过对所述Java卡汇编文件进行解析,得到普通指令、函数、函数的位置。3. 根据权利要求1或2所述的方法,其特征在于,所述的对已生成的Java卡汇编文件 中是否含有本地函数进行判断的步骤具体为: 判断所述Java卡汇编文件中的函数是否已用native关键字进行声明; 若所述函数已用native关键字进行声明,则将所述函数确定为本地函数,否则将所述 函数确定为普通函数。4. 根据权利要求3所述的方法,其特征在于,所述的将所述本地函数的原有链接关系 修改为能够直接执行所述本地函数的本地函数链接关系的步骤具体为: 将所述普通指令替换为用来直接调用所述本地函数的专用指令; 在所述专用指令之后,添加用来指示所述本地函数的位置的索引值。5. 根据权利要求4所述的方法,所述的利用所述本地函数链接关系,调用所述本地函 数的步骤具体为: 根据所述本地函数链接关系中的专用指令,找到所述索引值对应的本地函数并直接执 行。6. -种Java卡虚拟机中本地函数的调用装置,其特征在于,包括: 判断模块,用于对已生成的Java卡汇编文件中是否含有本地函数进行判断; 处理模块,若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原有链接关 系修改为能够直接执行所述本地函数的本地函数链接关系; 调用模块,用于利用所述本地函数链接关系,调用所述本地函数。7. 根据权利要求6所述的装置,其特征在于,还包括: 解析模块,用于通过对所述Java卡汇编文件进行解析,得到普通指令、函数、函数的位 置。8. 根据权利要求6或7所述的装置,其特征在于,所述判断模块判断所述Java卡汇编 文件中的函数是否已用native关键字进行声明,若所述函数已用native关键字进行声明, 则将所述函数确定为本地函数,否则将所述函数确定为普通函数。9. 根据权利要求8所述的装置,其特征在于,所述处理模块将所述普通指令替换为用 来直接调用所述本地函数的专用指令,并在所述专用指令之后,添加用来指示所述本地函 数的位置的索引值。10. 根据权利要求9所述的装置,其特征在于,所述调用模块根据所述本地函数链接关 系中的专用指令,找到所述索引值对应的本地函数并直接执行。
【专利摘要】本发明公开了一种Java卡虚拟机中本地函数的调用方法及装置,涉及Java卡虚拟机系统,所述方法包括:对已生成的Java卡汇编文件中是否含有本地函数进行判断;若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原有链接关系修改为能够直接执行所述本地函数的本地函数链接关系;利用所述本地函数链接关系,调用所述本地函数。本发明不仅可以提高Java卡虚拟机执行本地函数的效率,而且还可以节省Java卡的存储空间。
【IPC分类】G06F9/45, G06F9/455
【公开号】CN105005497
【申请号】CN201410156084
【发明人】梁青, 王玉忠, 杨向军, 张一峰, 唐守勤, 张伟, 刘彦顺
【申请人】中钞信用卡产业发展有限公司
【公开日】2015年10月28日
【申请日】2014年4月18日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1