[发明专利]一种基于标准工具生成Java Card程序库目标代码的方法和设备无效
申请号: | 200810178335.7 | 申请日: | 2008-11-28 |
公开(公告)号: | CN101751247A | 公开(公告)日: | 2010-06-23 |
发明(设计)人: | 刘子瑛;李丞倍;金亨一;罗栋元;李相研 | 申请(专利权)人: | 爱思开电讯投资(中国)有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 永新专利商标代理有限公司 72002 | 代理人: | 张扬 |
地址: | 100084 北京市海淀区中关村*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 标准 工具 生成 java card 程序库 目标 代码 方法 设备 | ||
技术领域
本发明涉及Java Card开发领域,更具体地,涉及基于Sun标准工具生成Java Card程序库目标代码的方法和设备。
背景技术
Java Card技术是用于智能卡的Java技术,是用途广泛的智能卡通用编程平台。Java作为一种基于虚拟机的编程平台,Java源代码首先编译成字节代码,然后运行在解释字节代码的虚拟机上。由于不产生本地代码,所以Java程序如果想调用本地函数的话,需要通过专门的Java本地接口(JNI,Java Native Interface)来实现。对于Java Card来讲,出于安全性的考虑,不允许Java Card的小应用程序(Applet)来访问本地接口,但是烧制在ROM或flash中的运行库可以访问本地代码,例如通过Sun公司的工具来访问本地代码。实际上,Java Card程序库通常都包含对本地函数的调用。
图1示出了利用Sun公司的标准工具包将Java Card程序库源代码(.java)编译成Java Card程序库目标代码的过程。如图所示,该标准工具包将Java Card程序库源代码(.java)转换成Java Card程序库字节代码(.class),再编译成汇编语言源代码(.jca),再通过汇编器转换成C语言程序源代码(.c),最后将该C语言源代码与卡操作系统(COS)、虚拟机等代码一起编译链接成目标代码写到智能卡的ROM或flash中。
上述利用Sun公司的标准工具生成Java Card程序库目标代码的过程具有缺点。首先,Java Card汇编语言是Sun公司私有的没有规范的语言,Sun公司不提供公开的规范来规定该语言的具体语法,只提供公开的工具开发包来将字节代码转换成Java Card汇编代码。这就导致了如果这种语言有缺陷或错误,没有有效的办法来修正它,而且这种修正也没有办法被业界所接受。其次,Java Card汇编语言源代码(.jca)与对应的Java Card字节代码(.class)相比,可能会丢失信息。例如,在异常处理者信息表(exceptionhandler info)中有一位用于优化的停止位(stop bit),当虚拟机发现停止位后,它会中止异常处理表的查找,这样就可以不用遍历所有的异常处理表,而达到优化的效果。停止位在异常处理者信息表中占用一个比特,与异常处理表中的异常长度信息共享两个字节。但是在Java Card汇编语言中,是不存储这个长度信息的,这是因为在Java Card汇编语言中记录的是起始地址和结束地址,就没有必要存储这个长度。所以这个优化位就丢失掉了,在汇编器汇编代码时,也就没有办法将其复原。这个停止位是在Java语言字节代码规范和Java Card虚拟机规范中明确定义的,对于智能卡这样的资源受限系统也确实会起到较好的优化效果。
发明内容
考虑到现有技术的上述缺陷,本发明提供了一种通用且符合规范的方法来实现本地函数的调用。
根据本发明的一个方面,提供了一种生成含有本地函数调用的JavaCard程序目标字节代码的方法,包括:将含有本地函数调用的Java Card程序源代码转换成Java Card程序字节代码;保存所述Java Card程序字节代码中的本地函数调用信息,并将所有本地函数替换成空函数,以得到无本地函数调用的Java Card程序字节代码;将所述无本地函数调用的Java Card程序字节代码转换成无本地函数调用的Java Card程序目标字节代码;以及根据所保存的本地函数调用信息,建立对所述空函数的调用与对相应本地函数的调用之间的映射,以得到含有本地函数调用的Java Card程序目标字节代码。
根据本发明的一个方面,提供了一种生成含有本地函数调用的JavaCard程序目标代码的方法,包括:
将含有本地函数调用的Java Card程序源代码转换成Java Card程序字节代码;保存所述Java Card程序字节代码中的本地函数调用信息,并将所有本地函数替换成空函数,以得到无本地函数调用的Java Card程序字节代码;将所述无本地函数调用的Java Card程序字节代码转换成无本地函数调用的Java Card程序目标字节代码;根据所保存的本地函数调用信息,建立对所述空函数的调用与对相应本地函数的调用之间的映射,以得到含有本地函数调用的Java Card程序目标字节代码;以及将所述含有本地函数调用的Java Card程序目标字节代码转换成含有本地函数调用的Java Card程序目标代码。
根据本发明的一个方面,所述含有本地函数调用的Java Card程序源代码包括Java Card程序库源代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于爱思开电讯投资(中国)有限公司,未经爱思开电讯投资(中国)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810178335.7/2.html,转载请声明来源钻瓜专利网。