一种高效更新java指令的方法和装置制造方法

文档序号:6544373阅读:115来源:国知局
一种高效更新java指令的方法和装置制造方法
【专利摘要】本发明公开一种高效更新JAVA指令的方法和装置,包括:JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从存储区中获取常量池组件中的索引值;JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取当前项数据,JAVA智能卡判断当前项数据对应的JAVA指令的引用类型,若是内部引用则根据当前项数据的第一预设部分得到偏移值,根据偏移值和指令对应的组件起始地址得到第一参数,若是外部引用则根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据在包的导出表中获取第一参数;JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数。
【专利说明】一种高效更新JAVA指令的方法和装置
【技术领域】
[0001]本发明涉及信息处理领域,尤其涉及一种高效更新JAVA指令的方法和装置。
【背景技术】
[0002]对于JAVA智能卡而言,应用程序的下载过程即是CAP文件写入到EEPROM的过程,即是对CAP文件的下载过程。
[0003]现有技术中,在CAP文件的下载过程中,JAVA智能卡首先要根据卡外引用计算出被引用数据的物理地址,然后将物理地址填充的相应的子表中,再根据物理地址在主表和子表中的索引得到该物理地址的引用,不但需要进行重定位操作,而且还要进行填表的步骤,下载过程复杂;JAVA卡虚拟机在执行的时候则需要根据引用值通过查找主表和子表的方式找到实际的数据,JAVA卡虚拟机在执行过程中访问数据的速度低。

【发明内容】

[0004]本发明的目的是为了克服现有技术的不足,提供一种高效更新JAVA指令的方法和装置,简化了 JAVA智能卡在CAP文件的下载过程中的处理流程。
[0005]本发明提供的一种高效更新JAVA指令的方法,包括:
[0006]步骤SI JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
[0007]步骤S2:所述JAVA智能卡根据获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束;
[0008]步骤S3:所述JAVA智能卡根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5 ;
[0009]步骤S4:所述JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数,执行步骤S6 ;
[0010]步骤S5:所述JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数,执行步骤S6 ;
[0011]步骤S6:所述JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数,结束。
[0012]所述步骤SI之前包括:
[0013]步骤SO-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
[0014]步骤S0-2:所述JAVA智能卡根据所述未处理数据长度判断是否存在未处理的修正数据,是则执行步骤Si,否则返回成功信息,结束;[0015]所述步骤SI具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
[0016]所述步骤S6之后包括:
[0017]步骤S7:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S0-2,否则返回步骤S0-2。
[0018]所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度按键;
[0019]所述步骤SO-1至步骤SI具体为:
[0020]步骤sl-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址;
[0021]步骤sl-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤sl-3,否则执行步骤sl-6 ;
[0022]步骤sl-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0023]步骤sl-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0024]步骤sl-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S4 ;
[0025]步骤sl-6:所述JAVA智能卡判断是否已获取双字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤sl-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤sl-7 ;
[0026]步骤sl-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤sl-8,否则返回成功信息,结束;
[0027]步骤sl-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0028]步骤sl-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0029]步骤sl-ΙΟ:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S2。
[0030]所述相关地址组件中的所述修正数据的长度时间包括单字节修正数据的长度数据和双字节修正数据的长度数据;
[0031]所述步骤SO-1至步骤SI具体为:
[0032]步骤s2_l:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址;
[0033]步骤s2_2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s2-3,否则执行步骤s2-6 ;
[0034]步骤s2_3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0035]步骤s2_4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0036]步骤s2_5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S4 ;
[0037]步骤s2-6:所述JAVA智能卡判断是否已获取单字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤s2_7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s2-7 ;
[0038]步骤s2_7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s2-8,否则返回成功信息,结束;
[0039]步骤s2_8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0040]步骤s2_9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0041 ] 步骤s2-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S2。
[0042]所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度数据;
[0043]所述步骤SO-1至步骤SI具体为:
[0044]步骤s3_l:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址;
[0045]步骤s3_2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s3-3,否则执行步骤s3-6 ;
[0046]步骤s3_3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0047]步骤s3_4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0048]步骤s3_5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S4 ;
[0049]步骤s3_6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s3-7,否则返回成功信息,结束;
[0050]步骤s3_7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0051]步骤s3_8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0052]步骤s3_9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S2。
[0053]所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度数据;
[0054]所述步骤SO-1至步骤SI具体为:
[0055]步骤s4_l:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址;
[0056]步骤s4_2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s4-3,否则执行步骤s4-6 ;
[0057]步骤s4_3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0058]步骤s4_4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0059]步骤s4_5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S4 ;
[0060]步骤s4_6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s4-7,否则返回成功信息,结束;
[0061]步骤s4_7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0062]步骤s4_8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0063]步骤s4_9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S2。
[0064]所述步骤SI之前包括:
[0065]步骤S0-1’:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址,执行步骤Si ;
[0066]所述步骤SI具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
[0067]所述步骤S6之后包括:
[0068]步骤S8:所述JAVA智能卡判断是否处理完所述相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤S9 ;
[0069]步骤S9:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤SI,否则返回步骤SI。
[0070]若当前项数据对应的JAVA指令为第一指令,所述步骤S3至步骤S6具体为:
[0071]步骤Al:所述JAVA智能卡判断所述第一指令的引用类型,若是内部引用则执行步骤A2,若是外部引用则执行步骤A3 ;
[0072]步骤A2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值,执行步骤A7 ;
[0073]步骤A3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0074]步骤A4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤A5,否则执行步骤A6 ;
[0075]步骤A5:所述JAVA智能卡更新所述第一指令的指令码,执行步骤A6 ;
[0076]步骤A6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,执行步骤A7 ;
[0077]步骤A7:所述JAVA智能卡将所述类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。
[0078]若当前项数据对应的JAVA指令为第二指令,所述步骤S3至步骤S6具体为:
[0079]步骤B1:所述JAVA智能卡判断所述第二指令的引用类型,若是内部引用则执行步骤B2,若是外部引用则执行步骤B3 ;
[0080]步骤B2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤B7 ;
[0081]步骤B3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0082]步骤B4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤B5,否则执行步骤B6;
[0083]步骤B5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤B7 ;
[0084]步骤B6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤B7 ;
[0085]步骤B7:所述JAVA智能卡根据所述类信息物理地址,在所述JAVA智能卡存储区获取当前类信息;
[0086]步骤B8:所述JAVA智能卡判断当前类信息的第一部分的数据是否为第二预设值,是则执行步骤B9,否则执行步骤BlO ;
[0087]步骤B9:所述JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤Bll ;
[0088]步骤BlO:所述JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤Bll ;
[0089]步骤Bll:所述JAVA智能卡根据所述当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
[0090]步骤B12:所述JAVA智能卡将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。
[0091]若当前项数据对应的JAVA指令为第三指令,所述步骤S3至步骤S6具体为:
[0092]步骤Cl:所述JAVA智能卡判断所述第三指令的引用类型,若是内部引用则执行步骤C2,若是外部引用则执行步骤C3 ;
[0093]步骤C2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤C7 ;
[0094]步骤C3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0095]步骤C4:所述JAVA所述智能卡判断所述包ID是否小于第一预设值,是则执行步骤C5,否则执行步骤C6;
[0096]步骤C5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤C7 ;
[0097]步骤C6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤C7 ;
[0098]步骤C7 JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第四部分的数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。
[0099]若当前项数据对应的JAVA指令为第四指令,所述步骤S3至步骤S6具体为:
[0100]步骤Dl:所述JAVA智能卡判断所述第四指令的引用类型,若是内部引用则执行步骤D2,若是外部引用则执行步骤D3 ;
[0101]步骤D2:所述JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤D7 ;
[0102]步骤D3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0103]步骤D4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤D5,否则执行步骤D6;
[0104]步骤D5:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码,执行步骤D7 ;
[0105]步骤D6:所述JAVA智能卡根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤D7 ;
[0106]步骤D7:所述JAVA智能卡根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。
[0107]若当前项数据对应的JAVA指令为第五指令,所述步骤S3至步骤S6具体为:
[0108]步骤El:所述JAVA智能卡判断所述第五指令的引用类型,若是内部引用则执行步骤E2,若是外部引用则执行步骤E3 ;
[0109]步骤E2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤E4 ;
[0110]步骤E3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址,执行步骤E4;
[0111]步骤E4:所述JAVA智能卡将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。
[0112]若当前项数据对应的JAVA指令为第六指令,所述步骤S3至步骤S6具体为:
[0113]步骤Fl:所述JAVA智能卡判断所述第六指令的引用类型,若是内部引用则执行步骤F2,若是外部引用则执行步骤F3 ;
[0114]步骤F2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值,执行步骤F7 ;
[0115]步骤F3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID ;
[0116]步骤F4:所述JAVA智能卡判断所述包ID是否小于第一预设值,是则执行步骤F5,否则执行步骤F6;
[0117]步骤F5:所述JAVA智能卡更新第六指令的指令码,执行步骤F6 ;
[0118]步骤F6:所述JAVA智能卡根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
[0119]步骤F7:所述JAVA智能卡将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。
[0120]一种高效更新JAVA指令的装置,包括:第一获取模块、第二获取模块、第一判断模块、第一处理模块、第二处理模块、第一更新模块和输出模块;
[0121]所述第一获取模块,用于从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
[0122]所述第二获取模块,用于根据所述第一获取模块获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据;
[0123]所述第一判断模块,用于当所述第二获取模块获取到当前项数据时,根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型;
[0124]所述第一处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数;
[0125]所述第二处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数;
[0126]所述第一更新模块,用于当所述第一处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;当所述第二处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;
[0127]所述输出模块,用于当所述第二获取模块未获取到当前项数据时,返回错误信息。
[0128]所述装置还包括:第三获取模块和第二判断模块;
[0129]所述第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
[0130]所述第二判断模块,用于根据所述第三获取模块获取到的所述未处理数据长度判断是否存在未处理的修正数据;
[0131]所述输出模块,还用于当所述第二判断模块判断不存在未处理的修正数据时,返回成功信息;
[0132]所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
[0133]所述装置还包括第三判断模块和接收模块;
[0134]所述第三判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
[0135]所述输出模块,还用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息;
[0136]所述接收模块,用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
[0137]所述第三获取模块包括第一获取单元和第二获取单元;
[0138]所述第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址;
[0139]所述第二获取单元,用于当第四判断模块判断未获取到双字节修正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
[0140]所述第二判断模块包括第一判断单元和第二判断单元;
[0141]所述第一判断单元,用于当所述第一获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据;
[0142]所述第二判断单元,用于当所述第四判断模块判断已获取到双字节修正数据的长度数据作为第二未处理数据长度或所述第二获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据;
[0143]所述输出模块,还用于当所述第二判断单元判断不存在未处理的双字节修正数据时,返回成功信息;
[0144]所述第一获取模块包括第三获取单元、第一更新单元和第四获取单元;
[0145]所述第三获取单元,用于当所述第一判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0146]所述第一更新单元,用于根据所述第三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0147]所述第四获取单元,用于根据所述第一更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值;
[0148]所述装置包括所述第四判断模块,用于当所述第一判断单元判断不存在未处理的单字节修正数据时,判断是否已获取到双字节修正数据的长度数据作为第二未处理数据长度;
[0149]所述第一获取模块包括第五获取单元、第二更新单元和第六获取单元;
[0150]所述第五获取单元,用于当所述第二判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0151]所述第二更新单元,用于根据所述第五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0152]所述第六获取单元,用于根据所述第二更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
[0153]所述第三获取模块包括第七获取单元和第八获取单元;
[0154]所述第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址;
[0155]所述第八获取单元,用于当第五判断模块判断未获取到单字节修正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;
[0156]所述第二判断模块包括第三判断单元和第四判断单元;
[0157]所述第三判断单元,用于当所述第七获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据;
[0158]所述第四判断单元,用于当所述第五判断模块判断已获取到单字节修正数据的长度数据作为第二未处理数据长度或所述第八获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据;
[0159]所述输出模块,还用于当所述第四判断单元判断不存在未处理的单字节修正数据时,返回成功信息;[0160]所述第一获取模块包括第九获取单元、第三更新单元和第十获取单元;
[0161]所述第九获取单元,用于当所述第三判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0162]所述第三更新单元,用于根据所述第九获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0163]所述第十获取单元,用于根据所述第三更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值;
[0164]所述装置包括所述第五判断模块,用于当所述第三判断单元判断不存在未处理的双字节修正数据时,判断是否已获取到单字节修正数据的长度数据作为第二未处理数据长度;
[0165]所述第一获取模块包括第十一获取单元、第四更新单元和第十二获取单元;
[0166]所述第十一获取单元,用于当所述第四判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0167]所述第四更新单元,用于根据所述第十一获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0168]所述第十二获取单元,用于根据所述第四更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
[0169]所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址;
[0170]所述第二判断模块包括第五判断单元和第六判断单元;
[0171]所述第五判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据;
[0172]所述第六判断单元,用于当所述第五判断单元判断不存在未处理的单字节修正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的双字节修正数据;
[0173]所述输出模块,还用于当所述第六判断单元判断不存在未处理的双字节修正数据时,返回成功信息;
[0174]所述第一获取模块包括第十三获取单元、第五更新单元和第十四获取单元;[0175]所述第十三获取单元,用于当所述第五判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;
[0176]所述第五更新单元,用于根据所述第十三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0177]所述第十四获取单元,用于根据所述第五更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值;
[0178]所述第一获取模块包括第十五获取单元、第六更新单元和第十六获取单元;
[0179]所述第十五获取单元,用于当所述第六判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0180]所述第六更新单元,用于根据所述第十五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0181]所述第十六获取单元,用于根据所述第六更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
[0182]所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址;
[0183]所述第二判断模块包括第七判断单元和第八判断单元;
[0184]所述第七判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据;
[0185]所述第八判断单元,用于当所述第七判断单元判断不存在未处理的双字节修正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的单字节修正数据;
[0186]所述输出模块,还用于当所述第八判断单元判断不存在未处理的单字节修正数据时,返回成功信息;
[0187]所述第一获取模块包括第十七获取单元、第七更新单元和第十八获取单元;
[0188]所述第十七获取单元,用于当所述第七判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址;[0189]所述第七更新单元,用于根据所述第十七获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0190]所述第十八获取单元,用于根据所述第七更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值;
[0191]所述第一获取模块包括第十九获取单元、第八更新单元和第二十获取单元;
[0192]所述第十九获取单元,用于当所述第八判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址;
[0193]所述第八更新单元,用于根据所述第十九获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;
[0194]所述第二十获取单元,用于根据所述第八更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
[0195]所述装置包括第四获取模块、第六判断模块、第七判断模块和接收模块;
[0196]所述第四获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址;
[0197]所述第一获取模块,具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址;
[0198]所述第六判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断是否处理完所述相关地址组件中的所有数据;
[0199]所述输出模块,还用于当所述第六判断模块判断已处理完所述相关地址组件中的所有数据后,返回成功信息;
[0200]所述第七判断模块,用于当所述第六判断模块判断未处理完所述相关地址组件中的所有数据后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;
[0201]所述输出模块,还用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,返回成功信息;
[0202]所述接收模块,用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单
J Li ο
[0203]若当前项数据对应的JAVA指令为第一指令,所述第一判断模块,具体用于判断所述第一指令的引用类型;
[0204]所述第一处理模块,具体用于当所述第一判断模块判断所述第一指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
[0205]所述第二处理模块包括第二十一获取单元、第九判断单元、第九更新单元和第二十二获取单元;
[0206]所述第二十一获取单元,用于当所述第一判断模块判断所述第一指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0207]所述第九判断单元,用于判断所述第二十一获取单元获取到的所述包ID是否小
于第一预设值;
[0208]所述第九更新单元,用于当所述第九判断单元判断所述包ID小于第一预设值时,更新第一指令的指令码;
[0209]所述第二十二获取单元,用于当所述第九判断单元判断所述包ID不小于第一预设值或所述第九更新单元更新第一指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值;
[0210]所述第一更新模块,具体用于当所述第一处理模块得到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数;当所述第二十二获取单元获取到所述偏移值后,将类信息的偏移值作为所述第一参数,根据所述第一参数更新所述第一指令的指令参数。
[0211 ] 若当前项数据对应的JAVA指令为第二指令,所述第一判断模块,具体用于判断所述第二指令的引用类型;
[0212]所述第一处理模块,具体用于当所述第一判断模块判断所述第二指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据所述类信息物理地址和EEPROM基地址得到类信息的偏移值;
[0213]所述第二处理模块包括第二十三获取单元、第十判断单元、第一处理单元和第二处理单元;
[0214]所述第二十三获取单元,用于当所述第一判断模块判断所述第二指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0215] 所述第十判断单元,用于判断所述第二十三获取单元获取到的所述包ID是否小
于第一预设值;
[0216]所述第一处理单元,用于当所述第十判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
[0217]所述第二处理单元,用于当所述第十判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0218]所述第一更新模块包括第二十四获取单元、第十一判断单元、第三处理单元、第四处理单元、第五处理单元和第十更新单元;
[0219]所述第二十四获取单元,用于当所述第一处理模块得到类信息物理地址,或所述第一处理单元得到类信息物理地址,或所述第二处理单元得到类信息物理地址后,根据所述类信息物理地址,在JAVA智能卡存储区获取当前类信息;
[0220]所述第十一判断单元,用于判断所述第二十四获取单元获取到的当前类信息的第一部分的数据是否为第二预设值;
[0221]所述第三处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据为第二预设值时,根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址;
[0222]所述第四处理单元,用于当所述第十一判断单元判断当前类信息的第一部分的数据不为第二预设值时,根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址;
[0223]所述第五处理单元,用于当所述第三处理单元或所述第四处理单元得到当前类信息的父类的类信息的物理地址后,根据当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
[0224]所述第十更新单元,用于当所述第五处理单元得到所述索引值后,将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。
[0225]若当前项数据对应的JAVA指令为第三指令,所述第一判断模块,具体用于判断所述第三指令的引用类型;
[0226]所述第一处理模块,具体用于当所述第一判断模块判断所述第三指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
[0227]所述第二处理模块包括第二十五获取单元、第十二判断单元、第六处理单元和第七处理单元;
[0228]所述第二十五获取单元,用于当所述第一判断模块判断所述第三指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0229]所述第十二判断单元,用于判断所述第二十五获取单元获取到的所述包ID是否
小于第一预设值;
[0230]所述第六处理单元,用于当所述第十二判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址;
[0231]所述第七处理单元,用于当所述第十二判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0232]所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第六处理单元获取到所述类信息物理地址,或所述第七处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据所述被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第4个字节的数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。
[0233]若当前项数据对应的JAVA指令为第四指令,所述第一判断模块,具体用于判断所述第四指令的引用类型;
[0234]所述第一处理模块,具体用于当所述第一判断模块判断所述第四指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据所述第一偏移值和所述JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
[0235]所述第二处理模块包括第二十六获取单元、第十三判断单元、第八处理单元和第九处理单元;
[0236]所述第二十六获取单元,用于当所述第一判断模块判断所述第四指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址;
[0237]所述第十三判断单元,用于判断所述第二十六获取单元获取到的所述包ID是否
小于第一预设值;
[0238]所述第八处理单元,用于当所述第十三判断单元判断所述包ID小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码;
[0239]所述第九处理单元,用于当所述第十三判断单元判断所述包ID不小于第一预设值时,根据当前项数据的第三部分的数据和所述包的导出表地址,在包的导出表中获取类信息的偏移值,根据所述类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0240]所述第一更新模块,具体用于当所述第一处理模块得到所述类信息物理地址,或所述第八处理单元获取到所述类信息物理地址,或所述第九处理单元获取到所述类信息物理地址后,根据所述类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将所述被调用方法的偏移地址作为第一参数,根据所述第一参数更新所述第四指令的指令参数。
[0241]若当前项数据对应的JAVA指令为第五指令,所述第一判断模块,具体用于判断所述第五指令的引用类型;
[0242]所述第一处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址;
[0243]所述第二处理模块,具体用于当所述第一判断模块判断所述第五指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址;[0244]所述第一更新模块,具体用于当所述第一处理模块得到所述被访问静态域的偏移地址,或所述第二处理模块得到所述被访问静态域的偏移地址后,将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。
[0245]若当前项数据对应的JAVA指令为第六指令,所述第一判断模块,具体用于判断所述第六指令的引用类型;
[0246]所述第一处理模块,具体用于当所述第一判断模块判断所述第六指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据所述方法物理地址和EEPROM基地址得到方法的偏移值;
[0247]所述第二处理模块包括第二十七获取单元、第十四判断单元、第十一更新单元和第二十八获取单元;
[0248]所述第二十七获取单元,用于当所述第一判断模块判断所述第六指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID ;
[0249]所述第十四判断单元,用于判断所述第二十七获取单元获取到的所述包ID是否
小于第一预设值;
[0250]所述第十一更新单元,用于当所述第十四判断单元判断所述包ID小于所述第一预设值时,更新所述第六指令的指令码;
[0251]所述第二十八获取单元,用于当所述第十三判断单元判断所述包ID不小于所述第一预设值,或所述第十一更新单元更新第六指令的指令码后,根据所述包ID获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;
[0252]所述第一更新模块,具体用于当所述第一处理模块得到所述方法的偏移值,或所述第二十八获取单元获取到所述方法的偏移值后,将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第六指令的指令参数。
[0253]本发明与现有技术相比,具有以下优点:
[0254]本发明提供的方法根据JAVA智能卡卡外引用计算出被引用数据的物理地址和偏移地址,直接将被引用数据的偏移地址覆盖到指令中相应的被重定位处,简化了 JAVA智能卡在CAP文件的下载过程中的处理流程。
【专利附图】

【附图说明】
[0255]图1是本发明实施例1提供的一种高效更新JAVA指令的方法的流程图;
[0256]图2是本发明实施例2提供的一种高效更新JAVA指令的方法的流程图;
[0257]图3是本发明实施例2提供的对第一指令进行重定位的方法的流程图;
[0258]图4是本发明实施例2提供的对第二指令进行重定位的方法的流程图;
[0259]图5是本发明实施例2提供的对第三指令进行重定位的方法的流程图;
[0260]图6是本发明实施例2提供的对第四指令进行重定位的方法的流程图;
[0261]图7是本发明实施例2提供的对第五指令进行重定位的方法的流程图;
[0262]图8是本发明实施例2提供的对第六指令进行重定位的方法的流程图;
[0263]图9是本发明实施例3提供的一种高效更新JAVA指令的装置的模块图。【具体实施方式】
[0264]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0265]JAVA智能卡的可执行文件(CAP文件)是编译多个应用程序(Applet)的生成结果,
包含了一个包中定义的所有类和接口,与包之间是--对应的关系。实际发卡操作时,首
先需要将该可执行文件下载至JAVA智能卡中,并安装需要的应用实例;用户使用安装的应用实例执行操作功能。在上述两个操作阶段均使用了可执行文件(CAP文件)所提供的内容。CAP文件包含12个组件,组件的标签值从I至12分别为:头组件(COMPONENTJfeader)、目录组件(C0MP0NENT_Directory)、应用程序组件(C0MP0NENT_Applet)、输入组件(C0MP0NENT_Import)、常量池组件(C0MP0NENT_ConstantPooI)、类信息组件(COMPONENT,Class)、方法组件(C0MP0NENT_Method)、静态域组件(C0MP0NENT_StaticFieId)、相关地址组件(COMPONENT_ReferenceLocation)、输出组件(C0MP0NENT_Export)、描述符组件(C0MP0NENT_Descriptor)和调试组件(C0MP0NENT_Debug),一个完整的 CAP 文件,除应用程序组件(C0MP0NENT_AppIet)、输出组件(C0MP0NENT_Export)和调试组件(COMPONENT,Debug)是可选外,其他均为必选。各个组件作为应用协议数据单元中的数据按顺序被发送到JAVA智能卡中;若一个组件的数据的长度超过应用协议数据单元规定的传输数据的长度,则该组件被分包通过多个应用协议数据单元发送给JAVA智能卡;若一个组件的数据的长度未达到应用协议数据单元规定的传输数据的长度,则在该应用协议数据单元继续传输下一个组件的数据,即,JAVA智能卡接收到的应用协议数据单元中可能只包含一个组件的数据,也可能包含多个组件的数据。最后在JAVA智能卡上只保留了 4个组件:方法组件(C0MP0NENT_Method)、类信息组件(C0MP0NENT_Class)、静态域组件(COMPONENT,StaticField)和输出组件(C0MP0NENT_Export),其余的组件只是安装时提取有用信息而不在JAVA智能卡中保存。
[0266]CAP文件的12个组件中,类信息组件(C0MP0NENT_Class)保存应用声明的所有类和接口的信息;方法组件(C0MP0NENT_Method)保存应用声明的所有方法和接口,并利用2字节索引引用类、方法和域;常量池组件(C0MP0NENT_COnStantPOOl)保存方法组件(C0MP0NENT_Method)引用的所有类、方法和域信息,分为类、实例域、虚方法、父方法、静态域和静态方法6类,每组信息为4个字节;相关地址组件(C0MP0NENT_ReferenceLocation)保存方法组件(C0MP0NENT_Method)中索引的偏移。
[0267]在CAP文件的下载过程中,JAVA智能卡需要将一部分组件进行解析,同时对相关地址组件(C0MP0NENT_ReferenceLocation )中指定的位置进行链接,能够链接到方法组件(C0MP0NENT_Method)中的一个索引号,并根据索引号查找常量池组件(C0MP0NENT_ConstantPool)中保存的、与该索引号对应的类、方法或域在EEPROM中的实际地址,调用实际地址中存储的数据;也就是说,方法的调用其实是需要两个步骤来实现的:
[0268]1.根据相关地址组件(C0MP0NENT_ReferenceLocation)中指定的位置进行链接,获取方法组件(C0MP0NE NT_Method)中的索引号;[0269]2.根据索引号查找常量池组件(C0MP0NENT_ConstantPool)中保存的、与该索引号对应的类、方法或域在EEPROM中的实际地址,调用实际地址中存储的数据。
[0270]实施例1
[0271]本发明的实施例1提供一种高效更新JAVA指令的方法,如图1所示,该方法包括:
[0272]步骤SI JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
[0273]步骤S2 JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束;
[0274]步骤S3 JAVA智能卡根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5;
[0275]步骤S4 JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据偏移值和JAVA指令对应的组件起始地址得到第一参数,执行步骤S6 ;
[0276]步骤S5 JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和包的导出表地址在包的导出表中获取第一参数,执行步骤S6 ;
[0277]步骤S6 JAVA智能卡根据第一参数更新JAVA指令的指令参数,结束。
[0278]实施例2
[0279]本发明的实施例2提供一种高效更新JAVA指令的方法,如图2所示,该方法包括:
[0280]当JAVA智能卡接收到的应用协议数据单元中组件的标签值为9时,执行以下步骤:
[0281]步骤101 JAVA智能卡从应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
[0282]具体地,JAVA智能卡获取应用协议数据单元中组件的标签值之后的2个字节的数据作为相关地址组件的长度;读取地址的初始值为相关地址组件的单字节修正数据的长度数据的首地址,单字节修正数据的长度数据为2个字节,之后为单字节修正数据;已处理数据的长度初始值为O ;更新读取地址为将读取地址自加2,更新已处理数据的长度为将已处理数据的长度自加3 ;
[0283]例如,应用协议数据单元为:
[0284]0x090x000x66
[0285]0x000x30
[0286]OxI20x040x390x2D0x2B0x0D0x700x0C0x020x070x220x040x100x050x020x090x030xlC0x020x0E0x040xl00x050x020x0B0xl90xlA0x060x060x040xl50x020xll0x040xll0x020x120x040x0A0x050x020x0A0x0A0xl10x050x060x110x07
[0287]0x000x32
[0288]0χ070χ060χ0Β0χ040χ060χ070χ110χ120χ050χ080χ090χ170χ2Β0χ170χ160χ150χ060x030x080x080x080x080x060x030xl50x290x0E0xl80x3B0xl80x0A0x030x0E0x0C0x0A0xlC0x0D0x0B0x070x0E0x3A0x090x0A0x030xlF0x030xI20x030x100x05
[0289]其中,0x09为组件的标签值,0x0066为相关地址组件的长度,0x0030单字节修正数据的长度数据;[0290]步骤102 JAVA智能卡根据第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤103,否则执行步骤106 ;
[0291]步骤103 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
[0292]具体地,更新读取地址为将读取地址自加1,更新第一未处理数据长度为将第一未处理数据长度自减1,更新已处理数据的长度为将已处理数据的长度自加I;
[0293]步骤104 JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
[0294]具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;更新被重定位数据的第一物理地址,具体为:将被重定位数据的第一物理地址加上第一修正数据得到更新后的被重定位数据的第一物理地址;更新后的被重定位数据的第一物理地址为方法组件中被重定位数据的物理地址;
[0295]例如,被重定位数据的第一物理地址的初始值为方法组件基地址,即0x10000,若第一修正数据为0x12,则更新后的被重定位数据的第一物理地址为0x10000+0x12=0x10012 ;若被重定位数据的第一物理地址为0x10012,第一修正数据为0x04,则更新后的被重定位数据的第一物理地址为0x10012+0x04=0x10016 ;若被重定位数据的第一物理地址为0x10016,第一修正数据为0x039,则更新后的被重定位数据的第一物理地址为 0x10016+0x39=0x1004F ;
[0296]步骤105 JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0297]例如,方法组件基地址为0x10000,方法组件如下:
[0298]0x010x020xDF0x800x080x020xE90x000x180x020x400xl80x8C0x000xlIOx18
[0299]0x030x890x000x180x010x870x010x8F0x000xI30x3D0x8C0x000x140x930x05
[0300]0x300x8F0x000xl70x3D0xl80xlD0xlE0x8C0x000x060x3B0x7A0x000x200x7A
[0301]0x010x200x040x780x050x240x030x3IOx190x8B0x000x070x2E0xlB0x030x25
[0302]0x610x270xlB0x040x250x100xA40x6B0x200xl80xl90x8B0x000x080x890x00
[0303]0x8D0x000x090xlB0x080xlB0x070x250x8B0x000x0A0x990x000xB60xll0x69
[0304]0x990x8D0x000x0B0xA80x000xAD0xlB0x030x250x060x530x06*0x6E0xl30xlB......[0305]若被重定位数据的第一物理地址为0x10012,则获取到的I个字节的数据,即常量池组件中的索引值为0x00 ;若被重定位数据的第一物理地址为0x10016,则获取到的I个字节的数据,即常量池组件中的索引值为0x01 ;若被重定位数据的第一物理地址为0x1004F,则获取到的I个字节的数据,即常量池组件中的索引值为0x00 ;
[0306]步骤106 JAVA智能卡判断是否已从应用协议数据单元中获取相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤107,否则JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址和已处理数据的长度,执行步骤107;
[0307]具 体地,更新读取地址为将读取地址自加2,更新已处理数据的长度为将已处理数据的长度自加2 ;[0308]具体地,双字节修正数据的前2个字节的数据为双字节修正数据的长度数据,之后为双字节修正数据的内容;例如,双字节修正数据的长度数据为0x0032 ;
[0309]步骤107 JAVA智能卡根据第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤108,否则返回成功信息,结束;
[0310]步骤108 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
[0311]具体地,更新读取地址为将读取地址自加I,更新第二未处理数据长度为将第二未处理数据长度自减1,更新已处理数据的长度为将已处理数据的长度自加I;
[0312]步骤109 JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
[0313]具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;更新被重定位数据的第二物理地址,具体为:将被重定位数据的第二物理地址加上第二修正数据得到更新后的被重定位数据的第二物理地址;更新后的被重定位数据的第二物理地址为方法组件中被重定位数据的物理地址;
[0314]例如,被重定位数据的第二物理地址的初始值为方法组件基地址,即0x10000,若第二修正数据为0x07,则更新后的被重定位数据的第二物理地址为0x10000+0x12=0x10007 ;若被重定位数据的第二物理地址为0x10007,第二修正数据为0x06,则更新后的被重定位数据的第二物理地址为0xl0012+0x04=0xl000D ;若被重定位数据的第二物理地址为OxlOOOD,第二修正数据为ΟχΟΒ,则更新后的被重定位数据的第二物理地址为 0x10016+0x39=0x10018 ;
[0315]步骤110 JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0316]例如,若被重定位数据的第二物理地址为0x10007,则获取到的2个字节的数据,即常量池组件中的索引值为0x0018 ;若被重定位数据的第二物理地址为OxlOOOD,则获取到的2个字节的数据,即常量池组件中的索引值为0x0011 ;若被重定位数据的第二物理地址为0x10018,则获取到的2个字节的数据,即常量池组件中的索引值为0x0013 ;
[0317]步骤111:JAVA智能卡根据获取到的常量池组件中的索引值在常量池组件中获取一项数据,判断是否能根据索引值获取到数据,是则将获取到的数据作为当前项数据,执行步骤112,否则返回错误信息,结束;
[0318]具体地,在常量池组件中,一项数据是大小为4个字节的数据;
[0319]例如,常量池组件
[0320]OxOOOxIB
[0321]0x020x000x000x060x020x000x000x010x020x000x000x04
[0322]0x020x000x000x000x020x000x000x050x020x000x000x03
[0323]0x060x000x000x090x030x800x0A0x010x030x800x0A0x06
[0324]0x060x800x080x030x030x800x060x020x060x800x070x01
[0325]0x060x000x020xD30x030x800x0A0x080x060x800x100x05
[0326]0x060x000x010xDF0x060x000x0IOx1Β0χ060χ800χ030χ00
[0327]0x030x000x000x0A0x010x810x030x000x060x810x030x00[0328]0x060x000x020xC70x030x000x000x0B0x010x000x000x00
[0329]0x010x810x010x000x060x800x080x110x060x800x080x12
[0330]其中,OxOOlB为常量池组件中数据项的个数,之后每4个字节为一项数据;
[0331]若常量池组件中的索引值为0x00,则当前项数据为0x02000006 ;若常量池组件中的索引值为0x01,则当前项数据为0x02000001 ;若常量池组件中的索引值为0x0018,则当前项数据为0x01810100 ;若常量池组件中的索引值为0x0011,则当前项数据为0x06800300 ;若常量池组件中的索引值为0x0013,则当前项数据为0x01810300 ;
[0332]步骤112:JAVA智能卡判断当前项数据的第I个字节的值,若为I则对第一指令进行重定位,执行步骤113 ;若为2则对第二指令进行重定位,执行步骤113 ;若为3则对第三指令进行重定位,执行步骤113 ;若为4则对第四指令进行重定位,执行步骤113 ;若为5则对第五指令进行重定位,执行步骤113 ;若为6则对第六指令进行重定位,执行步骤113 ;
[0333]具体地,第一指令为new指令、newarray指令、instanceof指令和chackcast指令;第二指令为getfield指令和putfield指令;第三指令为invokevirtual指令;第四指令为invokespecial指令;第五指令为putstatic指令和getstatic指令;第六指令为invokestatic 指令;
[0334]步骤113 JAVA智能卡根据已处理数据的长度和相关地址组件的长度判断是否处理完相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤114 ;
[0335]具体地,JAVA智能卡判断已处理数据的长度是否等于获取到的相关地址组件的长度,是则确定处理完相关地址组件中的所有数据,否则确定未处理完相关地址组件中的所有数据;
[0336]步骤114 JAVA智能卡判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成,是则返回成功信息,执行步骤115,否则返回步骤102 ;
[0337]步骤115 JAVA智能卡等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤102;
[0338]本实施例中,由于相关地址组件的数据可能被分包通过多个应用协议数据单元发送给JAVA智能卡,所以JAVA智能卡需要接收多个应用协议数据单元才能接收到全部的相关地址组件的数据;
[0339]具体地,对第一指令进行重定位,如图3所示,包括:
[0340]步骤201:JAVA智能卡判断第一指令的引用类型,若是内部引用则执行步骤202,若是外部引用则执行步骤205;
[0341]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第一指令的引用类型为外部引用,否则确定第一指令的引用类型为内部引用;
[0342]例如,当前项数据为:0x010x810x030x00 ;当前项数据的第2个字节为0x81,SP10000001,则当前项数据的第2个字节的最高位为1,确定第一指令的引用类型为外部引用;
[0343]步骤202 JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
[0344]具体地,当前项数据的第一部分的数据为当前项数据的第2个字节和第3个字节的数据;
[0345]步骤203 JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
[0346]具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
[0347]步骤204 JAVA智能卡根据类信息物理地址和EEPROM基地址得到类信息的偏移值,执行步骤210 ;
[0348]具体地,类信息物理地址减去EEPROM基地址等于类信息的偏移值;本实施例中,类信息的偏移值为类信息基于EEPROM的偏移地址;
[0349]步骤205 JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0350]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0351]例如,当前项数据为:0x010x810x030x00 ;当前项数据的第2个字节为0x81,即10000001,则被引用类信息所属的包的包ID为I ;
[0352]步骤206 JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤207,否则执行步骤208 ;
[0353]例如,第一预设值为19;
[0354]步骤207 JAVA智能卡更新第一指令的指令码,执行步骤208 ;
[0355]具体地,JAVA智能卡通过更新第一指令的指令码将引用EEPROM中类信息的第一指令更改为引用ROM中类信息;
[0356]例如,第一指令为0X8R)X000X03,该第一指令引用EEPROM中类信息;将第一指令中的指令码0x8F更改为OxBC,则更改后的第一指令为0XBC0X000X03,更改后的第一指令引用ROM中类信息;
[0357]步骤208 JAVA智能卡根据包ID获取包的导出表地址;
[0358]步骤209 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,执行步骤210 ;
[0359]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;
[0360]例如,本实施例中,当前项数据的第3个字节的数据为0x03,获取到的类信息的偏移值为0x010x81 ;
[0361]步骤210 JAVA智能卡将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数;
[0362]例如,第一指令为0x8R)x000x03,将第一指令中的指令参数0x000x03更改为获取到的类信息的偏移值0x010x81,则更改后的第一指令为0xBC0x010x81 ;
[0363]具体地,对第二指令进行重定位,如图4所示,包括:
[0364]步骤301:JAVA智能卡判断第二指令的引用类型,若是内部引用则执行步骤302,若是外部引用则执行步骤304;
[0365]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第二指令的引用类型为外部引用,否则确定第二指令的引用类型为内部引用;
[0366]例如,当前项数据为0x020x010x030x00 ;当前项数据的第2个字节为0x01,即00000001,则当前项数据的第2个字节的最高位不为I ;
[0367]步骤302 JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;[0368]具体地,当前项数据的第一部分的数据为当前项数据的第2个字节和第3个字节的数据;
[0369]例如,当前项数据的第2个字节和第3个字节的数据为0x010x03,则第一偏移值为0x0103 ;
[0370]步骤303 JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤309 ;
[0371]具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
[0372]例如,JAVA智能卡存储的类型信息组件基地址为0x100380,则类信息物理地址为0x100380+0x0103=0x100483 ;
[0373]步骤304 JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0374]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0375]步骤305 JAVA智能卡根据包ID获取包的导出表地址;
[0376]步骤306 JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤307,否则执行步骤308 ;
[0377]步骤307 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤309 ;
[0378]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
[0379]步骤308 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤309 ;
[0380]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
[0381]步骤309 JAVA智能卡根据类信息物理地址,在JAVA智能卡存储区获取当前类信息;
[0382]步骤310:JAVA智能卡判断当前类信息的第一部分的数据是否为第二预设值,是则执行步骤311,否则执行步骤312 ;
[0383]具体地,当前类信息的第一部分的数据为当前类信息的第2个字节的第5位;第二预设值为I ;
[0384]例如,当前类信息的第2个字节为0x13,即00010011,则当前类信息的第2个字节的第5位为1,确定当前类信息的第一部分的数据为第二预设值;
[0385]步骤311 JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤313 ;
[0386]具体地,当前类信息的第二部分的数据为当前类信息的第3个字节和第4个字节的数据;当前类信息的第3个字节和第4个字节的数据加上ROM基地址等于当前类信息的父类的类信息的物理地址;[0387]例如,ROM基地址为0x32000,当前类信息的第3个字节和第4个字节的数据为0x020x03,则当前类信息的父类的类信息的物理地址为0x32000+0x0203=0x32203 ;
[0388]步骤312 JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤313 ;
[0389]具体地,当前类信息的第二部分的数据为当前类信息的第3个字节和第4个字节的数据;当前类信息的第3个字节和第4个字节的数据加上EEPROM基地址等于当前类信息的父类的类信息的物理地址;
[0390]步骤313 JAVA智能卡根据当前类信息的父类的类信息的物理地址,在JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据该数据和当前项数据的第四部分的数据得到索引值;
[0391]具体地,当前类信息的父类的类信息的第一部分的数据为当前类信息的父类的类信息的第5个字节的数据;当前项数据的第四部分的数据为当前项数据的第4个字节的数据;当前类信息的父类的类信息的第5个字节的数据加上当前项数据的第4个字节的数据等于索引值;
[0392]例如,当前类信息的父类的类信息的物理地址为0x32203,获取到的当前类信息的父类的类信息的第5个字节的数据为0x02,当前项数据的第4个字节为0x00,则索引值为0x00+0x02=0x02 ;
[0393]步骤314 JAVA智能卡将索引值作为第一参数,根据第一参数更新第二指令的指令参数;
[0394]例如,第二指令为0x830x23,则将第二指令的指令参数0x23更新为索引值0x02,即更新后的第二指令为0x830x02 ;
[0395]具体地,对第三指令进行重定位,如图5所示,包括:
[0396]步骤401 JAVA智能卡判断第三指令的引用类型,若是内部引用则执行步骤402,若是外部引用则执行步骤404;
[0397]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第三指令的引用类型为外部引用,否则确定第三指令的引用类型为内部引用;
[0398]例如,当前项数据为0x030x020x050x01 ;当前项数据的第2个字节为0x02,即00000010,则当前项数据的第2个字节的最高位不为1,确定第三指令的引用类型为内部引用;
[0399]步骤402 JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
[0400]具体地,当前项数据的第一部分的数据为当前项数据的第2个字节和第3个字节的数据;
[0401]例如,当前项数据的第2个字节和第3个字节的数据为0x020x05,则第一偏移值为0x0205 ;
[0402]步骤403 JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤409 ;
[0403]具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
[0404]例如,JAVA智能卡存储的类型信息组件基地址为0x100380,第一偏移值为0x0205,则类信息物理地址为 0x100380+0x0205=0x100585 ;[0405]步骤404 JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0406]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0407]步骤405 JAVA智能卡根据包ID获取包的导出表地址;
[0408]步骤406 JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤407,否则执行步骤408 ;
[0409]具体地,第一预设值为19 ;
[0410]步骤407 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤409 ;
[0411]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
[0412]步骤408 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤409 ;
[0413]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
[0414]步骤409 JAVA智能卡根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址;
[0415]具体地,当前项数据的第四部分的数据为当前项数据的第4个字节的数据;当前项数据的第4个字节的数据为被调用方法的序号,JAVA智能卡根据被调用方法的序号在类信息中查找被调用方法的偏移地址;
[0416]例如,类信息物理地址为0x100585,当前项数据的第4个字节的数据为0x01 ;查找到的被调用方法的偏移地址为0x100680 ;
[0417]步骤410 JAVA智能卡根据被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数;
[0418]具体地,JAVA智能卡根据被调用方法的物理地址在JAVA智能卡存储区获取被调用方法信息,获取被调用方法信息的第2个字节的数据作为被调用方法的参数个数;
[0419]例如,获取到的被调用方法的参数个数为0x03 ;
[0420]步骤411 JAVA智能卡根据被调用方法的参数个数和当前项数据的第四部分的数据得到第一参数;
[0421]具体地,当前项数据的第四部分的数据为当前项数据的第4个字节的数据;
[0422]例如,被调用方法的参数个数为0x03,当前项数据的第4个字节的数据为0x01,则第一参数为0x030x01 ;
[0423]步骤412 JAVA智能卡根据第一参数更新第三指令的指令参数;
[0424]例如,第三指令为0x8B0x000x07,则将第三指令的指令参数0x000x07更新为第一参数0x030x01,则更新后的第三指令为0x8B0x030x01 ;
[0425]具体地,对第四指令进行重定位,如图6所示,包括:[0426]步骤501:JAVA智能卡判断第四指令的引用类型,若是内部引用则执行步骤502,若是外部引用则执行步骤504;
[0427]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第四指令的引用类型为外部引用,否则确定第四指令的引用类型为内部引用;
[0428]例如,当前项数据为0x040x030x060x02 ;当前项数据的第2个字节为0x03,即00000011,则当前项数据的第2个字节的最高位不为I ;
[0429]步骤502 JAVA智能卡根据当前项数据的第一部分的数据得到第一偏移值;
[0430]具体地,当前项数据的第一部分的数据为当前项数据的第2个字节和第3个字节的数据;
[0431]例如,本实施例中,当前项数据的第2个字节和第3个字节的数据为0x030x06,则第一偏移值为0x0306 ;
[0432]步骤503 JAVA智能卡根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,执行步骤510 ;
[0433]具体地,第一偏移值加上类信息组件起始地址等于类信息物理地址;
[0434]例如,JAVA智能卡存储的类信息组件起始地址为0x100380,第一偏移值为0x0306,则类信息物理地址为 0x100380+0x0306=0x100686 ;
[0435]步骤504 JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0436]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0437]步骤505 JAVA智能卡根据包ID获取包的导出表地址;
[0438]步骤506 JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤507,否则执行步骤509 ;
[0439]具体地,第一预设值为19 ;
[0440]步骤507 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,执行步骤508 ;
[0441]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上ROM基地址等于类信息物理地址;
[0442]步骤508 JAVA智能卡更新第四指令的指令码,执行步骤510 ;
[0443]具体地,JAVA智能卡通过更新第四指令的指令码将调用EEPROM中父方法的第四指令改为调用ROM中父方法;
[0444]步骤509 JAVA智能卡根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址,执行步骤510 ;
[0445]具体地,当前项数据的第三部分的数据为当前项数据的第3个字节的数据;类信息的偏移值加上EEPROM基地址等于类信息物理地址;
[0446]步骤510 JAVA智能卡根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址;[0447]具体地,当前项数据的第四部分的数据为当前项数据的第4个字节的数据;当前项数据的第4个字节的数据为被调用方法的序号,JAVA智能卡根据被调用方法的序号在类信息中查找到被调用方法的偏移地址;
[0448]例如,当前项数据的第4个字节的数据为0x02,类信息物理地址为0x100686 ;查找到的被调用方法的偏移地址为0x0680 ;
[0449]步骤511 JAVA智能卡将被调用方法的偏移地址作为第一参数,根据第一参数更新第四指令的指令参数;
[0450]例如,第四指令为0x803x010x07,将第四指令的指令参数0x010x07更新为被调用方法的偏移地址0x0680,则更新后的第四指令为0x8C0x060x80 ;
[0451]具体地,对第五指令进行重定位,如图7所示,包括:
[0452]步骤601 JAVA智能卡判断第五指令的引用类型,若是内部引用则执行步骤602,若是外部引用则执行步骤605;
[0453]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第五指令的引用类型为外部引用,否则确定第五指令的引用类型为内部引用;
[0454]例如,当前项数据为0x050x030x060x02 ;当前项数据的第2个字节为0x03,即00000011,则当前项数据的第2个字节的最高位不为1,确定第五指令的引用类型为内部引用;
[0455]步骤602 JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值;
[0456]具体地,当前项数据的第五部分的数据为当前项数据的第3个字节和第4个字节的数据;
[0457]例如,当前项数据的第3个字节和第4个字节的数据为0x060x02,则第二偏移值为0x0602 ;
[0458]步骤603 JAVA智能卡根据第二偏移值和JAVA智能卡存储的静态域组件起始地址得到静态域物理地址;
[0459]具体地,第二偏移值加上本包中类信息组件起始地址等于类信息物理地址;
[0460]例如,JAVA智能卡存储的静态域组件起始地址为0x100680,第二偏移值为0x0602,则静态域物理地址为 0xl00680+0x0602=0xl00C82 ;
[0461 ] 步骤604 JAVA智能卡根据静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤608 ;
[0462]具体地,静态域物理地址减去EEPROM基地址等于被访问静态域的偏移地址;
[0463]例如,静态域物理地址为0xl00C82,EEPROM基地址为0x100380,则被访问静态域的偏移地址为 0xl00C82 - 0x100380=0x0902 ;
[0464]步骤605 JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0465]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0466]步骤606 JAVA智能卡根据包ID获取包的导出表地址;
[0467]步骤607:JAVA智能卡根据当前项数据的第一部分的数据和包的导出表地址,在导出表中获取被访问静态域的偏移地址;[0468]具体地,当前项数据的第一部分的数据为当前项数据的第2个字节和第3个字节的数据;
[0469]步骤608 JAVA智能卡将被访问静态域的偏移地址作为第一参数,根据第一参数更新第五指令的指令参数;
[0470]例如,第五指令为0X7B0X000X37,将第五指令的指令参数0x000x37更新为被访问静态域的偏移地址0x0902,则更新后的第五指令为0x7B0x090x02 ;
[0471]具体地,对第六指令进行重定位,如图8所示,包括:
[0472]步骤701:JAVA智能卡判断第六指令的引用类型,若是内部引用则执行步骤705,若是外部引用则执行步骤702;
[0473]具体地,JAVA智能卡判断当前项数据的第2个字节的最高位是否为1,是则确定第六指令的引用类型为外部引用,否则确定第六指令的引用类型为内部引用;
[0474]例如,当前项数据为0x060x030x060x02 ;当前项数据的第2个字节为0x03,即00000011,则当前项数据的第2个字节的最高位不为1,确定第六指令的引用类型为内部引用;
[0475]步骤702 JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值;
[0476]具体地当前项数据的第五部分的数据为当前项数据的第3个字节和第4个字节的数据;
[0477]例如,当前项数据的第3个字节和第4个字节的数据为0x060x02,则第二偏移值为0x0602 ;
[0478]步骤703 JAVA智能卡根据第二偏移值和JAVA智能卡存储的方法组件起始地址得到方法物理地址;
[0479]具体地,第二偏移值加上方法组件起始地址等于方法物理地址;
[0480]例如,JAVA智能卡存储的方法组件起始地址为0x100680,第二偏移值为0x0602,则方法物理地址为 0xl00680+0x0602=0xl00C82 ;
[0481 ] 步骤704 JAVA智能卡根据方法物理地址和EEPROM基地址得到方法的偏移值,执行步骤710 ;
[0482]具体地,方法物理地址减去EEPROM基地址等于方法的偏移值;本实施例中,方法的偏移值为方法基于EEPROM的偏移地址;
[0483]例如,方法物理地址为0xl00C82,EEPROM基地址为0x100380,则方法的偏移值为0xl00C82 - 0x100380=0x0902 ;
[0484]步骤705 JAVA智能卡获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID ;
[0485]具体地,当前项数据的第二部分的数据为当前项数据的第2个字节的后7位数据;
[0486]步骤706 JAVA智能卡判断包ID是否小于第一预设值,是则执行步骤707,否则执行步骤708 ;
[0487]具体地,第一预设值为19 ;
[0488]步骤707 JAVA智能卡更新第六指令的指令码,执行步骤708 ;
[0489]具体地,JAVA智能卡通过更新第六指令的指令码将调用EEPROM中静态方法第六指令更改为调用ROM中静态方法;
[0490]步骤708 JAVA智能卡根据包ID获取包的导出表地址;
[0491]步骤709 JAVA智能卡根据当前项数据的第五部分的数据和包的导出表地址,在包的导出表中获取方法的偏移值;
[0492]具体地,当前项数据的第五部分的数据为当前项数据的第3个字节和第4个字节的数据;
[0493]步骤710 JAVA智能卡将方法的偏移值作为第一参数,根据第一参数更新第六指令的指令参数;
[0494]例如,第六指令为0x800x000x37,将第六指令的指令参数0x000x37更新为方法的偏移值0x0902,则更新后的第六指令为0x8D0x090x02 ;
[0495]本实施例中,步骤101至步骤110可替换为:
[0496]步骤s2_l JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
[0497]具体地,读取地址的初始值为相关地址组件中的双字节修正数据的长度数据的首地址;
[0498]步骤s2_2 JAVA智能卡根据第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s2-3,否则执行步骤s2-6 ;
[0499]步骤s2_3 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
[0500]步骤s2_4 JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
[0501]具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0502]步骤s2_5 JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0503]步骤s2_6 JAVA智能卡判断是否已从应用协议数据单元中获取相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤s2-7,否则JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址和已处理数据的长度,执行步骤s2-7;
[0504]步骤s2_7 JAVA智能卡根据第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s2-8,否则返回成功信息,结束;
[0505]步骤s2_8 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
[0506]步骤s2_9 JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
[0507]具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0508]步骤s2_10 JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0509]除此之外,步骤101至步骤110可替换为:
[0510]步骤s3_l JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据更新读取地址和已处理数据的长度;
[0511]具体地,读取地址的初始值为相关地址组件中的单字节修正数据的长度数据的首地址;
[0512]步骤s3_2 JAVA智能卡根据第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s3-3,否则执行步骤s3-6 ;
[0513]步骤s3_3 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
[0514]步骤s3_4 JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
[0515]具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0516]步骤s3_5 JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0517]步骤s3_6 JAVA智能卡根据第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s3-7,否则返回成功信息,结束;
[0518]步骤s3_7 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度、读取地址和已处理数据的长度;
[0519]步骤s3_8 JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
[0520]具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0521]步骤s3_9 JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤111。
[0522]除此之外,步骤101至步骤110可替换为:
[0523]步骤s4_l JAVA智能卡从接收到的应用协议数据单元中获取相关地址组件的长度,根据读取地址从应用协议数据单元中获取相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度,更新读取地址和已处理数据的长度;
[0524]具体地,读取地址的初始值为相关地址组件中的双字节修正数据的长度数据的首地址;
[0525]步骤s4_2 JAVA智能卡根据第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s4-3,否则执行步骤s4-6 ;[0526]步骤s4_3 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度、读取地址和已处理数据的长度;
[0527]步骤s4_4 JAVA智能卡根据第一修正数据更新被重定位数据的第一物理地址;
[0528]具体地,被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0529]步骤s4_5 JAVA智能卡根据被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤111 ;
[0530]步骤s4_6 JAVA智能卡根据第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s4-7,否则返回成功信息,结束;
[0531]步骤s4_7 JAVA智能卡根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据;根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
[0532]步骤s4_8 JAVA智能卡根据第二修正数据更新被重定位数据的第二物理地址;
[0533]具体地,被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0534]步骤s4_9 JAVA智能卡根据被重定位数据的第二物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤111。
[0535]实施例3
[0536]本发明的实施例3提供一种高效更新JAVA指令的装置,如图9所示,该装置包括:第一获取模块301、第二获取模块302、第一判断模块303、第一处理模块304、第二处理模块305、第一更新模块306和输出模块307 ;
[0537]第一获取模块301,用于从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值;
[0538]第二获取模块302,用于根据第一获取模301块获取到的常量池组件中的索引值在常量池组件中获取当前项数据,判断是否获取到当前项数据;
[0539]第一判断模块303,用于当第二获取模块302获取到当前项数据时,根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型;
[0540]第一处理模块304,用于当第一判断模块303判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值,根据偏移值和JAVA指令对应的组件起始地址得到第一参数;
[0541]第二处理模块305,用于当第一判断模块303判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和包的导出表地址在包的导出表中获取第一参数;
[0542]第一更新模块306,用于当第一处理模块304得到第一参数后,根据第一参数更新JAVA指令的指令参数;当第二处理模块305得到第一参数后,根据第一参数更新JAVA指令的指令参数;
[0543]输出模块307,用于当第二获取模块302未获取到当前项数据时,返回错误信息。
[0544]装置还包括:第三获取模块和第二判断模块;[0545]第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的修正数据的长度作为未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的修正数据的长度数据的首地址;
[0546]第二判断模块,用于根据第三获取模块获取到的未处理数据长度判断是否存在未处理的修正数据;
[0547]输出模块307,还用于当第二判断模块判断不存在未处理的修正数据时,返回成功
信息;
[0548]第一获取模块301,具体用于根据读取地址从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的相关地址组件的修正数据,更新未处理数据长度和读取地址;
[0549]装置还包括第三判断模块和接收模块;
[0550]第三判断模块,用于在第一更新模块306更新JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成;
[0551]输出模块307,还用于当第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息;
[0552]接收模块,用于当第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
[0553]第三获取模块包括第一获取单元和第二获取单元;
[0554]第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的单字节修正数据的长度数据的首地址;
[0555]第二获取单元,用于当第四判断模块判断未获取到双字节修正数据的长度数据作为第二未处理数据长度时,根据读取地址从接收到的应用协议数据单元中获取相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;
[0556]第二判断模块包括第一判断单元和第二判断单元;
[0557]第一判断单元,用于当第一获取单元获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的单字节修正数据;
[0558]第二判断单元,用于当第四判断模块判断已获取到双字节修正数据的长度数据作为第二未处理数据长度或第二获取单元获取到第二未处理数据长度时,根据第二未处理数据长度判断是否存在未处理的双字节修正数据;
[0559]输出模块307,还用于当第二判断单元判断不存在未处理的双字节修正数据时,返回成功信息;
[0560]第一获取模块301包括第三获取单元、第一更新单元和第四获取单元;
[0561]第三获取单元,用于当第一判断单元判断存在未处理的单字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
[0562]第一更新单元,用于根据第三获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0563]第四获取单元,用于根据第一更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值;
[0564]装置包括第四判断模块,用于当第一判断单元判断不存在未处理的单字节修正数据时,判断是否已获取到双字节修正数据的长度数据作为第二未处理数据长度;
[0565]第一获取模块301包括第五获取单元、第二更新单元和第六获取单元;
[0566]第五获取单元,用于当第二判断单元判断存在未处理的双字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
[0567]第二更新单元,用于根据第五获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0568]第六获取单元,用于根据第二更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
[0569]除此之外,第三获取模块包括第七获取单元和第八获取单元;
[0570]第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的双字节修正数据的长度数据的首地址;
[0571]第八获取单元,用于当第五判断模块判断未获取到单字节修正数据的长度数据作为第二未处理数据长度时,根据读取地址从接收到的应用协议数据单元中获取相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;
[0572]第二判断模块包括第三判断单元和第四判断单元;
[0573]第三判断单元,用于当第七获取单元获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的双字节修正数据;
[0574]第四判断单元,用于当第五判断模块判断已获取到单字节修正数据的长度数据作为第二未处理数据长度或第八获取单元获取到第二未处理数据长度时,根据第二未处理数据长度判断是否存在未处理的单字节修正数据;
[0575]输出模块307,还用于当第四判断单元判断不存在未处理的单字节修正数据时,返回成功信息;
[0576]第一获取模块301包括第九获取单元、第三更新单元和第十获取单元;
[0577]第九获取单元,用于当第三判断单元判断存在未处理的双字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
[0578]第三更新单元,用于根据第九获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;[0579]第十获取单元,用于根据第三更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值;
[0580]装置包括第五判断模块,用于当第三判断单元判断不存在未处理的双字节修正数据时,判断是否已获取到单字节修正数据的长度数据作为第二未处理数据长度;
[0581]第一获取模块301包括第十一获取单元、第四更新单元和第十二获取单元;
[0582]第^^一获取单元,用于当第四判断单元判断存在未处理的单字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
[0583]第四更新单元,用于根据第十一获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0584]第十二获取单元,用于根据第四更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
[0585]除此之外,第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的单字节修正数据的长度数据的首地址;
[0586]第二判断模块包括第五判断单元和第六判断单元;
[0587]第五判断单元,用于当第三获取模块获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的单字节修正数据;
[0588]第六判断单元,用于当第五判断单元判断不存在未处理的单字节修正数据时,根据第三获取模块获取到的第二未处理数据长度判断是否存在未处理的双字节修正数据;
[0589]输出模块307,还用于当第六判断单元判断不存在未处理的双字节修正数据时,返回成功信息;
[0590]第一获取模块301包括第十三获取单元、第五更新单元和第十四获取单元;
[0591]第十三获取单元,用于当第五判断单元判断存在未处理的单字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
[0592]第五更新单元,用于根据第十三获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0593]第十四获取单元,用于根据第五更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值;
[0594]第一获取模块301包括第十五获取单元、第六更新单元和第十六获取单元;
[0595]第十五获取单元,用于当第六判断单元判断存在未处理的双字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
[0596] 第六更新单元,用于根据第十五获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0597]第十六获取单元,用于根据第六更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
[0598]除此之外,第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的双字节修正数据的长度数据的首地址;
[0599]第二判断模块包括第七判断单元和第八判断单元;
[0600]第七判断单元,用于当第三获取模块获取到第一未处理数据长度后,根据第一未处理数据长度判断是否存在未处理的双字节修正数据;
[0601]第八判断单元,用于当第七判断单元判断不存在未处理的双字节修正数据时,根据第三获取模块获取到的第二未处理数据长度判断是否存在未处理的单字节修正数据;
[0602]输出模块307,还用于当第八判断单元判断不存在未处理的单字节修正数据时,返回成功信息;
[0603]第一获取模块301包括第十七获取单元、第七更新单元和第十八获取单元;
[0604]第十七获取单元,用于当第七判断单元判断存在未处理的双字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第一修正数据,根据读取到的相关地址组件中的数据,更新第一未处理数据长度和读取地址;
[0605]第七更新单元,用于根据第十七获取单元获取到的第一修正数据更新被重定位数据的第一物理地址;被重定位数据的第一物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0606]第十八获取单元,用于根据第七更新单元更新得到的被重定位数据的第一物理地址从JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值;
[0607]第一获取模块301包括第十九获取单元、第八更新单元和第二十获取单元;
[0608]第十九获取单元,用于当第八判断单元判断存在未处理的单字节修正数据时,根据读取地址从应用协议数据单元中获取相关地址组件的I个字节的数据作为第二修正数据,根据读取到的相关地址组件中的数据,更新第二未处理数据长度和读取地址;
[0609]第八更新单元,用于根据第十九获取单元获取到的第二修正数据更新被重定位数据的第二物理地址;被重定位数据的第二物理地址的初始值为JAVA智能卡存储的方法组件基地址;
[0610]第二十获取单元,用于根据第八更新单元更新得到的被重定位数据的第二物理地址从JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
[0611]装置包括第四获取模块、第六判断模块、第七判断模块和接收模块;
[0612]第四获取模块,用于根据读取地址从接收到的应用协议数据单元中获取相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的长度数据的长度更新读取地址;读取地址的初始值为相关地址组件中的修正数据的长度数据的首地址;
[0613]第一获取模块301,具体用于根据读取地址从应用协议数据单元中获取相关地址组件的修正数据,根据修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的相关地址组件的修正数据,更新未处理数据长度和读取地址;
[0614]第六判断模块,用于在第一更新模块306更新JAVA指令的指令参数后,判断是否处理完相关地址组件中的所有数据;
[0615]输出模块307,还用于当第六判断模块判断已处理完相关地址组件中的所有数据后,返回成功信息;
[0616]第七判断模块,用于当第六判断模块判断未处理完相关地址组件中的所有数据后,判断本次接收到的应用协议数据单元中的相关地址组件的数据是否已经处理完成;
[0617]输出模块307,还用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,返回成功信息;
[0618]接收模块,用于当第七判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成后,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
[0619]若当前项数据对应的JAVA指令为第一指令,第一判断模块303,具体用于判断第一指令的引用类型;
[0620]第一处理模块304,具体用于当第一判断模块303判断第一指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息 组件起始地址得到类信息物理地址,根据类信息物理地址和EEPROM基地址得到类信息的偏移值;
[0621]第二处理模块305包括第二十一获取单元、第九判断单元、第九更新单元和第二十二获取单元;
[0622]第二十一获取单元,用于当第一判断模块303判断第一指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID ;
[0623]第九判断单元,用于判断第二十一获取单元获取到的包ID是否小于第一预设值;
[0624]第九更新单元,用于当第九判断单元判断包ID小于第一预设值时,更新第一指令的指令码;
[0625]第二十二获取单元,用于当第九判断单元判断包ID不小于第一预设值或第九更新单元更新第一指令的指令码后,根据包ID获取包的导出表地址,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值;
[0626]第一更新模块306,具体用于当第一处理模块304得到偏移值后,将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数;当第二十二获取单元获取到偏移值后,将类信息的偏移值作为第一参数,根据第一参数更新第一指令的指令参数。
[0627]若当前项数据对应的JAVA指令为第二指令,第一判断模块303,具体用于判断第二指令的引用类型;
[0628]第一处理模块304,具体用于当第一判断模块303判断第二指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址,根据类信息物理地址和EEPROM基地址得到类信息的偏移值;
[0629]第二处理模块305包括第二十三获取单元、第十判断单元、第一处理单元和第二处理单元;[0630]第二十三获取单元,用于当第一判断模块303判断第二指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;
[0631]第十判断单元,用于判断第二十三获取单元获取到的包ID是否小于第一预设值;
[0632]第一处理单元,用于当第十判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址;
[0633]第二处理单元,用于当第十判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0634]第一更新模块306包括第二十四获取单元、第十一判断单元、第三处理单元、第四处理单元、第五处理单元和第十更新单元;
[0635]第二十四获取单元,用于当第一处理模块304得到类信息物理地址,或第一处理单元得到类信息物理地址,或第二处理单元得到类信息物理地址后,根据类信息物理地址,在JAVA智能卡存储区获取当前类信息;[0636]第十一判断单元,用于判断第二十四获取单元获取到的当前类信息的第一部分的数据是否为第二预设值;
[0637]第三处理单元,用于当第十一判断单元判断当前类信息的第一部分的数据为第二预设值时,根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址;
[0638]第四处理单元,用于当第十一判断单元判断当前类信息的第一部分的数据不为第二预设值时,根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址;
[0639]第五处理单元,用于当第三处理单元或第四处理单元得到当前类信息的父类的类信息的物理地址后,根据当前类信息的父类的类信息的物理地址,在JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值;
[0640]第十更新单元,用于当第五处理单元得到索引值后,将索引值作为第一参数,根据第一参数更新第二指令的指令参数。
[0641]若当前项数据对应的JAVA指令为第三指令,第一判断模块303,具体用于判断第三指令的引用类型;
[0642]第一处理模块304,具体用于当第一判断模块303判断第三指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
[0643]第二处理模块305包括第二十五获取单元、第十二判断单元、第六处理单元和第七处理单元;
[0644]第二十五获取单元,用于当第一判断模块303判断第三指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;[0645]第十二判断单元,用于判断第二十五获取单元获取到的包ID是否小于第一预设值;
[0646]第六处理单元,用于当第十二判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址;
[0647]第七处理单元,用于当第十二判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0648]第一更新模块306,具体用于当第一处理模块303得到类信息物理地址,或第六处理单元获取到类信息物理地址,或第七处理单元获取类信息物理地址后,根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的物理地址,根据被调用方法的物理地址在JAVA智能卡存储区中获取被调用方法的参数个数,根据被调用方法的参数个数和当前项数据的第4个字节的数据得到第一参数,根据第一参数更新第三指令的指令参数。
[0649]若当前项数据对应的JAVA指令为第四指令,第一判断模块303,具体用于判断第四指令的引用类型;
[0650]第一处理模块3004,具体用于当第一判断模块303判断第四指令的引用类型为内部引用时,根据当前项数据的第一部分的数据得到第一偏移值,根据第一偏移值和JAVA智能卡存储的类信息组件起始地址得到类信息物理地址;
[0651]第二处理模块305包括第二十六获取单元、第十三判断单元、第八处理单元和第九处理单元;
[0652]第二十六获取单元,用于当第一判断模块303判断第四指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址;
[0653]第十三判断单元,用于判断第二十六获取单元获取到的包ID是否小于第一预设值;
[0654]第八处理单元,用于当第十三判断单元判断包ID小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和ROM基地址得到类信息物理地址,并更新第四指令的指令码;
[0655]第九处理单元,用于当第十三判断单元判断包ID不小于第一预设值时,根据当前项数据的第三部分的数据和包的导出表地址,在包的导出表中获取类信息的偏移值,根据类信息的偏移值和EEPROM基地址得到类信息物理地址;
[0656]第一更新模块306,具体用于当第一处理模块303得到类信息物理地址,或第八处理单元获取到类信息物理地址,或第九处理单元获取到类信息物理地址后,根据类信息物理地址和当前项数据的第四部分的数据得到被调用方法的偏移地址,将被调用方法的偏移地址作为第一参数,根据第一参数更新第四指令的指令参数。
[0657]若当前项数据对应的JAVA指令为第五指令,第一判断模块303,具体用于判断第五指令的引用类型;
[0658]第一处理模块304,具体用于当第一判断模块303判断第五指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据第二偏移值和JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址;
[0659]第二处理模块305,具体用于当第一判断模块303判断第五指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据包ID获取包的导出表地址,根据当前项数据的第一部分的数据和包的导出表地址,在导出表中获取被访问静态域的偏移地址;
[0660]第一更新模块306,具体用于当第一处理模块304得到被访问静态域的偏移地址,或第二处理模块305得到被访问静态域的偏移地址后,将被访问静态域的偏移地址作为第一参数,根据第一参数更新第五指令的指令参数。
[0661]若当前项数据对应的JAVA指令为第六指令,第一判断模块303,具体用于判断第六指令的引用类型;
[0662]第一处理模块304,具体用于当第一判断模块303判断第六指令的引用类型为内部引用时,根据当前项数据的第五部分的数据得到第二偏移值,根据第二偏移值和JAVA智能卡存储的方法组件起始地址得到方法物理地址,根据方法物理地址和EEPROM基地址得到方法的偏移值;
[0663]第二处理模块305包括第二十七获取单元、第十四判断单元、第十一更新单元和第二十八获取单元;
[0664]第二十七获取单元,用于当第一判断模块303判断第六指令的引用类型为外部引用时,获取当前项数据的第二部分的数据作为被调用方法所属的包的包ID ;
[0665]第十四判断单元,用于判断第二十七获取单元获取到的包ID是否小于第一预设值;
[0666]第十一更新单元,用于当第十四判断单元判断包ID小于第一预设值时,更新第六指令的指令码;
[0667]第二十八获取单元,用于当第十三判断单元判断包ID不小于第一预设值,或第十一更新单元更新第六指令的指令码后,根据包ID获取包的导出表地址,根据当前项数据的第五部分的数据和包的导出表地址,在包的导出表中获取方法的偏移值;
[0668]第一更新模块306,具体用于当第一处理模块304得到方法的偏移值,或第二十八获取单元获取到方法的偏移值后,将方法的偏移值作为第一参数,根据第一参数更新第六指令的指令参数。
[0669]以上所述,仅为本发明较佳的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
【权利要求】
1.一种高效更新JAVA指令的方法,其特征在于,所述方法包括: 步骤SI JAVA智能卡从应用协议数据单元中获取相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值; 步骤S2:所述JAVA智能卡根据获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据,是则执行步骤S3,否则返回错误信息,结束; 步骤S3:所述JAVA智能卡根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型,若是内部引用则执行步骤S4,若是外部引用则执行步骤S5 ; 步骤S4:所述JAVA智能卡根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数,执行步骤S6 ; 步骤S5:所述JAVA智能卡根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数,执行步骤S6 ; 步骤S6:所述JAVA智能卡根据所述第一参数更新所述JAVA指令的指令参数,结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤SI之前包括: 步骤SO-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址; 步骤S0-2:所述JAVA智能卡根据所述未处理数据长度判断是否存在未处理的修正数据,是则执行步骤SI,否则返回成功信息,结束; 所述步骤SI具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址; 所述步骤S6之后包括: 步骤S7:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤S0-2,否则返回步骤S0-2。
3.根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度按键; 所述步骤SO-1至步骤SI具体为: 步骤Sl-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址; 步骤sl-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤sl-3,否则执行步骤sl-6 ; 步骤sl-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 步骤sl-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤sl-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S4 ; 步骤sl-6:所述JAVA智能卡判断是否已获取双字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤sl-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤sl-7 ; 步骤sl-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤sl-8,否则返回成功信息,结束; 步骤sl-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 步骤sl-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤sl-ΙΟ:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S2。
4.根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度时间包括单字节修正数据的长度数据和双字节修正数据的长度数据; 所述步骤SO-1至步骤SI具体为: 步骤s2-l:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址; 步骤s2-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s2-3,否则执行步骤s2-6 ; 步骤s2-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 步骤s2-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤s2-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S4 ; 步骤s2-6:所述JAVA智能卡判断是否已获取单字节修正数据的长度数据作为第二未处理数据长度,是则执行步骤s2-7,否则所述JAVA智能卡根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址,执行步骤s2-7 ; 步骤s2-7:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s2-8,否则返回成功信息,结束; 步骤s2-8:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 步骤s2-9:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤S2-10:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S2。
5.根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度数据; 所述步骤SO-1至步骤SI具体为: 步骤S3-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址; 步骤s3-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s3-3,否则执行步骤s3-6 ; 步骤s3-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 步骤s3-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤s3-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S4 ; 步骤s3-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s3-7,否则返回成功信息,结束; 步骤s3-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 步骤s3-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤s3-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S2。
6.根据权利要求2所述的方法,其特征在于,所述相关地址组件中的所述修正数据的长度数据包括单字节修正数据的长度数据和双字节修正数据的长度数据; 所述步骤SO-1至步骤SI具体为: 步骤S4-1:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址; 步骤s4-2:所述JAVA智能卡根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据,是则执行步骤s4-3,否则执行步骤s4-6 ; 步骤s4-3:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 步骤s4-4:所述JAVA智能卡根据所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤s4-5:所述JAVA智能卡根据所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值,执行步骤S4 ; 步骤s4-6:所述JAVA智能卡根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据,是则执行步骤s4-7,否则返回成功信息,结束; 步骤s4-7:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据;根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 步骤s4-8:所述JAVA智能卡根据所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 步骤s4-9:所述JAVA智能卡根据所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值,执行步骤S2。
7.根据权利要求1所述的方法,其特征在于,所述步骤SI之前包括: 步骤S0-1’:所述JAVA智能卡根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址,执行步骤SI ; 所述步骤SI具体为:所述JAVA智能卡根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址; 所述步骤S6之后包括:步骤S8: 所述JAVA智能卡判断是否处理完所述相关地址组件中的所有数据,是则返回成功信息,结束,否则执行步骤S9 ; 步骤S9:所述JAVA智能卡判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成,是则返回成功信息,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元,返回步骤SI,否则返回步骤SI。
8.根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第一指令,所述步骤S3至步骤S6具体为: 步骤Al:所述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,否则执行步骤BlO ; 步骤B9:所述JAVA智能卡根据当前类信息的第二部分的数据与ROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤Bll ; 步骤BlO:所述JAVA智能卡根据当前类信息的第二部分的数据与EEPROM基地址,得到当前类信息的父类的类信息的物理地址,执行步骤Bll ; 步骤Bll:所述JAVA智能卡根据所述当前类信息的父类的类信息的物理地址,在所述JAVA智能卡存储区中获取当前类信息的父类的类信息的第一部分的数据,根据获取到的数据和当前项数据的第四部分的数据得到索引值; 步骤B12:所述JAVA智能卡将所述索引值作为所述第一参数,根据所述第一参数更新所述第二指令的指令参数。
10.根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第三指令,所述步骤S3至步骤S6具体为: 步骤Cl:所述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具体为: 步骤Dl:所述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具体为: 步骤El:所述JAVA智能卡判断所述第五指令的引用类型,若是内部引用则执行步骤E2,若是外部引用则执行步骤E3 ; 步骤E2:所述JAVA智能卡根据当前项数据的第五部分的数据得到第二偏移值,根据所述第二偏移值和所述JAVA智能卡存储的静态域组件起始地址得到静态域物理地址,根据所述静态域物理地址和EEPROM基地址得到被访问静态域的偏移地址,执行步骤E4 ; 步骤E3:所述JAVA智能卡获取当前项数据的第二部分的数据作为被引用类信息所属的包的包ID,根据所述包ID获取包的导出表地址,根据当前项数据的第一部分的数据和所述包的导出表地址,在导出表中获取被访问静态域的偏移地址,执行步骤E4; 步骤E4:所述JAVA智能卡将所述被访问静态域的偏移地址作为所述第一参数,根据所述第一参数更新所述第五指令的指令参数。
13.根据权利要求1所述的方法,其特征在于,若当前项数据对应的JAVA指令为第六指令,所述步骤S3至步骤S6具体为: 步骤Fl:所述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智能卡存储区中获取常量池组件中的索引值; 所述第二获取模块,用于根据所述第一获取模块获取到的所述常量池组件中的索引值在所述常量池组件中获取当前项数据,判断是否获取到当前项数据; 所述第一判断模块,用于当所述第二获取模块获取到当前项数据时,根据当前项数据的第I个字节判断当前项数据对应的JAVA指令的引用类型; 所述第一处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为内部引用时,根据当前项数据的第一预设部分得到偏移值,根据所述偏移值和所述JAVA指令对应的组件起始地址得到第一参数; 所述第二处理模块,用于当所述第一判断模块判断当前项数据对应的JAVA指令的引用类型为外部引用时,根据当前项数据的第二预设部分得到包的导出表地址,根据当前项数据和所述包的导出表地址在包的导出表中获取第一参数; 所述第一更新模块,用于当所述第一处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数;当所述第二处理模块得到第一参数后,根据所述第一参数更新所述JAVA指令的指令参数; 所述输出模块,用于当所述第二获取模块未获取到当前项数据时,返回错误信息。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:第三获取模块和第二判断模块; 所述第三获取模块,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的修正数据的长度数据作为未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的修正数据的长度数据的首地址; 所述第二判断模块,用于根据所述第三获取模块获取到的所述未处理数据长度判断是否存在未处理的修正数据; 所述输出模块,还用于当所述第二判断模块判断不存在未处理的修正数据时,返回成功信息; 所述第一获取模块, 具体用于根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的修正数据,根据所述修正数据从JAVA智能卡存储区中获取常量池组件中的索引值,根据读取到的所述相关地址组件的修正数据,更新所述未处理数据长度和所述读取地址; 所述装置还包括第三判断模块和接收模块; 所述第三判断模块,用于在所述第一更新模块更新所述JAVA指令的指令参数后,判断本次接收到的应用协议数据单元中的所述相关地址组件的数据是否已经处理完成;所述输出模块,还用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,返回成功信息; 所述接收模块,用于当所述第三判断模块判断本次接收到的应用协议数据单元中的数据已经处理完成时,等待并接收下一个包含所述相关地址组件的数据的应用协议数据单元。
16.根据权利要求15所述的装置,其特征在于,所述第三获取模块包括第一获取单元和第二获取单元; 所述第一获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址; 所述第二获取单元,用于当第四判断模块判断未获取到双字节修正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址; 所述第二判断模块包括第一判断单元和第二判断单元; 所述第一判断单元,用于当所述第一获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据; 所述第二判断单元,用于当所述第四判断模块判断已获取到双字节修正数据的长度数据作为第二未处理数据长度或所述第二获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的双字节修正数据; 所述输出模块,还用于当所述第二判断单元判断不存在未处理的双字节修正数据时,返回成功信息; 所述第一获取模块包括第三获取单元、第一更新单元和第四获取单元; 所述第三获取单元,用于当所述第一判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 所述第一更新单元,用于根据所述第三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;所述第四获取单元,用于根据所述第一更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值;所述装置包括所述第四判断模块,用于当所述第一判断单元判断不存在未处理的单字节修正数据时,判断是否已获取到双字节修正数据的长度数据作为第二未处理数据长度;所述第一获取模块包括第五获取单元、第二更新单元和第六获取单元; 所述第五获取单元,用于当所述第二判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 所述第二更新单元,用于根据所述第五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 所述第六获取单元,用于根据所述第二更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
17.根据权利要求15所述的装置,其特征在于,所述第三获取模块包括第七获取单元和第八获取单元; 所述第七获取单元,用于根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址; 所述第八获取单元,用于当第五判断模块判断未获取到单字节修正数据的长度数据作为第二未处理数据长度时,根据所述读取地址从所述接收到的应用协议数据单元中获取所述相关地址组件的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址; 所述第二判断模块包括第三判断单元和第四判断单元; 所述第三判断单元,用于当所述第七获取单元获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据; 所述第四判断单元,用于当所述第五判断模块判断已获取到单字节修正数据的长度数据作为第二未处理数据长度或所述第八获取单元获取到所述第二未处理数据长度时,根据所述第二未处理数据长度判断是否存在未处理的单字节修正数据; 所述输出模块,还用于当所述第四判断单元判断不存在未处理的单字节修正数据时,返回成功信息; 所述第一获取模块包括第九获取单元、第三更新单元和第十获取单元; 所述第九获取单元,用于当所述第三判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 所述第三更新单元,用于根据所述第九获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;所述第十获取单元,用于根据所述第三更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值;所述装置包括所述第五判断模块,用于当所述第三判断单元判断不存在未处理的双字节修正数据时,判断是否已获取到单字节修正数据的长度数据作为第二未处理数据长度;所述第一获取模块包括第十一获取单元、第四更新单元和第十二获取单元; 所述第十一获取单元,用于当所述第四判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 所述第四更新单元,用于根据所述第十一获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 所述第十二获取单元,用于根据所述第四更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
18.根据权利要求15所述的装置,其特征在于,所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的单字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的双字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的单字节修正数据的长度数据的首地址; 所述第二判断模块包括第五判断单元和第六判断单元; 所述第五判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的单字节修正数据; 所述第六判断单元,用于当所述第五判断单元判断不存在未处理的单字节修正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的双字节修正数据; 所述输出模块,还用于当所述第六判断单元判断不存在未处理的双字节修正数据时,返回成功信息; 所述第一获取模块包括第十三获取单元、第五更新单元和第十四获取单元; 所述第十三获取单元,用于当所述第五判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 所述第五更新单元,用于根据所述第十三获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 所述第十四获取单元,用于根据所述第五更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值; 所述第一获取模块包括第十五获取单元、第六更新单元和第十六获取单元; 所述第十五获取单元,用于当所述第六判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 所述第六更新单元,用于根据所述第十五获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址;所述第十六获取单元,用于根据所述第六更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值。
19.根据权利要求15所述的装置,其特征在于,所述第三获取模块具体用于,根据读取地址从接收到的应用协议数据单元中获取所述相关地址组件中的双字节修正数据的长度数据作为第一未处理数据长度,获取所述相关地址组件中的单字节修正数据的长度数据作为第二未处理数据长度,根据获取到的所述长度数据的长度更新所述读取地址;所述读取地址的初始值为所述相关地址组件中的双字节修正数据的长度数据的首地址; 所述第二判断模块包括第七判断单元和第八判断单元; 所述第七判断单元,用于当所述第三获取模块获取到所述第一未处理数据长度后,根据所述第一未处理数据长度判断是否存在未处理的双字节修正数据; 所述第八判断单元,用于当所述第七判断单元判断不存在未处理的双字节修正数据时,根据所述第三获取模块获取到的所述第二未处理数据长度判断是否存在未处理的单字节修正数据; 所述输出模块,还用于当所述第八判断单元判断不存在未处理的单字节修正数据时,返回成功信息; 所述第一获取模块包括第十七获取单元、第七更新单元和第十八获取单元; 所述第十七获取单元,用于当所述第七判断单元判断存在未处理的双字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第一修正数据,根据读取到的所述相关地址组件中的数据,更新所述第一未处理数据长度和所述读取地址; 所述第七更新单元,用于根据所述第十七获取单元获取到的所述第一修正数据更新被重定位数据的第一物理地址;所述被重定位数据的第一物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 所述第十八获取单元,用于根据所述第七更新单元更新得到的所述被重定位数据的第一物理地址从所述JAVA智能卡存储区中获取2个字节的数据作为常量池组件中的索引值; 所述第一获取模块包括第十九获取单元、第八更新单元和第二十获取单元; 所述第十九获取单元,用于当所述第八判断单元判断存在未处理的单字节修正数据时,根据所述读取地址从所述应用协议数据单元中获取所述相关地址组件的I个字节的数据作为第二修正数据,根据读取到的所述相关地址组件中的数据,更新所述第二未处理数据长度和所述读取地址; 所述第八更新单元,用于根据所述第十九获取单元获取到的所述第二修正数据更新被重定位数据的第二物理地址;所述被重定位数据的第二物理地址的初始值为所述JAVA智能卡存储的方法组件基地址; 所述第二十获取单元,用于根据所述第八更新单元更新得到的所述被重定位数据的第二物理地址从所述JAVA智能卡存储区中获取I个字节的数据作为常量池组件中的索引值。
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个字节的数据得到第一参数,根据所述第一参数更新所述第三指令的指令参数。
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获取包的导出表地址,根据当前项数据的第五部分的数据和所述包的导出表地址,在包的导出表中获取方法的偏移值;所述第一更新模块,具体用于当所述第一处理模块得到所述方法的偏移值,或所述第二十八获取单元获取到所述方法的偏移值后,将所述方法的偏移值作为第一参数,根据所述第一参数更新所述第 六指令的指令参数。
【文档编号】G06F9/445GK103914326SQ201410160741
【公开日】2014年7月9日 申请日期:2014年4月21日 优先权日:2014年4月21日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1