[发明专利]一种Java卡虚拟机中本地函数的调用方法及装置在审
申请号: | 201410156084.8 | 申请日: | 2014-04-18 |
公开(公告)号: | CN105005497A | 公开(公告)日: | 2015-10-28 |
发明(设计)人: | 梁青;王玉忠;杨向军;张一峰;唐守勤;张伟;刘彦顺 | 申请(专利权)人: | 中钞信用卡产业发展有限公司 |
主分类号: | G06F9/455 | 分类号: | G06F9/455;G06F9/45 |
代理公司: | 北京元本知识产权代理事务所 11308 | 代理人: | 秦力军 |
地址: | 102628 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 java 虚拟机 本地 函数 调用 方法 装置 | ||
技术领域
本发明涉及Java卡虚拟机系统,特别涉及一种Java卡虚拟机中本地函数的调用方法及相关的装置。
背景技术
Java卡虚拟机中本地函数是指用native关键字修饰的函数,其实现不采用Java代码语言。由于Java卡虚拟机是一个虚拟的计算机,其具有独立的指令集和堆栈,但只依靠其自身的指令集系统,无法直接访问智能卡芯片的硬件资源,为此,Java卡虚拟机使用了本地函数来扩展其功能。
Java卡虚拟机对于本地函数的调用与其他函数(以下称为普通函数)没有区别,在Java卡虚拟机规范中涉及函数的调用指令共有四条:invokestatic、invokespecial、invokevirtual、invokeinterface。对于本地函数的调用,同样需要这四条调用指令(以下称为普通指令)完成。其中,invokestatic指令用于调用Java卡虚拟机中的静态函数,invokespecial指令用于调用父类函数、私有函数和实例初始化函数,invokevirtual指令用于调用实例函数,invokeinterface用于调用接口函数。
图1是目前本地函数的执行过程框图,如图1所示,上述四条调用指令都带一个调用参数,这个参数代表Java卡中常量池信息,而常量池信息用于定位目标函数的位置信息,在Java卡虚拟机执行过程中,根据常量池信息定位到目标函数的位置,然后根据目标函数的内容进行执行。该技术应用于Java卡虚拟机系统的研发阶段,对Java卡虚拟机系统中的函数调用方式的处理。
在Java卡虚拟机技术规范中,Java卡本地函数和普通函数没有区别,都需要根据调用指令的参数值,去定位参数指定的常量池信息,再根据常量池信息定位目标函数的位置,进而执行目标函数的内容。这必然导致本地函数执行效率的低下。
发明内容
本发明的目的在于提供一种Java卡虚拟机中本地函数的调用方法及装置,能更好地解决本地函数执行效率低的问题。
根据本发明的一个方面,提供了一种Java卡虚拟机中本地函数的调用方法,包括:
对已生成的Java卡汇编文件中是否含有本地函数进行判断;
若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原有链接关系修改为能够直接执行所述本地函数的本地函数链接关系;
利用所述本地函数链接关系,调用所述本地函数。
优选地,在所述的对已生成的Java卡汇编文件中是否含有本地函数进行判断的步骤之前,还包括:
通过对所述Java卡汇编文件进行解析,得到普通指令、函数、函数的位置。
优选地,所述的对已生成的Java卡汇编文件中是否含有本地函数进行判断的步骤具体为:
判断所述Java卡汇编文件中的函数是否已用native关键字进行声明;
若所述函数已用native关键字进行声明,则将所述函数确定为本地函数,否则将所述函数确定为普通函数。
优选地,所述的将所述本地函数的原有链接关系修改为能够直接执行所述本地函数的本地函数链接关系的步骤具体为:
将所述普通指令替换为用来直接调用所述本地函数的专用指令;
在所述专用指令之后,添加用来指示所述本地函数的位置的索引值。
优选地,所述的利用所述本地函数链接关系,调用所述本地函数的步骤具体为:
根据所述本地函数链接关系中的专用指令,找到所述索引值对应的本地函数并直接执行。
根据本发明的另一方面,提供了一种Java卡虚拟机中本地函数的调用装置,包括:
判断模块,用于对已生成的Java卡汇编文件中是否含有本地函数进行判断;
处理模块,若所述Java卡汇编文件中含有本地函数,则将所述本地函数的原有链接关系修改为能够直接执行所述本地函数的本地函数链接关系;
调用模块,用于利用所述本地函数链接关系,调用所述本地函数。
优选地,还包括:
解析模块,用于通过对所述Java卡汇编文件进行解析,得到普通指令、函数、函数的位置。
优选地,所述判断模块判断所述Java卡汇编文件中的函数是否已用native关键字进行声明,若所述函数已用native关键字进行声明,则将所述函数确定为本地函数,否则将所述函数确定为普通函数。
优选地,所述处理模块将所述普通指令替换为用来直接调用所述本地函数的专用指令,并在所述专用指令之后,添加用来指示所述本地函数的位置的索引值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中钞信用卡产业发展有限公司,未经中钞信用卡产业发展有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410156084.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种远程过程调用方法、服务端、客户端
- 下一篇:一种学习娱乐方法和装置