平码五不中公式规律
  • / 66
  • 下载费用:30 金币  

一种高效更新JAVA指令的方法和装置.pdf

关 键 ?#21097;?/dt>
一种 高效 更新 JAVA 指令 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201410160741.6

申请日:

2014.04.21

公开号:

CN103914326A

公开日:

2014.07.09

当前法律状态:

授权

有效性:

有权

法?#19978;?#24773;: 授权|||实质审查的生效IPC(主分类):G06F 9/445申请日:20140421|||公开
IPC分类号: G06F9/445; G06F12/02 主分类号: G06F9/445
申请人: 飞天诚信科技股份有限公司
发明人: 陆舟; 于华章
地址: 100085 北京市海淀区学清路9号汇智大厦B楼17层
优?#28909;ǎ?/td>
专利代理机构: 代理人:
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201410160741.6

授权公告号:

||||||

法律状态公告日:

2017.02.08|||2014.08.06|||2014.07.09

法律状态类型:

授权|||实质审查的生效|||公开

摘要

本发明公开一种高效更新JAVA指令的方法和装置,包括:JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从存储区中获取常量池组件中的索引值;JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取当前项数据,JAVA智能卡判断当前项数据对应的JAVA指令的引用类型,若是内部引用则根据当前项数据的第一预设部分得到偏移值,根据偏移值和指令对应的组件起始地址得到第一参数,若是外部引用则根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据在包的导出表中获取第一参数;JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数。

权利要求书

权利要求书
1.  一种高效更新JAVA指令的方法,其特征在于,所述方法包括:
步骤S1:JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
步骤S2:所述JAVA智能卡根据获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束;
步骤S3:所述JAVA智能卡根据当前项数据的第1个?#32440;?#21028;断当前项数据对应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5;
步骤S4:所述JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数,执行步骤S6;
步骤S5:所述JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数,执行步骤S6;
步骤S6:所述JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数,结束。

2.  根据权利要求1所述的方法,其特征在于,所述步骤S1之前包括:
步骤S0-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
步骤S0-2:所述JAVA智能卡根据所述未处理数据长度判断是否存在未处理的修正数据,是则执行步骤S1,否则返回成功信息,结束;
所述步骤S1具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述步骤S6之后包括:
步骤S7:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S0-2,否则返回步骤S0-2。

3.  根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度按键;
所述步骤S0-1至步骤S1具体为:
步骤s1-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
步骤s1-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s1-3,否则执行步骤s1-6;
步骤s1-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中 获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s1-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s1-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s1-6:所述JAVA智能卡判断是否已获取双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,是则执行步骤s1-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s1-7;
步骤s1-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s1-8,否则返回成功信息,结束;
步骤s1-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s1-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s1-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。

4.  根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度时间包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s2-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s2-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s2-3,否则执行步骤s2-6;
步骤s2-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s2-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s2-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s2-6:所述JAVA智能卡判断是否已获取单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,是则执行步骤s2-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单?#32440;?#20462; 正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s2-7;
步骤s2-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s2-8,否则返回成功信息,结束;
步骤s2-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s2-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s2-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。

5.  根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s3-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
步骤s3-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s3-3,否则执行步骤s3-6;
步骤s3-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s3-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s3-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s3-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s3-7,否则返回成功信息,结束;
步骤s3-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s3-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s3-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。

6.  根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s4-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s4-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s4-3,否则执行步骤s4-6;
步骤s4-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s4-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s4-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s4-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s4-7,否则返回成功信息,结束;
步骤s4-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中 获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s4-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s4-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。

7.  根据权利要求1所述的方法,其特征在于,所述步骤S1之前包括:
步骤S0-1’:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址,执行步骤S1;
所述步骤S1具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述步骤S6之后包括:
步骤S8:所述JAVA智能卡判断是否处理完所述相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤S9;
步骤S9:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一 个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S1,否则返回步骤S1。

8.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第一指令,所述步骤S3至步骤S6具体为:
步骤A1:所述JAVA智能卡判断所述第一指令的引用类型,若是内部引用则执行步骤A2,若是外部引用则执行步骤A3;
步骤A2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值,执行步骤A7;
步骤A3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
步骤A4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤A5,否则执行步骤A6;
步骤A5:所述JAVA智能卡更新所述第一指令的指令码,执行步骤A6;
步骤A6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,执行步骤A7;
步骤A7:所述JAVA智能卡将所述类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。

9.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第二指令,所述步骤S3至步骤S6具体为:
步骤B1:所述JAVA智能卡判断所述第二指令的引用类型,若是内部引用则执行步骤B2,若是外部引用则执行步骤B3;
步骤B2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤B7;
步骤B3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤B4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤B5,否则执行步骤B6;
步骤B5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤B7;
步骤B6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤B7;
步骤B7:所述JAVA智能卡根据所述类信息物理地址,在所述JAVA智能卡存储区获取当前类信息;
步骤B8:所述JAVA智能卡判断当前类信息的第一部分的数据是否为第二预设值,是则执行步骤B9,否则执行步骤B10;
步骤B9:所述JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤B11;
步骤B10:所述JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤B11;
步骤B11:所述JAVA智能卡根据所述当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
步骤B12:所述JAVA智能卡将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。

10.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第三指令,所述步骤S3至步骤S6具体为:
步骤C1:所述JAVA智能卡判断所述第三指令的引用类型,若是内部引用则执行步骤C2,若是外部引用则执行步骤C3;
步骤C2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤C7;
步骤C3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤C4:所述JAVA所述智能卡判断所述包ID是否小于第一预设值,是则执行步骤C5,否则执行步骤C6;
步骤C5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤C7;
步骤C6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的 导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤C7;
步骤C7:JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第四部分的数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。

11.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第四指令,所述步骤S3至步骤S6具体为:
步骤D1:所述JAVA智能卡判断所述第四指令的引用类型,若是内部引用则执行步骤D2,若是外部引用则执行步骤D3;
步骤D2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤D7;
步骤D3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤D4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤D5,否则执行步骤D6;
步骤D5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码,执行步骤D7;
步骤D6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的 导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤D7;
步骤D7:所述JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。

12.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第五指令,所述步骤S3至步骤S6具体为:
步骤E1:所述JAVA智能卡判断所述第五指令的引用类型,若是内部引用则执行步骤E2,若是外部引用则执行步骤E3;
步骤E2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤E4;
步骤E3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址,执行步骤E4;
步骤E4:所述JAVA智能卡将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。

13.  根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第六指令,所述步骤S3至步骤S6具体为:
步骤F1:所述JAVA智能卡判断所述第六指令的引用类型,若是内部引用则执行步骤F2,若是外部引用则执行步骤F3;
步骤F2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值,执行步骤F7;
步骤F3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
步骤F4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤F5,否则执行步骤F6;
步骤F5:所述JAVA智能卡更新第六指令的指令码,执行步骤F6;
步骤F6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
步骤F7:所述JAVA智能卡将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。

14.  一种高效更新JAVA指令的装置,其特征在于,所述装置包括:第一获取模块、第二获取模块、第一判断模块、第一处理模块、第二处理模块、第一更新模块和输出模块;
所述第一获取模块,用于从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
所述第二获取模块,用于根据所述第一获取模块获取到的所述常量池组件 中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据;
所述第一判断模块,用于当所述第二获取模块获取到当前项数据时,根据当前项数据的第1个?#32440;?#21028;断当前项数据对应的JAVA指令的引用类型;
所述第一处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数;
所述第二处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数;
所述第一更新模块,用于当所述第一处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;当所述第二处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;
所述输出模块,用于当所述第二获取模块未获取到当前项数据时,返回错误信息。

15.  根据权利要求14所述的装置,其特征在于,所述装置还包括:第三获取模块和第二判断模块;
所述第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
所述第二判断模块,用于根据所述第三获取模块获取到的所述未处理数据长度判断是否存在未处理的修正数据;
所述输出模块,还用于当所述第二判断模块判断不存在未处理的修正数据时,返回成功信息;
所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述装置还包括第三判断模块和接收模块;
所述第三判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
所述输出模块,还用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息;
所述接收模块,用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。

16.  根据权利要求15所述的装置,其特征在于,所述第三获取模块包括第一获取单元和第二获取单元;
所述第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
所述第二获取单元,用于当第四判断模块判断未获取到双?#32440;?#20462;正数据的 长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
所述第二判断模块包括第一判断单元和第二判断单元;
所述第一判断单元,用于当所述第一获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述第二判断单元,用于当所述第四判断模块判断已获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度或所述第二获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述输出模块,还用于当所述第二判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第三获取单元、第一更新单元和第四获取单元;
所述第三获取单元,用于当所述第一判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第一更新单元,用于根据所述第三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第四获取单元,用于根据所述第一更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
所述装置包括所述第四判断模块,用于当所述第一判断单元判断不存在未处理的单?#32440;?#20462;正数据时,判断是否已获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
所述第一获取模块包括第五获取单元、第二更新单元和第六获取单元;
所述第五获取单元,用于当所述第二判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第二更新单元,用于根据所述第五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第六获取单元,用于根据所述第二更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。

17.  根据权利要求15所述的装置,其特征在于,所述第三获取模块包括第七获取单元和第八获取单元;
所述第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
所述第八获取单元,用于当第五判断模块判断未获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用 协议数据单元中获取所述相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
所述第二判断模块包括第三判断单元和第四判断单元;
所述第三判断单元,用于当所述第七获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述第四判断单元,用于当所述第五判断模块判断已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度或所述第八获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述输出模块,还用于当所述第四判断单元判断不存在未处理的单?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第九获取单元、第三更新单元和第十获取单元;
所述第九获取单元,用于当所述第三判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第三更新单元,用于根据所述第九获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十获取单元,用于根据所述第三更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
所述装置包括所述第五判断模块,用于当所述第三判断单元判断不存在未 处理的双?#32440;?#20462;正数据时,判断是否已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
所述第一获取模块包括第十一获取单元、第四更新单元和第十二获取单元;
所述第十一获取单元,用于当所述第四判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第四更新单元,用于根据所述第十一获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十二获取单元,用于根据所述第四更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。

18.  根据权利要求15所述的装置,其特征在于,所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
所述第二判断模块包括第五判断单元和第六判断单元;
所述第五判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述第六判断单元,用于当所述第五判断单元判断不存在未处理的单?#32440;?#20462;正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述输出模块,还用于当所述第六判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第十三获取单元、第五更新单元和第十四获取单元;
所述第十三获取单元,用于当所述第五判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第五更新单元,用于根据所述第十三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十四获取单元,用于根据所述第五更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
所述第一获取模块包括第十五获取单元、第六更新单元和第十六获取单元;
所述第十五获取单元,用于当所述第六判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第六更新单元,用于根据所述第十五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的 初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十六获取单元,用于根据所述第六更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。

19.  根据权利要求15所述的装置,其特征在于,所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
所述第二判断模块包括第七判断单元和第八判断单元;
所述第七判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述第八判断单元,用于当所述第七判断单元判断不存在未处理的双?#32440;?#20462;正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述输出模块,还用于当所述第八判断单元判断不存在未处理的单?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第十七获取单元、第七更新单元和第十八获取单元;
所述第十七获取单元,用于当所述第七判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中 的数据,更新所述第一未处理数据长度和所述读取地址;
所述第七更新单元,用于根据所述第十七获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十八获取单元,用于根据所述第七更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
所述第一获取模块包括第十九获取单元、第八更新单元和第二十获取单元;
所述第十九获取单元,用于当所述第八判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第八更新单元,用于根据所述第十九获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第二十获取单元,用于根据所述第八更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。

20.  根据权利要求14所述的装置,其特征在于,所述装置包括第四获取模块、第六判断模块、第七判断模块和接收模块;
所述第四获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取 到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述第六判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断是否处理完所述相关地址组件中的所有数据;
所述输出模块,还用于当所述第六判断模块判断已处理完所述相关地址组件中的所有数据后,返回成功信息;
所述第七判断模块,用于当所述第六判断模块判断未处理完所述相关地址组件中的所有数据后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
所述输出模块,还用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,返回成功信息;
所述接收模块,用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。

21.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第一指令,所述第一判断模块,具体用于判断所述第一指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第一指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根 据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
所述第二处理模块包括第二十一获取单元、第九判断单元、第九更新单元和第二十二获取单元;
所述第二十一获取单元,用于当所述第一判断模块判断所述第一指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
所述第九判断单元,用于判断所述第二十一获取单元获取到的所述包ID是否小于第一预设值;
所述第九更新单元,用于当所述第九判断单元判断所述包ID小于第一预设值时,更新第一指令的指令码;
所述第二十二获取单元,用于当所述第九判断单元判断所述包ID不小于第一预设值或所述第九更新单元更新第一指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值;
所述第一更新模块,具体用于当所述第一处理模块得到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数;当所述第二十二获取单元获取到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。

22.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第二指令,所述第一判断模块,具体用于判断所述第二指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第二指令的引 用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
所述第二处理模块包括第二十三获取单元、第十判断单元、第一处理单元和第二处理单元;
所述第二十三获取单元,用于当所述第一判断模块判断所述第二指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十判断单元,用于判断所述第二十三获取单元获取到的所述包ID是否小于第一预设值;
所述第一处理单元,用于当所述第十判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
所述第二处理单元,用于当所述第十判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块包括第二十四获取单元、第十一判断单元、第三处理单元、第四处理单元、第五处理单元和第十更新单元;
所述第二十四获取单元,用于当所述第一处理模块得到类信息物理地址,或所述第一处理单元得到类信息物理地址,或所述第二处理单元得到类信息物理地址后,根据所述类信息物理地址,在JAVA智能卡存储区获取当前类信息;
所述第十一判断单元,用于判断所述第二十四获取单元获取到的当前类信息的第一部分的数据是否为第二预设值;
所述第三处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据为第二预设值时,根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址;
所述第四处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据不为第二预设值时,根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址;
所述第五处理单元,用于当所述第三处理单元或所述第四处理单元得到当前类信息的父类的类信息的物理地址后,根据当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
所述第十更新单元,用于当所述第五处理单元得到所述索引值后,将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。

23.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第三指令,所述第一判断模块,具体用于判断所述第三指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第三指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
所述第二处理模块包括第二十五获取单元、第十二判断单元、第六处理单元和第七处理单元;
所述第二十五获取单元,用于当所述第一判断模块判断所述第三指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十二判断单元,用于判断所述第二十五获取单元获取到的所述包ID是否小于第一预设值;
所述第六处理单元,用于当所述第十二判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
所述第七处理单元,用于当所述第十二判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第六处理单元获取到所述类信息物理地址,或所述第七处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第4个?#32440;?#30340;数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。

24.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第四指令,所述第一判断模块,具体用于判断所述第四指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第四指令的引 用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
所述第二处理模块包括第二十六获取单元、第十三判断单元、第八处理单元和第九处理单元;
所述第二十六获取单元,用于当所述第一判断模块判断所述第四指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十三判断单元,用于判断所述第二十六获取单元获取到的所述包ID是否小于第一预设值;
所述第八处理单元,用于当所述第十三判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码;
所述第九处理单元,用于当所述第十三判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第八处理单元获取到所述类信息物理地址,或所述第九处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。

25.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第五指令,所述第一判断模块,具体用于判断所述第五指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址;
所述第二处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述被访问静态域的偏移地址,或所述第二处理模块得到所述被访问静态域的偏移地址后,将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。

26.  根据权利要求14所述的装置,其特征在于,若当前项数据对应的JAVA指令为第六指令,所述第一判断模块,具体用于判断所述第六指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第六指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值;
所述第二处理模块包括第二十七获取单元、第十四判断单元、第十一更新单元和第二十八获取单元;
所述第二十七获取单元,用于当所述第一判断模块判断所述第六指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
所述第十四判断单元,用于判断所述第二十七获取单元获取到的所述包ID是否小于第一预设值;
所述第十一更新单元,用于当所述第十四判断单元判断所述包ID小于所述第一预设值时,更新所述第六指令的指令码;
所述第二十八获取单元,用于当所述第十三判断单元判断所述包ID不小于所述第一预设值,或所述第十一更新单元更新第六指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
所述第一更新模块,具体用于当所述第一处理模块得到所述方法的偏移值,或所述第二十八获取单元获取到所述方法的偏移值后,将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。

说明书

说明书一种高效更新JAVA指令的方法和装置
技术领域
本发明涉及信息处理领域,尤其涉及一种高效更新JAVA指令的方法和装置。
背景技术
对于JAVA智能卡而言,应用程序的下载过程即是CAP文件写入到EEPROM的过程,即是对CAP文件的下载过程。
现有技术中,在CAP文件的下载过程中,JAVA智能卡首先要根据卡外引用计算出被引用数据的物理地址,然后将物理地址填充的相应的子表中,再根据物理地址在主表和子表中的索引得到该物理地址的引用,不但需要进行重定位操作,而?#19968;?#35201;进行填表的步骤,下载过程复杂;JAVA卡虚拟机在执行的时候则需要根据引用值通过查找主表和子表的方式?#19994;絞导?#30340;数据,JAVA卡虚拟机在执行过程中访问数据的速度低。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种高效更新JAVA指令的方法和装置,简化了JAVA智能卡在CAP文件的下载过程中的处理流程。
本发明提供的一种高效更新JAVA指令的方法,包括:
步骤S1:JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
步骤S2:所述JAVA智能卡根据获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束;
步骤S3:所述JAVA智能卡根据当前项数据的第1个?#32440;?#21028;断当前项数据对 应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5;
步骤S4:所述JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数,执行步骤S6;
步骤S5:所述JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数,执行步骤S6;
步骤S6:所述JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数,结束。
所述步骤S1之前包括:
步骤S0-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
步骤S0-2:所述JAVA智能卡根据所述未处理数据长度判断是否存在未处理的修正数据,是则执行步骤S1,否则返回成功信息,结束;
所述步骤S1具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述步骤S6之后包括:
步骤S7:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相 关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S0-2,否则返回步骤S0-2。
所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度按键;
所述步骤S0-1至步骤S1具体为:
步骤s1-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
步骤s1-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s1-3,否则执行步骤s1-6;
步骤s1-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s1-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s1-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s1-6:所述JAVA智能卡判断是否已获取双?#32440;?#20462;正数据的长度数据作 为第二未处理数据长度,是则执行步骤s1-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s1-7;
步骤s1-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s1-8,否则返回成功信息,结束;
步骤s1-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s1-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s1-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。
所述相关地址组件中的所述修正数据的长度时间包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s2-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s2-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s2-3,否则执行步骤s2-6;
步骤s2-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s2-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s2-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s2-6:所述JAVA智能卡判断是否已获取单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,是则执行步骤s2-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s2-7;
步骤s2-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s2-8,否则返回成功信息,结束;
步骤s2-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s2-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存 储的方法组件基地址;
步骤s2-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。
所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s3-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
步骤s3-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s3-3,否则执行步骤s3-6;
步骤s3-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s3-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s3-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步 骤S4;
步骤s3-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s3-7,否则返回成功信息,结束;
步骤s3-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s3-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s3-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。
所述相关地址组件中的所述修正数据的长度数据包括单?#32440;?#20462;正数据的长度数据和双?#32440;?#20462;正数据的长度数据;
所述步骤S0-1至步骤S1具体为:
步骤s4-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s4-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s4-3,否则执行步骤s4-6;
步骤s4-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
步骤s4-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s4-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S4;
步骤s4-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s4-7,否则返回成功信息,结束;
步骤s4-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
步骤s4-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
步骤s4-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤S2。
所述步骤S1之前包括:
步骤S0-1’:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元 中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址,执行步骤S1;
所述步骤S1具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述步骤S6之后包括:
步骤S8:所述JAVA智能卡判断是否处理完所述相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤S9;
步骤S9:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S1,否则返回步骤S1。
若当前项数据对应的JAVA指令为第一指令,所述步骤S3至步骤S6具体为:
步骤A1:所述JAVA智能卡判断所述第一指令的引用类型,若是内部引用则执行步骤A2,若是外部引用则执行步骤A3;
步骤A2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值,执行步骤A7;
步骤A3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类 信息所属的包的包ID;
步骤A4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤A5,否则执行步骤A6;
步骤A5:所述JAVA智能卡更新所述第一指令的指令码,执行步骤A6;
步骤A6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,执行步骤A7;
步骤A7:所述JAVA智能卡将所述类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。
若当前项数据对应的JAVA指令为第二指令,所述步骤S3至步骤S6具体为:
步骤B1:所述JAVA智能卡判断所述第二指令的引用类型,若是内部引用则执行步骤B2,若是外部引用则执行步骤B3;
步骤B2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤B7;
步骤B3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤B4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤B5,否则执行步骤B6;
步骤B5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤B7;
步骤B6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤B7;
步骤B7:所述JAVA智能卡根据所述类信息物理地址,在所述JAVA智能卡存储区获取当前类信息;
步骤B8:所述JAVA智能卡判断当前类信息的第一部分的数据是否为第二预设值,是则执行步骤B9,否则执行步骤B10;
步骤B9:所述JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤B11;
步骤B10:所述JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤B11;
步骤B11:所述JAVA智能卡根据所述当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
步骤B12:所述JAVA智能卡将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。
若当前项数据对应的JAVA指令为第三指令,所述步骤S3至步骤S6具体为:
步骤C1:所述JAVA智能卡判断所述第三指令的引用类型,若是内部引用则执行步骤C2,若是外部引用则执行步骤C3;
步骤C2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤C7;
步骤C3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤C4:所述JAVA所述智能卡判断所述包ID是否小于第一预设值,是则执行步骤C5,否则执行步骤C6;
步骤C5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤C7;
步骤C6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤C7;
步骤C7:JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第四部分的数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。
若当前项数据对应的JAVA指令为第四指令,所述步骤S3至步骤S6具体为:
步骤D1:所述JAVA智能卡判断所述第四指令的引用类型,若是内部引用则执行步骤D2,若是外部引用则执行步骤D3;
步骤D2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤D7;
步骤D3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类 信息所属的包的包ID,根据所述包ID获取包的导出表地址;
步骤D4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤D5,否则执行步骤D6;
步骤D5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码,执行步骤D7;
步骤D6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤D7;
步骤D7:所述JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。
若当前项数据对应的JAVA指令为第五指令,所述步骤S3至步骤S6具体为:
步骤E1:所述JAVA智能卡判断所述第五指令的引用类型,若是内部引用则执行步骤E2,若是外部引用则执行步骤E3;
步骤E2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤E4;
步骤E3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移 地址,执行步骤E4;
步骤E4:所述JAVA智能卡将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。
若当前项数据对应的JAVA指令为第六指令,所述步骤S3至步骤S6具体为:
步骤F1:所述JAVA智能卡判断所述第六指令的引用类型,若是内部引用则执行步骤F2,若是外部引用则执行步骤F3;
步骤F2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值,执行步骤F7;
步骤F3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
步骤F4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤F5,否则执行步骤F6;
步骤F5:所述JAVA智能卡更新第六指令的指令码,执行步骤F6;
步骤F6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
步骤F7:所述JAVA智能卡将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。
一种高效更新JAVA指令的装置,包括:第一获取模块、第二获取模块、第 一判断模块、第一处理模块、第二处理模块、第一更新模块和输出模块;
所述第一获取模块,用于从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
所述第二获取模块,用于根据所述第一获取模块获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据;
所述第一判断模块,用于当所述第二获取模块获取到当前项数据时,根据当前项数据的第1个?#32440;?#21028;断当前项数据对应的JAVA指令的引用类型;
所述第一处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数;
所述第二处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数;
所述第一更新模块,用于当所述第一处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;当所述第二处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;
所述输出模块,用于当所述第二获取模块未获取到当前项数据时,返回错误信息。
所述装置还包括:第三获取模块和第二判断模块;
所述第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相 关地址组件中的修正数据的长度数据的首地址;
所述第二判断模块,用于根据所述第三获取模块获取到的所述未处理数据长度判断是否存在未处理的修正数据;
所述输出模块,还用于当所述第二判断模块判断不存在未处理的修正数据时,返回成功信息;
所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述装置还包括第三判断模块和接收模块;
所述第三判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
所述输出模块,还用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息;
所述接收模块,用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
所述第三获取模块包括第一获取单元和第二获取单元;
所述第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初 始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
所述第二获取单元,用于当第四判断模块判断未获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
所述第二判断模块包括第一判断单元和第二判断单元;
所述第一判断单元,用于当所述第一获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述第二判断单元,用于当所述第四判断模块判断已获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度或所述第二获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述输出模块,还用于当所述第二判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第三获取单元、第一更新单元和第四获取单元;
所述第三获取单元,用于当所述第一判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第一更新单元,用于根据所述第三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第四获取单元,用于根据所述第一更新单元更新得到的所述被重定位 数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
所述装置包括所述第四判断模块,用于当所述第一判断单元判断不存在未处理的单?#32440;?#20462;正数据时,判断是否已获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
所述第一获取模块包括第五获取单元、第二更新单元和第六获取单元;
所述第五获取单元,用于当所述第二判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第二更新单元,用于根据所述第五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第六获取单元,用于根据所述第二更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。
所述第三获取模块包括第七获取单元和第八获取单元;
所述第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
所述第八获取单元,用于当第五判断模块判断未获取到单?#32440;?#20462;正数据的 长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
所述第二判断模块包括第三判断单元和第四判断单元;
所述第三判断单元,用于当所述第七获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述第四判断单元,用于当所述第五判断模块判断已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度或所述第八获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述输出模块,还用于当所述第四判断单元判断不存在未处理的单?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第九获取单元、第三更新单元和第十获取单元;
所述第九获取单元,用于当所述第三判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第三更新单元,用于根据所述第九获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十获取单元,用于根据所述第三更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
所述装置包括所述第五判断模块,用于当所述第三判断单元判断不存在未处理的双?#32440;?#20462;正数据时,判断是否已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
所述第一获取模块包括第十一获取单元、第四更新单元和第十二获取单元;
所述第十一获取单元,用于当所述第四判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第四更新单元,用于根据所述第十一获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十二获取单元,用于根据所述第四更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。
所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
所述第二判断模块包括第五判断单元和第六判断单元;
所述第五判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述第六判断单元,用于当所述第五判断单元判断不存在未处理的单?#32440;?#20462;正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述输出模块,还用于当所述第六判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第十三获取单元、第五更新单元和第十四获取单元;
所述第十三获取单元,用于当所述第五判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第五更新单元,用于根据所述第十三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十四获取单元,用于根据所述第五更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
所述第一获取模块包括第十五获取单元、第六更新单元和第十六获取单元;
所述第十五获取单元,用于当所述第六判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第六更新单元,用于根据所述第十五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的 初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十六获取单元,用于根据所述第六更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。
所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
所述第二判断模块包括第七判断单元和第八判断单元;
所述第七判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
所述第八判断单元,用于当所述第七判断单元判断不存在未处理的双?#32440;?#20462;正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
所述输出模块,还用于当所述第八判断单元判断不存在未处理的单?#32440;?#20462;正数据时,返回成功信息;
所述第一获取模块包括第十七获取单元、第七更新单元和第十八获取单元;
所述第十七获取单元,用于当所述第七判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
所述第七更新单元,用于根据所述第十七获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第十八获取单元,用于根据所述第七更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
所述第一获取模块包括第十九获取单元、第八更新单元和第二十获取单元;
所述第十九获取单元,用于当所述第八判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
所述第八更新单元,用于根据所述第十九获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
所述第二十获取单元,用于根据所述第八更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。
所述装置包括第四获取模块、第六判断模块、第七判断模块和接收模块;
所述第四获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
所述第六判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断是否处理完所述相关地址组件中的所有数据;
所述输出模块,还用于当所述第六判断模块判断已处理完所述相关地址组件中的所有数据后,返回成功信息;
所述第七判断模块,用于当所述第六判断模块判断未处理完所述相关地址组件中的所有数据后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
所述输出模块,还用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,返回成功信息;
所述接收模块,用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
若当前项数据对应的JAVA指令为第一指令,所述第一判断模块,具体用于判断所述第一指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第一指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
所述第二处理模块包括第二十一获取单元、第九判断单元、第九更新单元和第二十二获取单元;
所述第二十一获取单元,用于当所述第一判断模块判断所述第一指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
所述第九判断单元,用于判断所述第二十一获取单元获取到的所述包ID是否小于第一预设值;
所述第九更新单元,用于当所述第九判断单元判断所述包ID小于第一预设值时,更新第一指令的指令码;
所述第二十二获取单元,用于当所述第九判断单元判断所述包ID不小于第一预设值或所述第九更新单元更新第一指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值;
所述第一更新模块,具体用于当所述第一处理模块得到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数;当所述第二十二获取单元获取到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。
若当前项数据对应的JAVA指令为第二指令,所述第一判断模块,具体用于判断所述第二指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第二指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物 理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
所述第二处理模块包括第二十三获取单元、第十判断单元、第一处理单元和第二处理单元;
所述第二十三获取单元,用于当所述第一判断模块判断所述第二指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十判断单元,用于判断所述第二十三获取单元获取到的所述包ID是否小于第一预设值;
所述第一处理单元,用于当所述第十判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
所述第二处理单元,用于当所述第十判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块包括第二十四获取单元、第十一判断单元、第三处理单元、第四处理单元、第五处理单元和第十更新单元;
所述第二十四获取单元,用于当所述第一处理模块得到类信息物理地址,或所述第一处理单元得到类信息物理地址,或所述第二处理单元得到类信息物理地址后,根据所述类信息物理地址,在JAVA智能卡存储区获取当前类信息;
所述第十一判断单元,用于判断所述第二十四获取单元获取到的当前类信息的第一部分的数据是否为第二预设值;
所述第三处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据为第二预设值时,根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址;
所述第四处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据不为第二预设值时,根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址;
所述第五处理单元,用于当所述第三处理单元或所述第四处理单元得到当前类信息的父类的类信息的物理地址后,根据当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
所述第十更新单元,用于当所述第五处理单元得到所述索引值后,将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。
若当前项数据对应的JAVA指令为第三指令,所述第一判断模块,具体用于判断所述第三指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第三指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
所述第二处理模块包括第二十五获取单元、第十二判断单元、第六处理单元和第七处理单元;
所述第二十五获取单元,用于当所述第一判断模块判断所述第三指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所 属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十二判断单元,用于判断所述第二十五获取单元获取到的所述包ID是否小于第一预设值;
所述第六处理单元,用于当所述第十二判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
所述第七处理单元,用于当所述第十二判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第六处理单元获取到所述类信息物理地址,或所述第七处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第4个?#32440;?#30340;数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。
若当前项数据对应的JAVA指令为第四指令,所述第一判断模块,具体用于判断所述第四指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第四指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根 据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
所述第二处理模块包括第二十六获取单元、第十三判断单元、第八处理单元和第九处理单元;
所述第二十六获取单元,用于当所述第一判断模块判断所述第四指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
所述第十三判断单元,用于判断所述第二十六获取单元获取到的所述包ID是否小于第一预设值;
所述第八处理单元,用于当所述第十三判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码;
所述第九处理单元,用于当所述第十三判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第八处理单元获取到所述类信息物理地址,或所述第九处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。
若当前项数据对应的JAVA指令为第五指令,所述第一判断模块,具体用于判断所述第五指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址;
所述第二处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址;
所述第一更新模块,具体用于当所述第一处理模块得到所述被访问静态域的偏移地址,或所述第二处理模块得到所述被访问静态域的偏移地址后,将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。
若当前项数据对应的JAVA指令为第六指令,所述第一判断模块,具体用于判断所述第六指令的引用类型;
所述第一处理模块,具体用于当所述第一判断模块判断所述第六指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值;
所述第二处理模块包括第二十七获取单元、第十四判断单元、第十一更新 单元和第二十八获取单元;
所述第二十七获取单元,用于当所述第一判断模块判断所述第六指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
所述第十四判断单元,用于判断所述第二十七获取单元获取到的所述包ID是否小于第一预设值;
所述第十一更新单元,用于当所述第十四判断单元判断所述包ID小于所述第一预设值时,更新所述第六指令的指令码;
所述第二十八获取单元,用于当所述第十三判断单元判断所述包ID不小于所述第一预设值,或所述第十一更新单元更新第六指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
所述第一更新模块,具体用于当所述第一处理模块得到所述方法的偏移值,或所述第二十八获取单元获取到所述方法的偏移值后,将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。
本发明与现有技术相比,具有以下优点:
本发明提供的方法根据JAVA智能卡卡外引用计算出被引用数据的物理地址和偏移地址,直接将被引用数据的偏移地址覆盖到指令中相应的被重定位处,简化了JAVA智能卡在CAP文件的下载过程中的处理流程。
附图说明
图1是本发明实施例1提供的一种高效更新JAVA指令的方法的流程图;
图2是本发明实施例2提供的一种高效更新JAVA指令的方法的流程图;
图3是本发明实施例2提供的对第一指令进行重定位的方法的流程图;
图4是本发明实施例2提供的对第二指令进行重定位的方法的流程图;
图5是本发明实施例2提供的对第三指令进行重定位的方法的流程图;
图6是本发明实施例2提供的对第四指令进行重定位的方法的流程图;
图7是本发明实施例2提供的对第五指令进行重定位的方法的流程图;
图8是本发明实施例2提供的对第六指令进行重定位的方法的流程图;
图9是本发明实施例3提供的一种高效更新JAVA指令的装置的模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方?#38468;?#34892;清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提?#28388;?#33719;得的所有其他实施例,都属于本发明保护的范围。
JAVA智能卡的可执行文件(CAP文件)是编译多个应用程序(Applet)的生成结果,包含了一个包中定义的所有类和接口,与包之间是一一对应的关系。?#23548;?#21457;卡操作时,首先需要将该可执行文件下载至JAVA智能卡中,并安装需要的应用实例;用户使用安装的应用实例执行操作功能。在上述两个操作阶段均使用了可执行文件(CAP文件)所提供的内容。CAP文件包含12个组件,组件的标签值从1至12分别为?#21644;?#32452;件(COMPONENT_Header)、目录组件(COMPONENT_Directory)、应用程序组件(COMPONENT_Applet)、输入组件(COMPONENT_Import)、常量池组件(COMPONENT_ConstantPool)、类信息组件(COMPONENT_Class)、方法组件(COMPONENT_Method)、静态域组件(COMPONENT_StaticField)、相关地址组件(COMPONENT_ReferenceLocation)、输出组件(COMPONENT_Export)、描述符组件(COMPONENT_Descriptor)和调试 组件(COMPONENT_Debug),一个完整的CAP文件,除应用程序组件(COMPONENT_Applet)、输出组件(COMPONENT_Export)和调试组件(COMPONENT_Debug)是可选外,其他均为必选。各个组件作为应用协议数据单元中的数据按顺序被发送到JAVA智能卡中;若一个组件的数据的长度超过应用协议数据单元规定的传输数据的长度,则该组件被分包通过多个应用协议数据单元发?#36879;鳭AVA智能卡;若一个组件的数据的长度未达到应用协议数据单元规定的传输数据的长度,则在该应用协议数据单元继续传输下一个组件的数据,即,JAVA智能卡接收到的应用协议数据单元中可能只包含一个组件的数据,?#37096;?#33021;包含多个组件的数据。最后在JAVA智能卡上只保留了4个组件:方法组件(COMPONENT_Method)、类信息组件(COMPONENT_Class)、静态域组件(COMPONENT_StaticField)和输出组件(COMPONENT_Export),其余的组件只?#21069;?#35013;时提取有用信息而不在JAVA智能卡中保存。
CAP文件的12个组件中,类信息组件(COMPONENT_Class)保存应用声明的所有类和接口的信息;方法组件(COMPONENT_Method)保存应用声明的所有方法和接口,并利用2?#32440;?#32034;引引用类、方法和域;常量池组件(COMPONENT_ConstantPool)保存方法组件(COMPONENT_Method)引用的所有类、方法和域信息,分为类、实例域、虚方法、父方法、静态域和静态方法6类,每组信息为4个?#32440;冢?#30456;关地址组件(COMPONENT_ReferenceLocation)保存方法组件(COMPONENT_Method)中索引的偏移。
在CAP文件的下载过程中,JAVA智能卡需要将一部分组件进行解析,同时对相关地址组件(COMPONENT_ReferenceLocation)中指定的位置进行链接,能够链接到方法组件(COMPONENT_Method)中的一个索引号,并根据索引号查?#39029;?#37327;池组件(COMPONENT_ConstantPool)中保存的、与该索引号对应的类、方 法或域在EEPROM中的?#23548;?#22320;址,调用?#23548;?#22320;址中存储的数据;也就是说,方法的调用其实是需要两个步骤?#35789;?#29616;的:
1.根据相关地址组件(COMPONENT_ReferenceLocation)中指定的位置进行链接,获取方法组件(COMPONENT_Method)中的索引号;
2.根据索引号查?#39029;?#37327;池组件(COMPONENT_ConstantPool)中保存的、与该索引号对应的类、方法或域在EEPROM中的?#23548;?#22320;址,调用?#23548;?#22320;址中存储的数据。
实施例1
本发明的实施例1提供一种高效更新JAVA指令的方法,如图1所示,该方法包括:
步骤S1:JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
步骤S2:JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束;
步骤S3:JAVA智能卡根据当前项数据的第1个?#32440;?#21028;断当前项数据对应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5;
步骤S4:JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据偏移值和JAVA指令对应的组件起始地址得到第一参数,执行步骤S6;
步骤S5:JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和包的导出表地址在包的导出表中获取第一参数,执行步骤S6;
步骤S6:JAVA智能卡根据第一参数更新JAVA指令的指令参数,结束。
实施例2
本发明的实施例2提供一种高效更新JAVA指令的方法,如图2所示,该方法包括:
当JAVA智能卡接收到的应用协议数据单元中组件的标签值为9时,执行以下步骤:
步骤101:JAVA智能卡从应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
具体地,JAVA智能卡获取应用协议数据单元中组件的标签值之后的2个?#32440;?#30340;数据作为相关地址组件的长度;读取地址的初始值为相关地址组件的单?#32440;?#20462;正数据的长度数据的首地址,单?#32440;?#20462;正数据的长度数据为2个?#32440;冢?#20043;后为单?#32440;?#20462;正数据;已处理数据的长度初始值为0;更新读取地址为将读取地址自加2,更新已处理数据的长度为将已处理数据的长度自加3;
例如,应用协议数据单元为:
0x090x000x66
0x000x30
0x120x040x390x2D0x2B0x0D0x700x0C0x020x070x220x040x100x050x020x090x030x1C0x020x0E0x040x100x050x020x0B0x190x1A0x060x060x040x150x020x110x040x110x020x120x040x0A0x050x020x0A0x0A0x110x050x060x110x07
0x000x32
0x070x060x0B0x040x060x070x110x120x050x080x090x170x2B0x170x160x150x060x030x080x080x080x080x060x030x150x290x0E0x180x3B0x180x0A0x030x0E0x0C0x0A0x1C0x0D0x0B0x070x0E0x3A0x090x0A0x030x1F0x030x120x030x100x05
其中,0x09为组件的标签值,0x0066为相关地址组件的长度,0x0030单?#32440;?#20462;正数据的长度数据;
步骤102:JAVA智能卡根据第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤103,否则执行步骤106;
步骤103:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
具体地,更新读取地址为将读取地址自加1,更新第一未处理数据长度为将第一未处理数据长度自减1,更新已处理数据的长度为将已处理数据的长度自加1;
步骤104:JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;更新被重定位数据的第一物理地址,具体为:将被重定位数据的第一物理地址加上第一修正数据得到更新后的被重定位数据的第一物理地址;更新后的被重定位数据的第一物理地址为方法组件中被重定位数据的物理地址;
例如,被重定位数据的第一物理地址的初始值为方法组件基地址,即0x10000,若第一修正数据为0x12,则更新后的被重定位数据的第一物理地址为 0x10000+0x12=0x10012;若被重定位数据的第一物理地址为0x10012,第一修正数据为0x04,则更新后的被重定位数据的第一物理地址为0x10012+0x04=0x10016;若被重定位数据的第一物理地址为0x10016,第一修正数据为0x039,则更新后的被重定位数据的第一物理地址为0x10016+0x39=0x1004F;
步骤105:JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
例如,方法组件基地址为0x10000,方法组件如下:
0x010x020xDF0x800x080x020xE90x000x180x020x400x180x8C0x000x110x18
0x030x890x000x180x010x870x010x8F0x000x130x3D0x8C0x000x140x930x05
0x300x8F0x000x170x3D0x180x1D0x1E0x8C0x000x060x3B0x7A0x000x200x7A
0x010x200x040x780x050x240x030x310x190x8B0x000x070x2E0x1B0x030x25
0x610x270x1B0x040x250x100xA40x6B0x200x180x190x8B0x000x080x890x00
0x8D0x000x090x1B0x080x1B0x070x250x8B0x000x0A0x990x000xB60x110x69
0x990x8D0x000x0B0xA80x000xAD0x1B0x030x250x060x530x06*0x6E0x130x1B……
若被重定位数据的第一物理地址为0x10012,则获取到的1个?#32440;?#30340;数据, 即常量池组件中的索引值为0x00;若被重定位数据的第一物理地址为0x10016,则获取到的1个?#32440;?#30340;数据,即常量池组件中的索引值为0x01;若被重定位数据的第一物理地址为0x1004F,则获取到的1个?#32440;?#30340;数据,即常量池组件中的索引值为0x00;
步骤106:JAVA智能卡判断是否已从应用协议数据单元中获取相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,是则执行步骤107,否则JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址和已处理数据的长度,执行步骤107;
具体地,更新读取地址为将读取地址自加2,更新已处理数据的长度为将已处理数据的长度自加2;
具体地,双?#32440;?#20462;正数据的前2个?#32440;?#30340;数据为双?#32440;?#20462;正数据的长度数据,之后为双?#32440;?#20462;正数据的内容;例如,双?#32440;?#20462;正数据的长度数据为0x0032;
步骤107:JAVA智能卡根据第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤108,否则返回成功信息,结束;
步骤108:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
具体地,更新读取地址为将读取地址自加1,更新第二未处理数据长度为将第二未处理数据长度自减1,更新已处理数据的长度为将已处理数据的长度自加1;
步骤109:JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;更新被重定位数据的第二物理地址,具体为:将被重定位数据的第二物理地址加上第二修正数据得到更新后的被重定位数据的第二物理地址;更新后的被重定位数据的第二物理地址为方法组件中被重定位数据的物理地址;
例如,被重定位数据的第二物理地址的初始值为方法组件基地址,即0x10000,若第二修正数据为0x07,则更新后的被重定位数据的第二物理地址为0x10000+0x12=0x10007;若被重定位数据的第二物理地址为0x10007,第二修正数据为0x06,则更新后的被重定位数据的第二物理地址为0x10012+0x04=0x1000D;若被重定位数据的第二物理地址为0x1000D,第二修正数据为0x0B,则更新后的被重定位数据的第二物理地址为0x10016+0x39=0x10018;
步骤110:JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
例如,若被重定位数据的第二物理地址为0x10007,则获取到的2个?#32440;?#30340;数据,即常量池组件中的索引值为0x0018;若被重定位数据的第二物理地址为0x1000D,则获取到的2个?#32440;?#30340;数据,即常量池组件中的索引值为0x0011;若被重定位数据的第二物理地址为0x10018,则获取到的2个?#32440;?#30340;数据,即常量池组件中的索引值为0x0013;
步骤111:JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取一项数据,判断是否能根据索引值获取到数据,是则将获取到的数据作为当前项数据,执行步骤112,否则返回错误信息,结束;
具体地,在常量池组件中,一项数据是大小为4个?#32440;?#30340;数据;
例如,常量池组件
0x000x1B
0x020x000x000x060x020x000x000x010x020x000x000x04
0x020x000x000x000x020x000x000x050x020x000x000x03
0x060x000x000x090x030x800x0A0x010x030x800x0A0x06
0x060x800x080x030x030x800x060x020x060x800x070x01
0x060x000x020xD30x030x800x0A0x080x060x800x100x05
0x060x000x010xDF0x060x000x010x1B0x060x800x030x00
0x030x000x000x0A0x010x810x030x000x060x810x030x00
0x060x000x020xC70x030x000x000x0B0x010x000x000x00
0x010x810x010x000x060x800x080x110x060x800x080x12
其中,0x001B为常量池组件中数据项的个数,之后每4个?#32440;?#20026;一项数据;
若常量池组件中的索引值为0x00,则当前项数据为0x02000006;若常量池组件中的索引值为0x01,则当前项数据为0x02000001;若常量池组件中的索引值为0x0018,则当前项数据为0x01810100;若常量池组件中的索引值为0x0011,则当前项数据为0x06800300;若常量池组件中的索引值为0x0013,则当前项数据为0x01810300;
步骤112:JAVA智能卡判断当前项数据的第1个?#32440;?#30340;值,若为1则对第一指令进行重定位,执行步骤113;若为2则对第二指令进行重定位,执行步骤113;若为3则对第三指令进行重定位,执行步骤113;若为4则对第四指令进行重定位,执行步骤113;若为5则对第五指令进行重定位,执行步骤113;若为6则对第六指令进行重定位,执行步骤113;
具体地,第一指令为new指令、newarray指令、instanceof指令和chackcast 指令;第二指令为getfield指令和putfield指令;第三指令为invokevirtual指令;第四指令为invokespecial指令;第五指令为putstatic指令和getstatic指令;第六指令为invokestatic指令;
步骤113:JAVA智能卡根据已处理数据的长度和相关地址组件的长度判断是否处理完相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤114;
具体地,JAVA智能卡判断已处理数据的长度是否等于获取到的相关地址组件的长度,是则确定处理完相关地址组件中的所有数据,否则确定未处理完相关地址组件中的所有数据;
步骤114:JAVA智能卡判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成,是则返回成功信息,执行步骤115,否则返回步骤102;
步骤115:JAVA智能卡等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤102;
本实施例中,由于相关地址组件的数据可能被分包通过多个应用协议数据单元发?#36879;鳭AVA智能卡,所以JAVA智能卡需要接收多个应用协议数据单元才能接收到全部的相关地址组件的数据;
具体地,对第一指令进行重定位,如图3所示,包括:
步骤201:JAVA智能卡判断第一指令的引用类型,若是内部引用则执行步骤202,若是外部引用则执行步骤205;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第一指令的引用类型为外部引用,否则确定第一指令的引用类型为内部 引用;
例如,当前项数据为:0x010x810x030x00;当前项数据的第2个?#32440;?#20026;0x81,即10000001,则当前项数据的第2个?#32440;?#30340;最高位为1,确定第一指令的引用类型为外部引用;
步骤202:JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
具体地,当前项数据的第一部分的数据为当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据;
步骤203:JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
步骤204:JAVA智能卡根据类信息物理地址和EEPROM基地址得到类信息的偏移值,执行步骤210;
具体地,类信息物理地址减去EEPROM基地址等于类信息的偏移值;本实施例中,类信息的偏移值为类信息基于EEPROM的偏移地址;
步骤205:JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
例如,当前项数据为:0x010x810x030x00;当前项数据的第2个?#32440;?#20026;0x81,即10000001,则被引用类信息所属的包的包ID为1;
步骤206:JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤207,否则执行步骤208;
例如,第一预设值为19;
步骤207:JAVA智能卡更新第一指令的指令码,执行步骤208;
具体地,JAVA智能卡通过更新第一指令的指令码将引用EEPROM中类信息的第一指令更改为引用ROM中类信息;
例如,第一指令为0x8F0x000x03,该第一指令引用EEPROM中类信息;将第一指令中的指令码0x8F更改为0xBC,则更改后的第一指令为0xBC0x000x03,更改后的第一指令引用ROM中类信息;
步骤208:JAVA智能卡根据包ID获取包的导出表地址;
步骤209:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,执行步骤210;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;
例如,本实施例中,当前项数据的第3个?#32440;?#30340;数据为0x03,获取到的类信息的偏移值为0x010x81;
步骤210:JAVA智能卡将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数;
例如,第一指令为0x8F0x000x03,将第一指令中的指令参数0x000x03更改为获取到的类信息的偏移值0x010x81,则更改后的第一指令为0xBC0x010x81;
具体地,对第二指令进行重定位,如图4所示,包括:
步骤301:JAVA智能卡判断第二指令的引用类型,若是内部引用则执行步骤302,若是外部引用则执行步骤304;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第二指令的引用类型为外部引用,否则确定第二指令的引用类型为内部 引用;
例如,当前项数据为0x020x010x030x00;当前项数据的第2个?#32440;?#20026;0x01,即00000001,则当前项数据的第2个?#32440;?#30340;最高位不为1;
步骤302:JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
具体地,当前项数据的第一部分的数据为当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据;
例如,当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据为0x010x03,则第一偏移值为0x0103;
步骤303:JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤309;
具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
例如,JAVA智能卡存储的类型信息组件基地址为0x100380,则类信息物理地址为0x100380+0x0103=0x100483;
步骤304:JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
步骤305:JAVA智能卡根据包ID获取包的导出表地址;
步骤306:JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤307,否则执行步骤308;
步骤307:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤309;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
步骤308:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤309;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
步骤309:JAVA智能卡根据类信息物理地址,在JAVA智能卡存储区获取当前类信息;
步骤310:JAVA智能卡判断当前类信息的第一部分的数据是否为第二预设值,是则执行步骤311,否则执行步骤312;
具体地,当前类信息的第一部分的数据为当前类信息的第2个?#32440;?#30340;第5位;第二预设值为1;
例如,当前类信息的第2个?#32440;?#20026;0x13,即00010011,则当前类信息的第2个?#32440;?#30340;第5位为1,确定当前类信息的第一部分的数据为第二预设值;
步骤311:JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤313;
具体地,当前类信息的第二部分的数据为当前类信息的第3个?#32440;?#21644;第4个?#32440;?#30340;数据;当前类信息的第3个?#32440;?#21644;第4个?#32440;?#30340;数据加上ROM基地址等于当前类信息的父类的类信息的物理地址;
例如,ROM基地址为0x32000,当前类信息的第3个?#32440;?#21644;第4个?#32440;?#30340;数据为0x020x03,则当前类信息的父类的类信息的物理地址为0x32000+0x0203=0x32203;
步骤312:JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤313;
具体地,当前类信息的第二部分的数据为当前类信息的第3个?#32440;?#21644;第4个?#32440;?#30340;数据;当前类信息的第3个?#32440;?#21644;第4个?#32440;?#30340;数据加上EEPROM基地址等于当前类信息的父类的类信息的物理地址;
步骤313:JAVA智能卡根据当前类信息的父类的类信息的物理地址,在JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据该数据和当前项数据的第四部分的数据得到索引值;
具体地,当前类信息的父类的类信息的第一部分的数据为当前类信息的父类的类信息的第5个?#32440;?#30340;数据;当前项数据的第四部分的数据为当前项数据的第4个?#32440;?#30340;数据;当前类信息的父类的类信息的第5个?#32440;?#30340;数据加上当前项数据的第4个?#32440;?#30340;数据等于索引值;
例如,当前类信息的父类的类信息的物理地址为0x32203,获取到的当前类信息的父类的类信息的第5个?#32440;?#30340;数据为0x02,当前项数据的第4个?#32440;?#20026;0x00,则索引值为0x00+0x02=0x02;
步骤314:JAVA智能卡将索引值作为第一参数,根据第一参数更新第二指令的指令参数;
例如,第二指令为0x830x23,则将第二指令的指令参数0x23更新为索引值0x02,即更新后的第二指令为0x830x02;
具体地,对第三指令进行重定位,如图5所示,包括:
步骤401:JAVA智能卡判断第三指令的引用类型,若是内部引用则执行步骤402,若是外部引用则执行步骤404;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第三指令的引用类型为外部引用,否则确定第三指令的引用类型为内部引用;
例如,当前项数据为0x030x020x050x01;当前项数据的第2个?#32440;?#20026;0x02,即00000010,则当前项数据的第2个?#32440;?#30340;最高位不为1,确定第三指令的引用类型为内部引用;
步骤402:JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
具体地,当前项数据的第一部分的数据为当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据;
例如,当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据为0x020x05,则第一偏移值为0x0205;
步骤403:JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤409;
具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
例如,JAVA智能卡存储的类型信息组件基地址为0x100380,第一偏移值为0x0205,则类信息物理地址为0x100380+0x0205=0x100585;
步骤404:JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
步骤405:JAVA智能卡根据包ID获取包的导出表地址;
步骤406:JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤407,否则执行步骤408;
具体地,第一预设值为19;
步骤407:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤409;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
步骤408:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤409;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
步骤409:JAVA智能卡根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址;
具体地,当前项数据的第四部分的数据为当前项数据的第4个?#32440;?#30340;数据;当前项数据的第4个?#32440;?#30340;数据为被调用方法的序号,JAVA智能卡根据被调用方法的序号在类信息中查?#20918;?#35843;用方法的偏移地址;
例如,类信息物理地址为0x100585,当前项数据的第4个?#32440;?#30340;数据为0x01;查?#19994;?#30340;被调用方法的偏移地址为0x100680;
步骤410:JAVA智能卡根据被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数;
具体地,JAVA智能卡根据被调用方法的物理地址在JAVA智能卡存储区获取被调用方法信息,获取被调用方法信息的第2个?#32440;?#30340;数据作为被调用方法的参数个数;
例如,获取到的被调用方法的参数个数为0x03;
步骤411:JAVA智能卡根据被调用方法的参数个数和当前项数据的第四部分的数据得到第一参数;
具体地,当前项数据的第四部分的数据为当前项数据的第4个?#32440;?#30340;数据;
例如,被调用方法的参数个数为0x03,当前项数据的第4个?#32440;?#30340;数据为0x01,则第一参数为0x030x01;
步骤412:JAVA智能卡根据第一参数更新第三指令的指令参数;
例如,第三指令为0x8B0x000x07,则将第三指令的指令参数0x000x07更新为第一参数0x030x01,则更新后的第三指令为0x8B0x030x01;
具体地,对第四指令进行重定位,如图6所示,包括:
步骤501:JAVA智能卡判断第四指令的引用类型,若是内部引用则执行步骤502,若是外部引用则执行步骤504;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第四指令的引用类型为外部引用,否则确定第四指令的引用类型为内部引用;
例如,当前项数据为0x040x030x060x02;当前项数据的第2个?#32440;?#20026;0x03,即00000011,则当前项数据的第2个?#32440;?#30340;最高位不为1;
步骤502:JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
具体地,当前项数据的第一部分的数据为当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据;
例如,本实施例中,当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据为0x030x06,则第一偏移值为0x0306;
步骤503:JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤510;
具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
例如,JAVA智能卡存储的类信息组件起始地址为0x100380,第一偏移值为0x0306,则类信息物理地址为0x100380+0x0306=0x100686;
步骤504:JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
步骤505:JAVA智能卡根据包ID获取包的导出表地址;
步骤506:JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤507,否则执行步骤509;
具体地,第一预设值为19;
步骤507:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤508;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
步骤508:JAVA智能卡更新第四指令的指令码,执行步骤510;
具体地,JAVA智能卡通过更新第四指令的指令码将调用EEPROM中父方法的第四指令改为调用ROM中父方法;
步骤509:JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地 址得到类信息物理地址,执行步骤510;
具体地,当前项数据的第三部分的数据为当前项数据的第3个?#32440;?#30340;数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
步骤510:JAVA智能卡根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址;
具体地,当前项数据的第四部分的数据为当前项数据的第4个?#32440;?#30340;数据;当前项数据的第4个?#32440;?#30340;数据为被调用方法的序号,JAVA智能卡根据被调用方法的序号在类信息中查?#19994;?#34987;调用方法的偏移地址;
例如,当前项数据的第4个?#32440;?#30340;数据为0x02,类信息物理地址为0x100686;查?#19994;?#30340;被调用方法的偏移地址为0x0680;
步骤511:JAVA智能卡将被调用方法的偏移地址作为第一参数,根据第一参数更新第四指令的指令参数;
例如,第四指令为0x8C0x010x07,将第四指令的指令参数0x010x07更新为被调用方法的偏移地址0x0680,则更新后的第四指令为0x8C0x060x80;
具体地,对第五指令进行重定位,如图7所示,包括:
步骤601:JAVA智能卡判断第五指令的引用类型,若是内部引用则执行步骤602,若是外部引用则执行步骤605;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第五指令的引用类型为外部引用,否则确定第五指令的引用类型为内部引用;
例如,当前项数据为0x050x030x060x02;当前项数据的第2个?#32440;?#20026;0x03,即00000011,则当前项数据的第2个?#32440;?#30340;最高位不为1,确定第五指 令的引用类型为内部引用;
步骤602:JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值;
具体地,当前项数据的第五部分的数据为当前项数据的第3个?#32440;?#21644;第4个?#32440;?#30340;数据;
例如,当前项数据的第3个?#32440;?#21644;第4个?#32440;?#30340;数据为0x060x02,则第二偏移值为0x0602;
步骤603:JAVA智能卡根据第二偏移值和JAVA智能卡存储的静态域组件起始地址得到静态域物理地址;
具体地,第二偏移值加上本包中类信息组件起始地址等于类信息物理地址;
例如,JAVA智能卡存储的静态域组件起始地址为0x100680,第二偏移值为0x0602,则静态域物理地址为0x100680+0x0602=0x100C82;
步骤604:JAVA智能卡根据静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤608;
具体地,静态域物理地址减去EEPROM基地址等于被访问静态域的偏移地址;
例如,静态域物理地址为0x100C82,EEPROM基地址为0x100380,则被访问静态域的偏移地址为0x100C82–0x100380=0x0902;
步骤605:JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
步骤606:JAVA智能卡根据包ID获取包的导出表地址;
步骤607:JAVA智能卡根据当前项数据的第一部分的数据和包的导出表地址,在导出表中获取被访问静态域的偏移地址;
具体地,当前项数据的第一部分的数据为当前项数据的第2个?#32440;?#21644;第3个?#32440;?#30340;数据;
步骤608:JAVA智能卡将被访问静态域的偏移地址作为第一参数,根据第一参数更新第五指令的指令参数;
例如,第五指令为0x7B0x000x37,将第五指令的指令参数0x000x37更新为被访问静态域的偏移地址0x0902,则更新后的第五指令为0x7B0x090x02;
具体地,对第六指令进行重定位,如图8所示,包括:
步骤701:JAVA智能卡判断第六指令的引用类型,若是内部引用则执行步骤705,若是外部引用则执行步骤702;
具体地,JAVA智能卡判断当前项数据的第2个?#32440;?#30340;最高位是否为1,是则确定第六指令的引用类型为外部引用,否则确定第六指令的引用类型为内部引用;
例如,当前项数据为0x060x030x060x02;当前项数据的第2个?#32440;?#20026;0x03,即00000011,则当前项数据的第2个?#32440;?#30340;最高位不为1,确定第六指令的引用类型为内部引用;
步骤702:JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值;
具体地当前项数据的第五部分的数据为当前项数据的第3个?#32440;?#21644;第4个?#32440;?#30340;数据;
例如,当前项数据的第3个?#32440;?#21644;第4个?#32440;?#30340;数据为0x060x02,则第二偏移值为0x0602;
步骤703:JAVA智能卡根据第二偏移值和JAVA智能卡存储的方法组件起始地址得到方法物理地址;
具体地,第二偏移值加上方法组件起始地址等于方法物理地址;
例如,JAVA智能卡存储的方法组件起始地址为0x100680,第二偏移值为0x0602,则方法物理地址为0x100680+0x0602=0x100C82;
步骤704:JAVA智能卡根据方法物理地址和EEPROM基地址得到方法的偏移值,执行步骤710;
具体地,方法物理地址减去EEPROM基地址等于方法的偏移值;本实施例中,方法的偏移值为方法基于EEPROM的偏移地址;
例如,方法物理地址为0x100C82,EEPROM基地址为0x100380,则方法的偏移值为0x100C82–0x100380=0x0902;
步骤705:JAVA智能卡获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
具体地,当前项数据的第二部分的数据为当前项数据的第2个?#32440;?#30340;后7位数据;
步骤706:JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤707,否则执行步骤708;
具体地,第一预设值为19;
步骤707:JAVA智能卡更新第六指令的指令码,执行步骤708;
具体地,JAVA智能卡通过更新第六指令的指令码将调用EEPROM中静态方法第六指令更改为调用ROM中静态方法;
步骤708:JAVA智能卡根据包ID获取包的导出表地址;
步骤709:JAVA智能卡根据当前项数据的第五部分的数据和包的导出表地址,在包的导出表中获取方法的偏移值;
具体地,当前项数据的第五部分的数据为当前项数据的第3个?#32440;?#21644;第4 个?#32440;?#30340;数据;
步骤710:JAVA智能卡将方法的偏移值作为第一参数,根据第一参数更新第六指令的指令参数;
例如,第六指令为0x8D0x000x37,将第六指令的指令参数0x000x37更新为方法的偏移值0x0902,则更新后的第六指令为0x8D0x090x02;
本实施例中,步骤101至步骤110可替换为:
步骤s2-1:JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
具体地,读取地址的初始值为相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s2-2:JAVA智能卡根据第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s2-3,否则执行步骤s2-6;
步骤s2-3:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
步骤s2-4:JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s2-5:JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡 存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
步骤s2-6:JAVA智能卡判断是否已从应用协议数据单元中获取相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,是则执行步骤s2-7,否则JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址和已处理数据的长度,执行步骤s2-7;
步骤s2-7:JAVA智能卡根据第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s2-8,否则返回成功信息,结束;
步骤s2-8:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
步骤s2-9:JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s2-10:JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
除此之外,步骤101至步骤110可替换为:
步骤s3-1:JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据更新读取 地址和已处理数据的长度;
具体地,读取地址的初始值为相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
步骤s3-2:JAVA智能卡根据第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据,是则执行步骤s3-3,否则执行步骤s3-6;
步骤s3-3:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
步骤s3-4:JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s3-5:JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
步骤s3-6:JAVA智能卡根据第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s3-7,否则返回成功信息,结束;
步骤s3-7:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
步骤s3-8:JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s3-9:JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111。
除此之外,步骤101至步骤110可替换为:
步骤s4-1:JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
具体地,读取地址的初始值为相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
步骤s4-2:JAVA智能卡根据第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据,是则执行步骤s4-3,否则执行步骤s4-6;
步骤s4-3:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
步骤s4-4:JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s4-5:JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111;
步骤s4-6:JAVA智能卡根据第二未处理数据长度判断是否存在未处理的单 ?#32440;?#20462;正数据,是则执行步骤s4-7,否则返回成功信息,结束;
步骤s4-7:JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据;根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
步骤s4-8:JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
步骤s4-9:JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值,执行步骤111。
实施例3
本发明的实施例3提供一种高效更新JAVA指令的装置,如图9所示,该装置包括:第一获取模块301、第二获取模块302、第一判断模块303、第一处理模块304、第二处理模块305、第一更新模块306和输出模块307;
第一获取模块301,用于从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
第二获取模块302,用于根据第一获取模301块获取到的常量池组件中的索引值在常量池组件中获取当前项数据,判断是否获取到当前项数据;
第一判断模块303,用于当第二获取模块302获取到当前项数据时,根据当前项数据的第1个?#32440;?#21028;断当前项数据对应的JAVA指令的引用类型;
第一处理模块304,用于当第一判断模块303判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值, 根据偏移值和JAVA指令对应的组件起始地址得到第一参数;
第二处理模块305,用于当第一判断模块303判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和包的导出表地址在包的导出表中获取第一参数;
第一更新模块306,用于当第一处理模块304得到第一参数后,根据第一参数更新JAVA指令的指令参数;当第二处理模块305得到第一参数后,根据第一参数更新JAVA指令的指令参数;
输出模块307,用于当第二获取模块302未获取到当前项数据时,返回错误信息。
装置还包括:第三获取模块和第二判断模块;
第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的修正数据的长度作为未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的修正数据的长度数据的首地址;
第二判断模块,用于根据第三获取模块获取到的未处理数据长度判断是否存在未处理的修正数据;
输出模块307,还用于当第二判断模块判断不存在未处理的修正数据时,返回成功信息;
第一获取模块301,具体用于根据读取地址从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的相关地址组件的修正数据,更新未处理数据长度和读取地址;
装置还包括第三判断模块和接收模块;
第三判断模块,用于在第一更新模块306更新JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成;
输出模块307,还用于当第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息;
接收模块,用于当第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
第三获取模块包括第一获取单元和第二获取单元;
第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
第二获取单元,用于当第四判断模块判断未获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度时,根据读取地址从接收到的应用协议数据单元中获取相关地址组件的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;
第二判断模块包括第一判断单元和第二判断单元;
第一判断单元,用于当第一获取单元获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
第二判断单元,用于当第四判断模块判断已获取到双?#32440;?#20462;正数据的长度 数据作为第二未处理数据长度或第二获取单元获取到第二未处理数据长度时,根据第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
输出模块307,还用于当第二判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
第一获取模块301包括第三获取单元、第一更新单元和第四获取单元;
第三获取单元,用于当第一判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
第一更新单元,用于根据第三获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第四获取单元,用于根据第一更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
装置包括第四判断模块,用于当第一判断单元判断不存在未处理的单?#32440;?#20462;正数据时,判断是否已获取到双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
第一获取模块301包括第五获取单元、第二更新单元和第六获取单元;
第五获取单元,用于当第二判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
第二更新单元,用于根据第五获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第六获取单元,用于根据第二更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。
除此之外,第三获取模块包括第七获取单元和第八获取单元;
第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
第八获取单元,用于当第五判断模块判断未获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度时,根据读取地址从接收到的应用协议数据单元中获取相关地址组件的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;
第二判断模块包括第三判断单元和第四判断单元;
第三判断单元,用于当第七获取单元获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
第四判断单元,用于当第五判断模块判断已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度或第八获取单元获取到第二未处理数据长度时,根据第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
输出模块307,还用于当第四判断单元判断不存在未处理的单?#32440;?#20462;正数据 时,返回成功信息;
第一获取模块301包括第九获取单元、第三更新单元和第十获取单元;
第九获取单元,用于当第三判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
第三更新单元,用于根据第九获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第十获取单元,用于根据第三更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
装置包括第五判断模块,用于当第三判断单元判断不存在未处理的双?#32440;?#20462;正数据时,判断是否已获取到单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度;
第一获取模块301包括第十一获取单元、第四更新单元和第十二获取单元;
第十一获取单元,用于当第四判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
第四更新单元,用于根据第十一获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第十二获取单元,用于根据第四更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。
除此之外,第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的单?#32440;?#20462;正数据的长度数据的首地址;
第二判断模块包括第五判断单元和第六判断单元;
第五判断单元,用于当第三获取模块获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
第六判断单元,用于当第五判断单元判断不存在未处理的单?#32440;?#20462;正数据时,根据第三获取模块获取到的第二未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
输出模块307,还用于当第六判断单元判断不存在未处理的双?#32440;?#20462;正数据时,返回成功信息;
第一获取模块301包括第十三获取单元、第五更新单元和第十四获取单元;
第十三获取单元,用于当第五判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
第五更新单元,用于根据第十三获取单元获取到的第一修正数据更新被重 定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第十四获取单元,用于根据第五更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值;
第一获取模块301包括第十五获取单元、第六更新单元和第十六获取单元;
第十五获取单元,用于当第六判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
第六更新单元,用于根据第十五获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第十六获取单元,用于根据第六更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值。
除此之外,第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的双?#32440;?#20462;正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的单?#32440;?#20462;正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的双?#32440;?#20462;正数据的长度数据的首地址;
第二判断模块包括第七判断单元和第八判断单元;
第七判断单元,用于当第三获取模块获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的双?#32440;?#20462;正数据;
第八判断单元,用于当第七判断单元判断不存在未处理的双?#32440;?#20462;正数据时,根据第三获取模块获取到的第二未处理数据长度判断是否存在未处理的单?#32440;?#20462;正数据;
输出模块307,还用于当第八判断单元判断不存在未处理的单?#32440;?#20462;正数据时,返回成功信息;
第一获取模块301包括第十七获取单元、第七更新单元和第十八获取单元;
第十七获取单元,用于当第七判断单元判断存在未处理的双?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
第七更新单元,用于根据第十七获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第十八获取单元,用于根据第七更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个?#32440;?#30340;数据作为常量池组件中的索引值;
第一获取模块301包括第十九获取单元、第八更新单元和第二十获取单元;
第十九获取单元,用于当第八判断单元判断存在未处理的单?#32440;?#20462;正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的1个?#32440;?#30340;数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
第八更新单元,用于根据第十九获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
第二十获取单元,用于根据第八更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取1个?#32440;?#30340;数据作为常量池组件中的索引值。
装置包括第四获取模块、第六判断模块、第七判断模块和接收模块;
第四获取模块,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的修正数据的长度数据的首地址;
第一获取模块301,具体用于根据读取地址从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的相关地址组件的修正数据,更新未处理数据长度和读取地址;
第六判断模块,用于在第一更新模块306更新JAVA指令的指令参数后,判断是否处理完相关地址组件中的所有数据;
输出模块307,还用于当第六判断模块判断已处理完相关地址组件中的所有数据后,返回成功信息;
第七判断模块,用于当第六判断模块判断未处理完相关地址组件中的所有数据后,判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成;
输出模块307,还用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,返回成功信息;
接收模块,用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
若当前项数据对应的JAVA指令为第一指令,第一判断模块303,具体用于判断第一指令的引用类型;
第一处理模块304,具体用于当第一判断模块303判断第一指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据类信息物理地址和EEPROM基地址得到类信息的偏移值;
第二处理模块305包括第二十一获取单元、第九判断单元、第九更新单元和第二十二获取单元;
第二十一获取单元,用于当第一判断模块303判断第一指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID;
第九判断单元,用于判断第二十一获取单元获取到的包ID是否小于第一预设值;
第九更新单元,用于当第九判断单元判断包ID小于第一预设值时,更新第一指令的指令码;
第二十二获取单元,用于当第九判断单元判断包ID不小于第一预设值或第九更新单元更新第一指令的指令码后,根据包ID获取包的导出表地址,根据当 前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值;
第一更新模块306,具体用于当第一处理模块304得到偏移值后,将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数;当第二十二获取单元获取到偏移值后,将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数。
若当前项数据对应的JAVA指令为第二指令,第一判断模块303,具体用于判断第二指令的引用类型;
第一处理模块304,具体用于当第一判断模块303判断第二指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据类信息物理地址和EEPROM基地址得到类信息的偏移值;
第二处理模块305包括第二十三获取单元、第十判断单元、第一处理单元和第二处理单元;
第二十三获取单元,用于当第一判断模块303判断第二指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;
第十判断单元,用于判断第二十三获取单元获取到的包ID是否小于第一预设值;
第一处理单元,用于当第十判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址;
第二处理单元,用于当第十判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
第一更新模块306包括第二十四获取单元、第十一判断单元、第三处理单元、第四处理单元、第五处理单元和第十更新单元;
第二十四获取单元,用于当第一处理模块304得到类信息物理地址,或第一处理单元得到类信息物理地址,或第二处理单元得到类信息物理地址后,根据类信息物理地址,在JAVA智能卡存储区获取当前类信息;
第十一判断单元,用于判断第二十四获取单元获取到的当前类信息的第一部分的数据是否为第二预设值;
第三处理单元,用于当第十一判断单元判断当前类信息的第一部分的数据为第二预设值时,根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址;
第四处理单元,用于当第十一判断单元判断当前类信息的第一部分的数据不为第二预设值时,根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址;
第五处理单元,用于当第三处理单元或第四处理单元得到当前类信息的父类的类信息的物理地址后,根据当前类信息的父类的类信息的物理地址,在JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
第十更新单元,用于当第五处理单元得到索引值后,将索引值作为第一参数,根据第一参数更新第二指令的指令参数。
若当前项数据对应的JAVA指令为第三指令,第一判断模块303,具体用于判断第三指令的引用类型;
第一处理模块304,具体用于当第一判断模块303判断第三指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
第二处理模块305包括第二十五获取单元、第十二判断单元、第六处理单元和第七处理单元;
第二十五获取单元,用于当第一判断模块303判断第三指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;
第十二判断单元,用于判断第二十五获取单元获取到的包ID是否小于第一预设值;
第六处理单元,用于当第十二判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址;
第七处理单元,用于当第十二判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
第一更新模块306,具体用于当第一处理模块303得到类信息物理地址,或第六处理单元获取到类信息物理地址,或第七处理单元获取类信息物理地址后,根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第4个?#32440;?#30340;数据得到第一 参数,根据第一参数更新第三指令的指令参数。
若当前项数据对应的JAVA指令为第四指令,第一判断模块303,具体用于判断第四指令的引用类型;
第一处理模块3004,具体用于当第一判断模块303判断第四指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
第二处理模块305包括第二十六获取单元、第十三判断单元、第八处理单元和第九处理单元;
第二十六获取单元,用于当第一判断模块303判断第四指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;
第十三判断单元,用于判断第二十六获取单元获取到的包ID是否小于第一预设值;
第八处理单元,用于当第十三判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码;
第九处理单元,用于当第十三判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
第一更新模块306,具体用于当第一处理模块303得到类信息物理地址,或第八处理单元获取到类信息物理地址,或第九处理单元获取到类信息物理地址 后,根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将被调用方法的偏移地址作为第一参数,根据第一参数更新第四指令的指令参数。
若当前项数据对应的JAVA指令为第五指令,第一判断模块303,具体用于判断第五指令的引用类型;
第一处理模块304,具体用于当第一判断模块303判断第五指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据第二偏移值和JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址;
第二处理模块305,具体用于当第一判断模块303判断第五指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址,根据当前项数据的第一部分的数据和包的导出表地址,在导出表中获取被访问静态域的偏移地址;
第一更新模块306,具体用于当第一处理模块304得到被访问静态域的偏移地址,或第二处理模块305得到被访问静态域的偏移地址后,将被访问静态域的偏移地址作为第一参数,根据第一参数更新第五指令的指令参数。
若当前项数据对应的JAVA指令为第六指令,第一判断模块303,具体用于判断第六指令的引用类型;
第一处理模块304,具体用于当第一判断模块303判断第六指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据第二偏移值和JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据方法物 理地址和EEPROM基地址得到方法的偏移值;
第二处理模块305包括第二十七获取单元、第十四判断单元、第十一更新单元和第二十八获取单元;
第二十七获取单元,用于当第一判断模块303判断第六指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID;
第十四判断单元,用于判断第二十七获取单元获取到的包ID是否小于第一预设值;
第十一更新单元,用于当第十四判断单元判断包ID小于第一预设值时,更新第六指令的指令码;
第二十八获取单元,用于当第十三判断单元判断包ID不小于第一预设值,或第十一更新单元更新第六指令的指令码后,根据包ID获取包的导出表地址,根据当前项数据的第五部分的数据和包的导出表地址,在包的导出表中获取方法的偏移值;
第一更新模块306,具体用于当第一处理模块304得到方法的偏移值,或第二十八获取单元获取到方法的偏移值后,将方法的偏移值作为第一参数,根据第一参数更新第六指令的指令参数。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任?#38382;?#24713;本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,?#21152;?#28085;盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

关于本文
本文标题:一种高效更新JAVA指令的方法和装置.pdf
链接地址:http://www.pqiex.tw/p-6115877.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 内蒙古十一选五每天开奖结果 山东群英会时间 双色球合买的规则 幸运赛车人工计划 快乐飞艇官网 新疆十一选五前二直选 山西十一选五开奖查询结果 幸运赛车视频直播 彩票app不能合买 中国足协官网