欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種高效更新java指令的方法和裝置制造方法

文檔序號:6544373閱讀:131來源:國知局
一種高效更新java指令的方法和裝置制造方法
【專利摘要】本發(fā)明公開一種高效更新JAVA指令的方法和裝置,包括:JAVA智能卡從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)修正數(shù)據(jù)從存儲區(qū)中獲取常量池組件中的索引值;JAVA智能卡根據(jù)獲取到的常量池組件中的索引值在常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型,若是內(nèi)部引用則根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)偏移值和指令對應(yīng)的組件起始地址得到第一參數(shù),若是外部引用則根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)在包的導(dǎo)出表中獲取第一參數(shù);JAVA智能卡根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù)。
【專利說明】一種高效更新JAVA指令的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息處理領(lǐng)域,尤其涉及一種高效更新JAVA指令的方法和裝置。
【背景技術(shù)】
[0002]對于JAVA智能卡而言,應(yīng)用程序的下載過程即是CAP文件寫入到EEPROM的過程,即是對CAP文件的下載過程。
[0003]現(xiàn)有技術(shù)中,在CAP文件的下載過程中,JAVA智能卡首先要根據(jù)卡外引用計(jì)算出被引用數(shù)據(jù)的物理地址,然后將物理地址填充的相應(yīng)的子表中,再根據(jù)物理地址在主表和子表中的索引得到該物理地址的引用,不但需要進(jìn)行重定位操作,而且還要進(jìn)行填表的步驟,下載過程復(fù)雜;JAVA卡虛擬機(jī)在執(zhí)行的時候則需要根據(jù)引用值通過查找主表和子表的方式找到實(shí)際的數(shù)據(jù),JAVA卡虛擬機(jī)在執(zhí)行過程中訪問數(shù)據(jù)的速度低。

【發(fā)明內(nèi)容】

[0004]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種高效更新JAVA指令的方法和裝置,簡化了 JAVA智能卡在CAP文件的下載過程中的處理流程。
[0005]本發(fā)明提供的一種高效更新JAVA指令的方法,包括:
[0006]步驟SI JAVA智能卡從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值;
[0007]步驟S2:所述JAVA智能卡根據(jù)獲取到的所述常量池組件中的索引值在所述常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù),是則執(zhí)行步驟S3,否則返回錯誤信息,結(jié)束;
[0008]步驟S3:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟S4,若是外部引用則執(zhí)行步驟S5 ;
[0009]步驟S4:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)所述偏移值和所述JAVA指令對應(yīng)的組件起始地址得到第一參數(shù),執(zhí)行步驟S6 ;
[0010]步驟S5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和所述包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù),執(zhí)行步驟S6 ;
[0011]步驟S6:所述JAVA智能卡根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù),結(jié)束。
[0012]所述步驟SI之前包括:
[0013]步驟SO-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0014]步驟S0-2:所述JAVA智能卡根據(jù)所述未處理數(shù)據(jù)長度判斷是否存在未處理的修正數(shù)據(jù),是則執(zhí)行步驟Si,否則返回成功信息,結(jié)束;[0015]所述步驟SI具體為:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址;
[0016]所述步驟S6之后包括:
[0017]步驟S7:所述JAVA智能卡判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成,是則返回成功信息,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元,返回步驟S0-2,否則返回步驟S0-2。
[0018]所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度按鍵;
[0019]所述步驟SO-1至步驟SI具體為:
[0020]步驟sl-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0021]步驟sl-2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟sl-3,否則執(zhí)行步驟sl-6 ;
[0022]步驟sl-3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0023]步驟sl-4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0024]步驟sl-5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ;
[0025]步驟sl-6:所述JAVA智能卡判斷是否已獲取雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟sl-7,否則所述JAVA智能卡根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址,執(zhí)行步驟sl-7 ;
[0026]步驟sl-7:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟sl-8,否則返回成功信息,結(jié)束;
[0027]步驟sl-8:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0028]步驟sl-9:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0029]步驟sl-ΙΟ:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
[0030]所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度時間包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù);
[0031]所述步驟SO-1至步驟SI具體為:
[0032]步驟s2_l:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0033]步驟s2_2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-3,否則執(zhí)行步驟s2-6 ;
[0034]步驟s2_3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0035]步驟s2_4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0036]步驟s2_5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ;
[0037]步驟s2-6:所述JAVA智能卡判斷是否已獲取單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟s2_7,否則所述JAVA智能卡根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址,執(zhí)行步驟s2-7 ;
[0038]步驟s2_7:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-8,否則返回成功信息,結(jié)束;
[0039]步驟s2_8:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0040]步驟s2_9:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0041 ] 步驟s2-10:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
[0042]所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù);
[0043]所述步驟SO-1至步驟SI具體為:
[0044]步驟s3_l:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0045]步驟s3_2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-3,否則執(zhí)行步驟s3-6 ;
[0046]步驟s3_3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0047]步驟s3_4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0048]步驟s3_5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ;
[0049]步驟s3_6:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-7,否則返回成功信息,結(jié)束;
[0050]步驟s3_7:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0051]步驟s3_8:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0052]步驟s3_9:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
[0053]所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù);
[0054]所述步驟SO-1至步驟SI具體為:
[0055]步驟s4_l:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0056]步驟s4_2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-3,否則執(zhí)行步驟s4-6 ;
[0057]步驟s4_3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0058]步驟s4_4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0059]步驟s4_5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ;
[0060]步驟s4_6:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-7,否則返回成功信息,結(jié)束;
[0061]步驟s4_7:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0062]步驟s4_8:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0063]步驟s4_9:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
[0064]所述步驟SI之前包括:
[0065]步驟S0-1’:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址,執(zhí)行步驟Si ;
[0066]所述步驟SI具體為:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址;
[0067]所述步驟S6之后包括:
[0068]步驟S8:所述JAVA智能卡判斷是否處理完所述相關(guān)地址組件中的所有數(shù)據(jù),是則返回成功信息,結(jié)束,否則執(zhí)行步驟S9 ;
[0069]步驟S9:所述JAVA智能卡判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成,是則返回成功信息,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元,返回步驟SI,否則返回步驟SI。
[0070]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第一指令,所述步驟S3至步驟S6具體為:
[0071]步驟Al:所述JAVA智能卡判斷所述第一指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟A2,若是外部引用則執(zhí)行步驟A3 ;
[0072]步驟A2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值,執(zhí)行步驟A7 ;
[0073]步驟A3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0074]步驟A4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟A5,否則執(zhí)行步驟A6 ;
[0075]步驟A5:所述JAVA智能卡更新所述第一指令的指令碼,執(zhí)行步驟A6 ;
[0076]步驟A6:所述JAVA智能卡根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,執(zhí)行步驟A7 ;
[0077]步驟A7:所述JAVA智能卡將所述類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù)。
[0078]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第二指令,所述步驟S3至步驟S6具體為:
[0079]步驟B1:所述JAVA智能卡判斷所述第二指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟B2,若是外部引用則執(zhí)行步驟B3 ;
[0080]步驟B2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟B7 ;
[0081]步驟B3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0082]步驟B4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟B5,否則執(zhí)行步驟B6;
[0083]步驟B5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟B7 ;
[0084]步驟B6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟B7 ;
[0085]步驟B7:所述JAVA智能卡根據(jù)所述類信息物理地址,在所述JAVA智能卡存儲區(qū)獲取當(dāng)前類信息;
[0086]步驟B8:所述JAVA智能卡判斷當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值,是則執(zhí)行步驟B9,否則執(zhí)行步驟BlO ;
[0087]步驟B9:所述JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟Bll ;
[0088]步驟BlO:所述JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟Bll ;
[0089]步驟Bll:所述JAVA智能卡根據(jù)所述當(dāng)前類信息的父類的類信息的物理地址,在所述JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值;
[0090]步驟B12:所述JAVA智能卡將所述索引值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第二指令的指令參數(shù)。
[0091]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第三指令,所述步驟S3至步驟S6具體為:
[0092]步驟Cl:所述JAVA智能卡判斷所述第三指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟C2,若是外部引用則執(zhí)行步驟C3 ;
[0093]步驟C2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟C7 ;
[0094]步驟C3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0095]步驟C4:所述JAVA所述智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟C5,否則執(zhí)行步驟C6;
[0096]步驟C5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟C7 ;
[0097]步驟C6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟C7 ;
[0098]步驟C7 JAVA智能卡根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址,根據(jù)所述被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù),根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到第一參數(shù),根據(jù)所述第一參數(shù)更新所述第三指令的指令參數(shù)。
[0099]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第四指令,所述步驟S3至步驟S6具體為:
[0100]步驟Dl:所述JAVA智能卡判斷所述第四指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟D2,若是外部引用則執(zhí)行步驟D3 ;
[0101]步驟D2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟D7 ;
[0102]步驟D3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0103]步驟D4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟D5,否則執(zhí)行步驟D6;
[0104]步驟D5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,并更新第四指令的指令碼,執(zhí)行步驟D7 ;
[0105]步驟D6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟D7 ;
[0106]步驟D7:所述JAVA智能卡根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址,將所述被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第四指令的指令參數(shù)。
[0107]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第五指令,所述步驟S3至步驟S6具體為:
[0108]步驟El:所述JAVA智能卡判斷所述第五指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟E2,若是外部引用則執(zhí)行步驟E3 ;
[0109]步驟E2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址,根據(jù)所述靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址,執(zhí)行步驟E4 ;
[0110]步驟E3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址,執(zhí)行步驟E4;
[0111]步驟E4:所述JAVA智能卡將所述被訪問靜態(tài)域的偏移地址作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第五指令的指令參數(shù)。
[0112]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第六指令,所述步驟S3至步驟S6具體為:
[0113]步驟Fl:所述JAVA智能卡判斷所述第六指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟F2,若是外部引用則執(zhí)行步驟F3 ;
[0114]步驟F2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的方法組件起始地址得到方法物理地址,根據(jù)所述方法物理地址和EEPROM基地址得到方法的偏移值,執(zhí)行步驟F7 ;
[0115]步驟F3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ;
[0116]步驟F4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟F5,否則執(zhí)行步驟F6;
[0117]步驟F5:所述JAVA智能卡更新第六指令的指令碼,執(zhí)行步驟F6 ;
[0118]步驟F6:所述JAVA智能卡根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值;
[0119]步驟F7:所述JAVA智能卡將所述方法的偏移值作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第六指令的指令參數(shù)。
[0120]一種高效更新JAVA指令的裝置,包括:第一獲取模塊、第二獲取模塊、第一判斷模塊、第一處理模塊、第二處理模塊、第一更新模塊和輸出模塊;
[0121]所述第一獲取模塊,用于從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值;
[0122]所述第二獲取模塊,用于根據(jù)所述第一獲取模塊獲取到的所述常量池組件中的索引值在所述常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù);
[0123]所述第一判斷模塊,用于當(dāng)所述第二獲取模塊獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型;
[0124]所述第一處理模塊,用于當(dāng)所述第一判斷模塊判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)所述偏移值和所述JAVA指令對應(yīng)的組件起始地址得到第一參數(shù);
[0125]所述第二處理模塊,用于當(dāng)所述第一判斷模塊判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為外部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和所述包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù);
[0126]所述第一更新模塊,用于當(dāng)所述第一處理模塊得到第一參數(shù)后,根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù);當(dāng)所述第二處理模塊得到第一參數(shù)后,根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù);
[0127]所述輸出模塊,用于當(dāng)所述第二獲取模塊未獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,返回錯誤信息。
[0128]所述裝置還包括:第三獲取模塊和第二判斷模塊;
[0129]所述第三獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0130]所述第二判斷模塊,用于根據(jù)所述第三獲取模塊獲取到的所述未處理數(shù)據(jù)長度判斷是否存在未處理的修正數(shù)據(jù);
[0131]所述輸出模塊,還用于當(dāng)所述第二判斷模塊判斷不存在未處理的修正數(shù)據(jù)時,返回成功信息;
[0132]所述第一獲取模塊,具體用于根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址;
[0133]所述裝置還包括第三判斷模塊和接收模塊;
[0134]所述第三判斷模塊,用于在所述第一更新模塊更新所述JAVA指令的指令參數(shù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成;
[0135]所述輸出模塊,還用于當(dāng)所述第三判斷模塊判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,返回成功信息;
[0136]所述接收模塊,用于當(dāng)所述第三判斷模塊判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元。
[0137]所述第三獲取模塊包括第一獲取單元和第二獲取單元;
[0138]所述第一獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0139]所述第二獲取單元,用于當(dāng)?shù)谒呐袛嗄K判斷未獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;
[0140]所述第二判斷模塊包括第一判斷單元和第二判斷單元;
[0141]所述第一判斷單元,用于當(dāng)所述第一獲取單元獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0142]所述第二判斷單元,用于當(dāng)所述第四判斷模塊判斷已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或所述第二獲取單元獲取到所述第二未處理數(shù)據(jù)長度時,根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0143]所述輸出模塊,還用于當(dāng)所述第二判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,返回成功信息;
[0144]所述第一獲取模塊包括第三獲取單元、第一更新單元和第四獲取單元;
[0145]所述第三獲取單元,用于當(dāng)所述第一判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0146]所述第一更新單元,用于根據(jù)所述第三獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0147]所述第四獲取單元,用于根據(jù)所述第一更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0148]所述裝置包括所述第四判斷模塊,用于當(dāng)所述第一判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,判斷是否已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;
[0149]所述第一獲取模塊包括第五獲取單元、第二更新單元和第六獲取單元;
[0150]所述第五獲取單元,用于當(dāng)所述第二判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0151]所述第二更新單元,用于根據(jù)所述第五獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0152]所述第六獲取單元,用于根據(jù)所述第二更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0153]所述第三獲取模塊包括第七獲取單元和第八獲取單元;
[0154]所述第七獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0155]所述第八獲取單元,用于當(dāng)?shù)谖迮袛嗄K判斷未獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;
[0156]所述第二判斷模塊包括第三判斷單元和第四判斷單元;
[0157]所述第三判斷單元,用于當(dāng)所述第七獲取單元獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0158]所述第四判斷單元,用于當(dāng)所述第五判斷模塊判斷已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或所述第八獲取單元獲取到所述第二未處理數(shù)據(jù)長度時,根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0159]所述輸出模塊,還用于當(dāng)所述第四判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,返回成功信息;[0160]所述第一獲取模塊包括第九獲取單元、第三更新單元和第十獲取單元;
[0161]所述第九獲取單元,用于當(dāng)所述第三判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0162]所述第三更新單元,用于根據(jù)所述第九獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0163]所述第十獲取單元,用于根據(jù)所述第三更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0164]所述裝置包括所述第五判斷模塊,用于當(dāng)所述第三判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,判斷是否已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;
[0165]所述第一獲取模塊包括第十一獲取單元、第四更新單元和第十二獲取單元;
[0166]所述第十一獲取單元,用于當(dāng)所述第四判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0167]所述第四更新單元,用于根據(jù)所述第十一獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0168]所述第十二獲取單元,用于根據(jù)所述第四更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0169]所述第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0170]所述第二判斷模塊包括第五判斷單元和第六判斷單元;
[0171]所述第五判斷單元,用于當(dāng)所述第三獲取模塊獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0172]所述第六判斷單元,用于當(dāng)所述第五判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述第三獲取模塊獲取到的所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0173]所述輸出模塊,還用于當(dāng)所述第六判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,返回成功信息;
[0174]所述第一獲取模塊包括第十三獲取單元、第五更新單元和第十四獲取單元;[0175]所述第十三獲取單元,用于當(dāng)所述第五判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;
[0176]所述第五更新單元,用于根據(jù)所述第十三獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0177]所述第十四獲取單元,用于根據(jù)所述第五更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0178]所述第一獲取模塊包括第十五獲取單元、第六更新單元和第十六獲取單元;
[0179]所述第十五獲取單元,用于當(dāng)所述第六判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0180]所述第六更新單元,用于根據(jù)所述第十五獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0181]所述第十六獲取單元,用于根據(jù)所述第六更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0182]所述第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0183]所述第二判斷模塊包括第七判斷單元和第八判斷單元;
[0184]所述第七判斷單元,用于當(dāng)所述第三獲取模塊獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0185]所述第八判斷單元,用于當(dāng)所述第七判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述第三獲取模塊獲取到的所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0186]所述輸出模塊,還用于當(dāng)所述第八判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,返回成功信息;
[0187]所述第一獲取模塊包括第十七獲取單元、第七更新單元和第十八獲取單元;
[0188]所述第十七獲取單元,用于當(dāng)所述第七判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址;[0189]所述第七更新單元,用于根據(jù)所述第十七獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0190]所述第十八獲取單元,用于根據(jù)所述第七更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0191]所述第一獲取模塊包括第十九獲取單元、第八更新單元和第二十獲取單元;
[0192]所述第十九獲取單元,用于當(dāng)所述第八判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址;
[0193]所述第八更新單元,用于根據(jù)所述第十九獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;
[0194]所述第二十獲取單元,用于根據(jù)所述第八更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0195]所述裝置包括第四獲取模塊、第六判斷模塊、第七判斷模塊和接收模塊;
[0196]所述第四獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0197]所述第一獲取模塊,具體用于根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址;
[0198]所述第六判斷模塊,用于在所述第一更新模塊更新所述JAVA指令的指令參數(shù)后,判斷是否處理完所述相關(guān)地址組件中的所有數(shù)據(jù);
[0199]所述輸出模塊,還用于當(dāng)所述第六判斷模塊判斷已處理完所述相關(guān)地址組件中的所有數(shù)據(jù)后,返回成功信息;
[0200]所述第七判斷模塊,用于當(dāng)所述第六判斷模塊判斷未處理完所述相關(guān)地址組件中的所有數(shù)據(jù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成;
[0201]所述輸出模塊,還用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,返回成功信息;
[0202]所述接收模塊,用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單
J Li ο
[0203]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第一指令,所述第一判斷模塊,具體用于判斷所述第一指令的引用類型;
[0204]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第一指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值;
[0205]所述第二處理模塊包括第二十一獲取單元、第九判斷單元、第九更新單元和第二十二獲取單元;
[0206]所述第二十一獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第一指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0207]所述第九判斷單元,用于判斷所述第二十一獲取單元獲取到的所述包ID是否小
于第一預(yù)設(shè)值;
[0208]所述第九更新單元,用于當(dāng)所述第九判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,更新第一指令的指令碼;
[0209]所述第二十二獲取單元,用于當(dāng)所述第九判斷單元判斷所述包ID不小于第一預(yù)設(shè)值或所述第九更新單元更新第一指令的指令碼后,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值;
[0210]所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述偏移值后,將類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù);當(dāng)所述第二十二獲取單元獲取到所述偏移值后,將類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù)。
[0211 ] 若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第二指令,所述第一判斷模塊,具體用于判斷所述第二指令的引用類型;
[0212]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第二指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值;
[0213]所述第二處理模塊包括第二十三獲取單元、第十判斷單元、第一處理單元和第二處理單元;
[0214]所述第二十三獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第二指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0215] 所述第十判斷單元,用于判斷所述第二十三獲取單元獲取到的所述包ID是否小
于第一預(yù)設(shè)值;
[0216]所述第一處理單元,用于當(dāng)所述第十判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址;
[0217]所述第二處理單元,用于當(dāng)所述第十判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0218]所述第一更新模塊包括第二十四獲取單元、第十一判斷單元、第三處理單元、第四處理單元、第五處理單元和第十更新單元;
[0219]所述第二十四獲取單元,用于當(dāng)所述第一處理模塊得到類信息物理地址,或所述第一處理單元得到類信息物理地址,或所述第二處理單元得到類信息物理地址后,根據(jù)所述類信息物理地址,在JAVA智能卡存儲區(qū)獲取當(dāng)前類信息;
[0220]所述第十一判斷單元,用于判斷所述第二十四獲取單元獲取到的當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值;
[0221]所述第三處理單元,用于當(dāng)所述第十一判斷單元判斷當(dāng)前類信息的第一部分的數(shù)據(jù)為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址;
[0222]所述第四處理單元,用于當(dāng)所述第十一判斷單元判斷當(dāng)前類信息的第一部分的數(shù)據(jù)不為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址;
[0223]所述第五處理單元,用于當(dāng)所述第三處理單元或所述第四處理單元得到當(dāng)前類信息的父類的類信息的物理地址后,根據(jù)當(dāng)前類信息的父類的類信息的物理地址,在所述JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值;
[0224]所述第十更新單元,用于當(dāng)所述第五處理單元得到所述索引值后,將所述索引值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第二指令的指令參數(shù)。
[0225]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第三指令,所述第一判斷模塊,具體用于判斷所述第三指令的引用類型;
[0226]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第三指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址;
[0227]所述第二處理模塊包括第二十五獲取單元、第十二判斷單元、第六處理單元和第七處理單元;
[0228]所述第二十五獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第三指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0229]所述第十二判斷單元,用于判斷所述第二十五獲取單元獲取到的所述包ID是否
小于第一預(yù)設(shè)值;
[0230]所述第六處理單元,用于當(dāng)所述第十二判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址;
[0231]所述第七處理單元,用于當(dāng)所述第十二判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0232]所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述類信息物理地址,或所述第六處理單元獲取到所述類信息物理地址,或所述第七處理單元獲取到所述類信息物理地址后,根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址,根據(jù)所述被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù),根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)得到第一參數(shù),根據(jù)所述第一參數(shù)更新所述第三指令的指令參數(shù)。
[0233]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第四指令,所述第一判斷模塊,具體用于判斷所述第四指令的引用類型;
[0234]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第四指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址;
[0235]所述第二處理模塊包括第二十六獲取單元、第十三判斷單元、第八處理單元和第九處理單元;
[0236]所述第二十六獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第四指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址;
[0237]所述第十三判斷單元,用于判斷所述第二十六獲取單元獲取到的所述包ID是否
小于第一預(yù)設(shè)值;
[0238]所述第八處理單元,用于當(dāng)所述第十三判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,并更新第四指令的指令碼;
[0239]所述第九處理單元,用于當(dāng)所述第十三判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0240]所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述類信息物理地址,或所述第八處理單元獲取到所述類信息物理地址,或所述第九處理單元獲取到所述類信息物理地址后,根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址,將所述被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第四指令的指令參數(shù)。
[0241]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第五指令,所述第一判斷模塊,具體用于判斷所述第五指令的引用類型;
[0242]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第五指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址,根據(jù)所述靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址;
[0243]所述第二處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第五指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址;[0244]所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述被訪問靜態(tài)域的偏移地址,或所述第二處理模塊得到所述被訪問靜態(tài)域的偏移地址后,將所述被訪問靜態(tài)域的偏移地址作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第五指令的指令參數(shù)。
[0245]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第六指令,所述第一判斷模塊,具體用于判斷所述第六指令的引用類型;
[0246]所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第六指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的方法組件起始地址得到方法物理地址,根據(jù)所述方法物理地址和EEPROM基地址得到方法的偏移值;
[0247]所述第二處理模塊包括第二十七獲取單元、第十四判斷單元、第十一更新單元和第二十八獲取單元;
[0248]所述第二十七獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第六指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ;
[0249]所述第十四判斷單元,用于判斷所述第二十七獲取單元獲取到的所述包ID是否
小于第一預(yù)設(shè)值;
[0250]所述第十一更新單元,用于當(dāng)所述第十四判斷單元判斷所述包ID小于所述第一預(yù)設(shè)值時,更新所述第六指令的指令碼;
[0251]所述第二十八獲取單元,用于當(dāng)所述第十三判斷單元判斷所述包ID不小于所述第一預(yù)設(shè)值,或所述第十一更新單元更新第六指令的指令碼后,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值;
[0252]所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述方法的偏移值,或所述第二十八獲取單元獲取到所述方法的偏移值后,將所述方法的偏移值作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第六指令的指令參數(shù)。
[0253]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0254]本發(fā)明提供的方法根據(jù)JAVA智能卡卡外引用計(jì)算出被引用數(shù)據(jù)的物理地址和偏移地址,直接將被引用數(shù)據(jù)的偏移地址覆蓋到指令中相應(yīng)的被重定位處,簡化了 JAVA智能卡在CAP文件的下載過程中的處理流程。
【專利附圖】

【附圖說明】
[0255]圖1是本發(fā)明實(shí)施例1提供的一種高效更新JAVA指令的方法的流程圖;
[0256]圖2是本發(fā)明實(shí)施例2提供的一種高效更新JAVA指令的方法的流程圖;
[0257]圖3是本發(fā)明實(shí)施例2提供的對第一指令進(jìn)行重定位的方法的流程圖;
[0258]圖4是本發(fā)明實(shí)施例2提供的對第二指令進(jìn)行重定位的方法的流程圖;
[0259]圖5是本發(fā)明實(shí)施例2提供的對第三指令進(jìn)行重定位的方法的流程圖;
[0260]圖6是本發(fā)明實(shí)施例2提供的對第四指令進(jìn)行重定位的方法的流程圖;
[0261]圖7是本發(fā)明實(shí)施例2提供的對第五指令進(jìn)行重定位的方法的流程圖;
[0262]圖8是本發(fā)明實(shí)施例2提供的對第六指令進(jìn)行重定位的方法的流程圖;
[0263]圖9是本發(fā)明實(shí)施例3提供的一種高效更新JAVA指令的裝置的模塊圖。【具體實(shí)施方式】
[0264]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0265]JAVA智能卡的可執(zhí)行文件(CAP文件)是編譯多個應(yīng)用程序(Applet)的生成結(jié)果,
包含了一個包中定義的所有類和接口,與包之間是--對應(yīng)的關(guān)系。實(shí)際發(fā)卡操作時,首
先需要將該可執(zhí)行文件下載至JAVA智能卡中,并安裝需要的應(yīng)用實(shí)例;用戶使用安裝的應(yīng)用實(shí)例執(zhí)行操作功能。在上述兩個操作階段均使用了可執(zhí)行文件(CAP文件)所提供的內(nèi)容。CAP文件包含12個組件,組件的標(biāo)簽值從I至12分別為:頭組件(COMPONENTJfeader)、目錄組件(C0MP0NENT_Directory)、應(yīng)用程序組件(C0MP0NENT_Applet)、輸入組件(C0MP0NENT_Import)、常量池組件(C0MP0NENT_ConstantPooI)、類信息組件(COMPONENT,Class)、方法組件(C0MP0NENT_Method)、靜態(tài)域組件(C0MP0NENT_StaticFieId)、相關(guān)地址組件(COMPONENT_ReferenceLocation)、輸出組件(C0MP0NENT_Export)、描述符組件(C0MP0NENT_Descriptor)和調(diào)試組件(C0MP0NENT_Debug),一個完整的 CAP 文件,除應(yīng)用程序組件(C0MP0NENT_AppIet)、輸出組件(C0MP0NENT_Export)和調(diào)試組件(COMPONENT,Debug)是可選外,其他均為必選。各個組件作為應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)按順序被發(fā)送到JAVA智能卡中;若一個組件的數(shù)據(jù)的長度超過應(yīng)用協(xié)議數(shù)據(jù)單元規(guī)定的傳輸數(shù)據(jù)的長度,則該組件被分包通過多個應(yīng)用協(xié)議數(shù)據(jù)單元發(fā)送給JAVA智能卡;若一個組件的數(shù)據(jù)的長度未達(dá)到應(yīng)用協(xié)議數(shù)據(jù)單元規(guī)定的傳輸數(shù)據(jù)的長度,則在該應(yīng)用協(xié)議數(shù)據(jù)單元繼續(xù)傳輸下一個組件的數(shù)據(jù),即,JAVA智能卡接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中可能只包含一個組件的數(shù)據(jù),也可能包含多個組件的數(shù)據(jù)。最后在JAVA智能卡上只保留了 4個組件:方法組件(C0MP0NENT_Method)、類信息組件(C0MP0NENT_Class)、靜態(tài)域組件(COMPONENT,StaticField)和輸出組件(C0MP0NENT_Export),其余的組件只是安裝時提取有用信息而不在JAVA智能卡中保存。
[0266]CAP文件的12個組件中,類信息組件(C0MP0NENT_Class)保存應(yīng)用聲明的所有類和接口的信息;方法組件(C0MP0NENT_Method)保存應(yīng)用聲明的所有方法和接口,并利用2字節(jié)索引引用類、方法和域;常量池組件(C0MP0NENT_COnStantPOOl)保存方法組件(C0MP0NENT_Method)引用的所有類、方法和域信息,分為類、實(shí)例域、虛方法、父方法、靜態(tài)域和靜態(tài)方法6類,每組信息為4個字節(jié);相關(guān)地址組件(C0MP0NENT_ReferenceLocation)保存方法組件(C0MP0NENT_Method)中索引的偏移。
[0267]在CAP文件的下載過程中,JAVA智能卡需要將一部分組件進(jìn)行解析,同時對相關(guān)地址組件(C0MP0NENT_ReferenceLocation )中指定的位置進(jìn)行鏈接,能夠鏈接到方法組件(C0MP0NENT_Method)中的一個索引號,并根據(jù)索引號查找常量池組件(C0MP0NENT_ConstantPool)中保存的、與該索引號對應(yīng)的類、方法或域在EEPROM中的實(shí)際地址,調(diào)用實(shí)際地址中存儲的數(shù)據(jù);也就是說,方法的調(diào)用其實(shí)是需要兩個步驟來實(shí)現(xiàn)的:
[0268]1.根據(jù)相關(guān)地址組件(C0MP0NENT_ReferenceLocation)中指定的位置進(jìn)行鏈接,獲取方法組件(C0MP0NE NT_Method)中的索引號;[0269]2.根據(jù)索引號查找常量池組件(C0MP0NENT_ConstantPool)中保存的、與該索引號對應(yīng)的類、方法或域在EEPROM中的實(shí)際地址,調(diào)用實(shí)際地址中存儲的數(shù)據(jù)。
[0270]實(shí)施例1
[0271]本發(fā)明的實(shí)施例1提供一種高效更新JAVA指令的方法,如圖1所示,該方法包括:
[0272]步驟SI JAVA智能卡從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值;
[0273]步驟S2 JAVA智能卡根據(jù)獲取到的常量池組件中的索引值在常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù),是則執(zhí)行步驟S3,否則返回錯誤信息,結(jié)束;
[0274]步驟S3 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟S4,若是外部引用則執(zhí)行步驟S5;
[0275]步驟S4 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)偏移值和JAVA指令對應(yīng)的組件起始地址得到第一參數(shù),執(zhí)行步驟S6 ;
[0276]步驟S5 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù),執(zhí)行步驟S6 ;
[0277]步驟S6 JAVA智能卡根據(jù)第一參數(shù)更新JAVA指令的指令參數(shù),結(jié)束。
[0278]實(shí)施例2
[0279]本發(fā)明的實(shí)施例2提供一種高效更新JAVA指令的方法,如圖2所示,該方法包括:
[0280]當(dāng)JAVA智能卡接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中組件的標(biāo)簽值為9時,執(zhí)行以下步驟:
[0281]步驟101 JAVA智能卡從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的長度,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度,更新讀取地址和已處理數(shù)據(jù)的長度;
[0282]具體地,JAVA智能卡獲取應(yīng)用協(xié)議數(shù)據(jù)單元中組件的標(biāo)簽值之后的2個字節(jié)的數(shù)據(jù)作為相關(guān)地址組件的長度;讀取地址的初始值為相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址,單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)為2個字節(jié),之后為單字節(jié)修正數(shù)據(jù);已處理數(shù)據(jù)的長度初始值為O ;更新讀取地址為將讀取地址自加2,更新已處理數(shù)據(jù)的長度為將已處理數(shù)據(jù)的長度自加3 ;
[0283]例如,應(yīng)用協(xié)議數(shù)據(jù)單元為:
[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為組件的標(biāo)簽值,0x0066為相關(guān)地址組件的長度,0x0030單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù);[0290]步驟102 JAVA智能卡根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟103,否則執(zhí)行步驟106 ;
[0291]步驟103 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0292]具體地,更新讀取地址為將讀取地址自加1,更新第一未處理數(shù)據(jù)長度為將第一未處理數(shù)據(jù)長度自減1,更新已處理數(shù)據(jù)的長度為將已處理數(shù)據(jù)的長度自加I;
[0293]步驟104 JAVA智能卡根據(jù)第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;
[0294]具體地,被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;更新被重定位數(shù)據(jù)的第一物理地址,具體為:將被重定位數(shù)據(jù)的第一物理地址加上第一修正數(shù)據(jù)得到更新后的被重定位數(shù)據(jù)的第一物理地址;更新后的被重定位數(shù)據(jù)的第一物理地址為方法組件中被重定位數(shù)據(jù)的物理地址;
[0295]例如,被重定位數(shù)據(jù)的第一物理地址的初始值為方法組件基地址,即0x10000,若第一修正數(shù)據(jù)為0x12,則更新后的被重定位數(shù)據(jù)的第一物理地址為0x10000+0x12=0x10012 ;若被重定位數(shù)據(jù)的第一物理地址為0x10012,第一修正數(shù)據(jù)為0x04,則更新后的被重定位數(shù)據(jù)的第一物理地址為0x10012+0x04=0x10016 ;若被重定位數(shù)據(jù)的第一物理地址為0x10016,第一修正數(shù)據(jù)為0x039,則更新后的被重定位數(shù)據(jù)的第一物理地址為 0x10016+0x39=0x1004F ;
[0296]步驟105 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0297]例如,方法組件基地址為0x10000,方法組件如下:
[0298]0x010x020xDF0x800x080x020xE90x000x180x020x400xl80x8C0x000xlIOx18
[0299]0x030x890x000x180x010x870x010x8F0x000xI30x3D0x8C0x000x140x930x05
[0300]0x300x8F0x000xl70x3D0xl80xlD0xlE0x8C0x000x060x3B0x7A0x000x200x7A
[0301]0x010x200x040x780x050x240x030x3IOx190x8B0x000x070x2E0xlB0x030x25
[0302]0x610x270xlB0x040x250x100xA40x6B0x200xl80xl90x8B0x000x080x890x00
[0303]0x8D0x000x090xlB0x080xlB0x070x250x8B0x000x0A0x990x000xB60xll0x69
[0304]0x990x8D0x000x0B0xA80x000xAD0xlB0x030x250x060x530x06*0x6E0xl30xlB......[0305]若被重定位數(shù)據(jù)的第一物理地址為0x10012,則獲取到的I個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x00 ;若被重定位數(shù)據(jù)的第一物理地址為0x10016,則獲取到的I個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x01 ;若被重定位數(shù)據(jù)的第一物理地址為0x1004F,則獲取到的I個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x00 ;
[0306]步驟106 JAVA智能卡判斷是否已從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟107,否則JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址和已處理數(shù)據(jù)的長度,執(zhí)行步驟107;
[0307]具 體地,更新讀取地址為將讀取地址自加2,更新已處理數(shù)據(jù)的長度為將已處理數(shù)據(jù)的長度自加2 ;[0308]具體地,雙字節(jié)修正數(shù)據(jù)的前2個字節(jié)的數(shù)據(jù)為雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù),之后為雙字節(jié)修正數(shù)據(jù)的內(nèi)容;例如,雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)為0x0032 ;
[0309]步驟107 JAVA智能卡根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟108,否則返回成功信息,結(jié)束;
[0310]步驟108 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0311]具體地,更新讀取地址為將讀取地址自加I,更新第二未處理數(shù)據(jù)長度為將第二未處理數(shù)據(jù)長度自減1,更新已處理數(shù)據(jù)的長度為將已處理數(shù)據(jù)的長度自加I;
[0312]步驟109 JAVA智能卡根據(jù)第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;
[0313]具體地,被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;更新被重定位數(shù)據(jù)的第二物理地址,具體為:將被重定位數(shù)據(jù)的第二物理地址加上第二修正數(shù)據(jù)得到更新后的被重定位數(shù)據(jù)的第二物理地址;更新后的被重定位數(shù)據(jù)的第二物理地址為方法組件中被重定位數(shù)據(jù)的物理地址;
[0314]例如,被重定位數(shù)據(jù)的第二物理地址的初始值為方法組件基地址,即0x10000,若第二修正數(shù)據(jù)為0x07,則更新后的被重定位數(shù)據(jù)的第二物理地址為0x10000+0x12=0x10007 ;若被重定位數(shù)據(jù)的第二物理地址為0x10007,第二修正數(shù)據(jù)為0x06,則更新后的被重定位數(shù)據(jù)的第二物理地址為0xl0012+0x04=0xl000D ;若被重定位數(shù)據(jù)的第二物理地址為OxlOOOD,第二修正數(shù)據(jù)為ΟχΟΒ,則更新后的被重定位數(shù)據(jù)的第二物理地址為 0x10016+0x39=0x10018 ;
[0315]步驟110 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0316]例如,若被重定位數(shù)據(jù)的第二物理地址為0x10007,則獲取到的2個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x0018 ;若被重定位數(shù)據(jù)的第二物理地址為OxlOOOD,則獲取到的2個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x0011 ;若被重定位數(shù)據(jù)的第二物理地址為0x10018,則獲取到的2個字節(jié)的數(shù)據(jù),即常量池組件中的索引值為0x0013 ;
[0317]步驟111:JAVA智能卡根據(jù)獲取到的常量池組件中的索引值在常量池組件中獲取一項(xiàng)數(shù)據(jù),判斷是否能根據(jù)索引值獲取到數(shù)據(jù),是則將獲取到的數(shù)據(jù)作為當(dāng)前項(xiàng)數(shù)據(jù),執(zhí)行步驟112,否則返回錯誤信息,結(jié)束;
[0318]具體地,在常量池組件中,一項(xiàng)數(shù)據(jù)是大小為4個字節(jié)的數(shù)據(jù);
[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為常量池組件中數(shù)據(jù)項(xiàng)的個數(shù),之后每4個字節(jié)為一項(xiàng)數(shù)據(jù);
[0331]若常量池組件中的索引值為0x00,則當(dāng)前項(xiàng)數(shù)據(jù)為0x02000006 ;若常量池組件中的索引值為0x01,則當(dāng)前項(xiàng)數(shù)據(jù)為0x02000001 ;若常量池組件中的索引值為0x0018,則當(dāng)前項(xiàng)數(shù)據(jù)為0x01810100 ;若常量池組件中的索引值為0x0011,則當(dāng)前項(xiàng)數(shù)據(jù)為0x06800300 ;若常量池組件中的索引值為0x0013,則當(dāng)前項(xiàng)數(shù)據(jù)為0x01810300 ;
[0332]步驟112:JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)的值,若為I則對第一指令進(jìn)行重定位,執(zhí)行步驟113 ;若為2則對第二指令進(jìn)行重定位,執(zhí)行步驟113 ;若為3則對第三指令進(jìn)行重定位,執(zhí)行步驟113 ;若為4則對第四指令進(jìn)行重定位,執(zhí)行步驟113 ;若為5則對第五指令進(jìn)行重定位,執(zhí)行步驟113 ;若為6則對第六指令進(jìn)行重定位,執(zhí)行步驟113 ;
[0333]具體地,第一指令為new指令、newarray指令、instanceof指令和chackcast指令;第二指令為getfield指令和putfield指令;第三指令為invokevirtual指令;第四指令為invokespecial指令;第五指令為putstatic指令和getstatic指令;第六指令為invokestatic 指令;
[0334]步驟113 JAVA智能卡根據(jù)已處理數(shù)據(jù)的長度和相關(guān)地址組件的長度判斷是否處理完相關(guān)地址組件中的所有數(shù)據(jù),是則返回成功信息,結(jié)束,否則執(zhí)行步驟114 ;
[0335]具體地,JAVA智能卡判斷已處理數(shù)據(jù)的長度是否等于獲取到的相關(guān)地址組件的長度,是則確定處理完相關(guān)地址組件中的所有數(shù)據(jù),否則確定未處理完相關(guān)地址組件中的所有數(shù)據(jù);
[0336]步驟114 JAVA智能卡判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成,是則返回成功信息,執(zhí)行步驟115,否則返回步驟102 ;
[0337]步驟115 JAVA智能卡等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元,返回步驟102;
[0338]本實(shí)施例中,由于相關(guān)地址組件的數(shù)據(jù)可能被分包通過多個應(yīng)用協(xié)議數(shù)據(jù)單元發(fā)送給JAVA智能卡,所以JAVA智能卡需要接收多個應(yīng)用協(xié)議數(shù)據(jù)單元才能接收到全部的相關(guān)地址組件的數(shù)據(jù);
[0339]具體地,對第一指令進(jìn)行重定位,如圖3所示,包括:
[0340]步驟201:JAVA智能卡判斷第一指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟202,若是外部引用則執(zhí)行步驟205;
[0341]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第一指令的引用類型為外部引用,否則確定第一指令的引用類型為內(nèi)部引用;
[0342]例如,當(dāng)前項(xiàng)數(shù)據(jù)為:0x010x810x030x00 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x81,SP10000001,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位為1,確定第一指令的引用類型為外部引用;
[0343]步驟202 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值;
[0344]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù);
[0345]步驟203 JAVA智能卡根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址;
[0346]具體地,第一偏移值加上類信息組件起始地址等于類信息物理地址;
[0347]步驟204 JAVA智能卡根據(jù)類信息物理地址和EEPROM基地址得到類信息的偏移值,執(zhí)行步驟210 ;
[0348]具體地,類信息物理地址減去EEPROM基地址等于類信息的偏移值;本實(shí)施例中,類信息的偏移值為類信息基于EEPROM的偏移地址;
[0349]步驟205 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0350]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0351]例如,當(dāng)前項(xiàng)數(shù)據(jù)為:0x010x810x030x00 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x81,即10000001,則被引用類信息所屬的包的包ID為I ;
[0352]步驟206 JAVA智能卡判斷包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟207,否則執(zhí)行步驟208 ;
[0353]例如,第一預(yù)設(shè)值為19;
[0354]步驟207 JAVA智能卡更新第一指令的指令碼,執(zhí)行步驟208 ;
[0355]具體地,JAVA智能卡通過更新第一指令的指令碼將引用EEPROM中類信息的第一指令更改為引用ROM中類信息;
[0356]例如,第一指令為0X8R)X000X03,該第一指令引用EEPROM中類信息;將第一指令中的指令碼0x8F更改為OxBC,則更改后的第一指令為0XBC0X000X03,更改后的第一指令引用ROM中類信息;
[0357]步驟208 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0358]步驟209 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,執(zhí)行步驟210 ;
[0359]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);
[0360]例如,本實(shí)施例中,當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù)為0x03,獲取到的類信息的偏移值為0x010x81 ;
[0361]步驟210 JAVA智能卡將類信息的偏移值作為第一參數(shù),根據(jù)第一參數(shù)更新第一指令的指令參數(shù);
[0362]例如,第一指令為0x8R)x000x03,將第一指令中的指令參數(shù)0x000x03更改為獲取到的類信息的偏移值0x010x81,則更改后的第一指令為0xBC0x010x81 ;
[0363]具體地,對第二指令進(jìn)行重定位,如圖4所示,包括:
[0364]步驟301:JAVA智能卡判斷第二指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟302,若是外部引用則執(zhí)行步驟304;
[0365]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第二指令的引用類型為外部引用,否則確定第二指令的引用類型為內(nèi)部引用;
[0366]例如,當(dāng)前項(xiàng)數(shù)據(jù)為0x020x010x030x00 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x01,即00000001,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位不為I ;
[0367]步驟302 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值;[0368]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù);
[0369]例如,當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù)為0x010x03,則第一偏移值為0x0103 ;
[0370]步驟303 JAVA智能卡根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟309 ;
[0371]具體地,第一偏移值加上類信息組件起始地址等于類信息物理地址;
[0372]例如,JAVA智能卡存儲的類型信息組件基地址為0x100380,則類信息物理地址為0x100380+0x0103=0x100483 ;
[0373]步驟304 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0374]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0375]步驟305 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0376]步驟306 JAVA智能卡判斷包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟307,否則執(zhí)行步驟308 ;
[0377]步驟307 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟309 ;
[0378]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上ROM基地址等于類信息物理地址;
[0379]步驟308 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟309 ;
[0380]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上EEPROM基地址等于類信息物理地址;
[0381]步驟309 JAVA智能卡根據(jù)類信息物理地址,在JAVA智能卡存儲區(qū)獲取當(dāng)前類信息;
[0382]步驟310:JAVA智能卡判斷當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值,是則執(zhí)行步驟311,否則執(zhí)行步驟312 ;
[0383]具體地,當(dāng)前類信息的第一部分的數(shù)據(jù)為當(dāng)前類信息的第2個字節(jié)的第5位;第二預(yù)設(shè)值為I ;
[0384]例如,當(dāng)前類信息的第2個字節(jié)為0x13,即00010011,則當(dāng)前類信息的第2個字節(jié)的第5位為1,確定當(dāng)前類信息的第一部分的數(shù)據(jù)為第二預(yù)設(shè)值;
[0385]步驟311 JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟313 ;
[0386]具體地,當(dāng)前類信息的第二部分的數(shù)據(jù)為當(dāng)前類信息的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù);當(dāng)前類信息的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù)加上ROM基地址等于當(dāng)前類信息的父類的類信息的物理地址;[0387]例如,ROM基地址為0x32000,當(dāng)前類信息的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù)為0x020x03,則當(dāng)前類信息的父類的類信息的物理地址為0x32000+0x0203=0x32203 ;
[0388]步驟312 JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟313 ;
[0389]具體地,當(dāng)前類信息的第二部分的數(shù)據(jù)為當(dāng)前類信息的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù);當(dāng)前類信息的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù)加上EEPROM基地址等于當(dāng)前類信息的父類的類信息的物理地址;
[0390]步驟313 JAVA智能卡根據(jù)當(dāng)前類信息的父類的類信息的物理地址,在JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)該數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值;
[0391]具體地,當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù)為當(dāng)前類信息的父類的類信息的第5個字節(jié)的數(shù)據(jù);當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù);當(dāng)前類信息的父類的類信息的第5個字節(jié)的數(shù)據(jù)加上當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)等于索引值;
[0392]例如,當(dāng)前類信息的父類的類信息的物理地址為0x32203,獲取到的當(dāng)前類信息的父類的類信息的第5個字節(jié)的數(shù)據(jù)為0x02,當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)為0x00,則索引值為0x00+0x02=0x02 ;
[0393]步驟314 JAVA智能卡將索引值作為第一參數(shù),根據(jù)第一參數(shù)更新第二指令的指令參數(shù);
[0394]例如,第二指令為0x830x23,則將第二指令的指令參數(shù)0x23更新為索引值0x02,即更新后的第二指令為0x830x02 ;
[0395]具體地,對第三指令進(jìn)行重定位,如圖5所示,包括:
[0396]步驟401 JAVA智能卡判斷第三指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟402,若是外部引用則執(zhí)行步驟404;
[0397]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第三指令的引用類型為外部引用,否則確定第三指令的引用類型為內(nèi)部引用;
[0398]例如,當(dāng)前項(xiàng)數(shù)據(jù)為0x030x020x050x01 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x02,即00000010,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位不為1,確定第三指令的引用類型為內(nèi)部引用;
[0399]步驟402 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值;
[0400]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù);
[0401]例如,當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù)為0x020x05,則第一偏移值為0x0205 ;
[0402]步驟403 JAVA智能卡根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟409 ;
[0403]具體地,第一偏移值加上類信息組件起始地址等于類信息物理地址;
[0404]例如,JAVA智能卡存儲的類型信息組件基地址為0x100380,第一偏移值為0x0205,則類信息物理地址為 0x100380+0x0205=0x100585 ;[0405]步驟404 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0406]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0407]步驟405 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0408]步驟406 JAVA智能卡判斷包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟407,否則執(zhí)行步驟408 ;
[0409]具體地,第一預(yù)設(shè)值為19 ;
[0410]步驟407 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟409 ;
[0411]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上ROM基地址等于類信息物理地址;
[0412]步驟408 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟409 ;
[0413]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上EEPROM基地址等于類信息物理地址;
[0414]步驟409 JAVA智能卡根據(jù)類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址;
[0415]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù);當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)為被調(diào)用方法的序號,JAVA智能卡根據(jù)被調(diào)用方法的序號在類信息中查找被調(diào)用方法的偏移地址;
[0416]例如,類信息物理地址為0x100585,當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)為0x01 ;查找到的被調(diào)用方法的偏移地址為0x100680 ;
[0417]步驟410 JAVA智能卡根據(jù)被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù);
[0418]具體地,JAVA智能卡根據(jù)被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)獲取被調(diào)用方法信息,獲取被調(diào)用方法信息的第2個字節(jié)的數(shù)據(jù)作為被調(diào)用方法的參數(shù)個數(shù);
[0419]例如,獲取到的被調(diào)用方法的參數(shù)個數(shù)為0x03 ;
[0420]步驟411 JAVA智能卡根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到第一參數(shù);
[0421]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù);
[0422]例如,被調(diào)用方法的參數(shù)個數(shù)為0x03,當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)為0x01,則第一參數(shù)為0x030x01 ;
[0423]步驟412 JAVA智能卡根據(jù)第一參數(shù)更新第三指令的指令參數(shù);
[0424]例如,第三指令為0x8B0x000x07,則將第三指令的指令參數(shù)0x000x07更新為第一參數(shù)0x030x01,則更新后的第三指令為0x8B0x030x01 ;
[0425]具體地,對第四指令進(jìn)行重定位,如圖6所示,包括:[0426]步驟501:JAVA智能卡判斷第四指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟502,若是外部引用則執(zhí)行步驟504;
[0427]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第四指令的引用類型為外部引用,否則確定第四指令的引用類型為內(nèi)部引用;
[0428]例如,當(dāng)前項(xiàng)數(shù)據(jù)為0x040x030x060x02 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x03,即00000011,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位不為I ;
[0429]步驟502 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值;
[0430]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù);
[0431]例如,本實(shí)施例中,當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù)為0x030x06,則第一偏移值為0x0306 ;
[0432]步驟503 JAVA智能卡根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟510 ;
[0433]具體地,第一偏移值加上類信息組件起始地址等于類信息物理地址;
[0434]例如,JAVA智能卡存儲的類信息組件起始地址為0x100380,第一偏移值為0x0306,則類信息物理地址為 0x100380+0x0306=0x100686 ;
[0435]步驟504 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0436]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0437]步驟505 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0438]步驟506 JAVA智能卡判斷包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟507,否則執(zhí)行步驟509 ;
[0439]具體地,第一預(yù)設(shè)值為19 ;
[0440]步驟507 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟508 ;
[0441]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上ROM基地址等于類信息物理地址;
[0442]步驟508 JAVA智能卡更新第四指令的指令碼,執(zhí)行步驟510 ;
[0443]具體地,JAVA智能卡通過更新第四指令的指令碼將調(diào)用EEPROM中父方法的第四指令改為調(diào)用ROM中父方法;
[0444]步驟509 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟510 ;
[0445]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)的數(shù)據(jù);類信息的偏移值加上EEPROM基地址等于類信息物理地址;
[0446]步驟510 JAVA智能卡根據(jù)類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址;[0447]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù);當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)為被調(diào)用方法的序號,JAVA智能卡根據(jù)被調(diào)用方法的序號在類信息中查找到被調(diào)用方法的偏移地址;
[0448]例如,當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)為0x02,類信息物理地址為0x100686 ;查找到的被調(diào)用方法的偏移地址為0x0680 ;
[0449]步驟511 JAVA智能卡將被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)第一參數(shù)更新第四指令的指令參數(shù);
[0450]例如,第四指令為0x803x010x07,將第四指令的指令參數(shù)0x010x07更新為被調(diào)用方法的偏移地址0x0680,則更新后的第四指令為0x8C0x060x80 ;
[0451]具體地,對第五指令進(jìn)行重定位,如圖7所示,包括:
[0452]步驟601 JAVA智能卡判斷第五指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟602,若是外部引用則執(zhí)行步驟605;
[0453]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第五指令的引用類型為外部引用,否則確定第五指令的引用類型為內(nèi)部引用;
[0454]例如,當(dāng)前項(xiàng)數(shù)據(jù)為0x050x030x060x02 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x03,即00000011,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位不為1,確定第五指令的引用類型為內(nèi)部引用;
[0455]步驟602 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值;
[0456]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù);
[0457]例如,當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù)為0x060x02,則第二偏移值為0x0602 ;
[0458]步驟603 JAVA智能卡根據(jù)第二偏移值和JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址;
[0459]具體地,第二偏移值加上本包中類信息組件起始地址等于類信息物理地址;
[0460]例如,JAVA智能卡存儲的靜態(tài)域組件起始地址為0x100680,第二偏移值為0x0602,則靜態(tài)域物理地址為 0xl00680+0x0602=0xl00C82 ;
[0461 ] 步驟604 JAVA智能卡根據(jù)靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址,執(zhí)行步驟608 ;
[0462]具體地,靜態(tài)域物理地址減去EEPROM基地址等于被訪問靜態(tài)域的偏移地址;
[0463]例如,靜態(tài)域物理地址為0xl00C82,EEPROM基地址為0x100380,則被訪問靜態(tài)域的偏移地址為 0xl00C82 - 0x100380=0x0902 ;
[0464]步驟605 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0465]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0466]步驟606 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0467]步驟607:JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址;[0468]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)和第3個字節(jié)的數(shù)據(jù);
[0469]步驟608 JAVA智能卡將被訪問靜態(tài)域的偏移地址作為第一參數(shù),根據(jù)第一參數(shù)更新第五指令的指令參數(shù);
[0470]例如,第五指令為0X7B0X000X37,將第五指令的指令參數(shù)0x000x37更新為被訪問靜態(tài)域的偏移地址0x0902,則更新后的第五指令為0x7B0x090x02 ;
[0471]具體地,對第六指令進(jìn)行重定位,如圖8所示,包括:
[0472]步驟701:JAVA智能卡判斷第六指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟705,若是外部引用則執(zhí)行步驟702;
[0473]具體地,JAVA智能卡判斷當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位是否為1,是則確定第六指令的引用類型為外部引用,否則確定第六指令的引用類型為內(nèi)部引用;
[0474]例如,當(dāng)前項(xiàng)數(shù)據(jù)為0x060x030x060x02 ;當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)為0x03,即00000011,則當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的最高位不為1,確定第六指令的引用類型為內(nèi)部引用;
[0475]步驟702 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值;
[0476]具體地當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù);
[0477]例如,當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù)為0x060x02,則第二偏移值為0x0602 ;
[0478]步驟703 JAVA智能卡根據(jù)第二偏移值和JAVA智能卡存儲的方法組件起始地址得到方法物理地址;
[0479]具體地,第二偏移值加上方法組件起始地址等于方法物理地址;
[0480]例如,JAVA智能卡存儲的方法組件起始地址為0x100680,第二偏移值為0x0602,則方法物理地址為 0xl00680+0x0602=0xl00C82 ;
[0481 ] 步驟704 JAVA智能卡根據(jù)方法物理地址和EEPROM基地址得到方法的偏移值,執(zhí)行步驟710 ;
[0482]具體地,方法物理地址減去EEPROM基地址等于方法的偏移值;本實(shí)施例中,方法的偏移值為方法基于EEPROM的偏移地址;
[0483]例如,方法物理地址為0xl00C82,EEPROM基地址為0x100380,則方法的偏移值為0xl00C82 - 0x100380=0x0902 ;
[0484]步驟705 JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ;
[0485]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第2個字節(jié)的后7位數(shù)據(jù);
[0486]步驟706 JAVA智能卡判斷包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟707,否則執(zhí)行步驟708 ;
[0487]具體地,第一預(yù)設(shè)值為19 ;
[0488]步驟707 JAVA智能卡更新第六指令的指令碼,執(zhí)行步驟708 ;
[0489]具體地,JAVA智能卡通過更新第六指令的指令碼將調(diào)用EEPROM中靜態(tài)方法第六指令更改為調(diào)用ROM中靜態(tài)方法;
[0490]步驟708 JAVA智能卡根據(jù)包ID獲取包的導(dǎo)出表地址;
[0491]步驟709 JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值;
[0492]具體地,當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)為當(dāng)前項(xiàng)數(shù)據(jù)的第3個字節(jié)和第4個字節(jié)的數(shù)據(jù);
[0493]步驟710 JAVA智能卡將方法的偏移值作為第一參數(shù),根據(jù)第一參數(shù)更新第六指令的指令參數(shù);
[0494]例如,第六指令為0x800x000x37,將第六指令的指令參數(shù)0x000x37更新為方法的偏移值0x0902,則更新后的第六指令為0x8D0x090x02 ;
[0495]本實(shí)施例中,步驟101至步驟110可替換為:
[0496]步驟s2_l JAVA智能卡從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的長度,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度,更新讀取地址和已處理數(shù)據(jù)的長度;
[0497]具體地,讀取地址的初始值為相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0498]步驟s2_2 JAVA智能卡根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-3,否則執(zhí)行步驟s2-6 ;
[0499]步驟s2_3 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0500]步驟s2_4 JAVA智能卡根據(jù)第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;
[0501]具體地,被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0502]步驟s2_5 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0503]步驟s2_6 JAVA智能卡判斷是否已從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟s2-7,否則JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址和已處理數(shù)據(jù)的長度,執(zhí)行步驟s2-7;
[0504]步驟s2_7 JAVA智能卡根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-8,否則返回成功信息,結(jié)束;
[0505]步驟s2_8 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0506]步驟s2_9 JAVA智能卡根據(jù)第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;
[0507]具體地,被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0508]步驟s2_10 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0509]除此之外,步驟101至步驟110可替換為:
[0510]步驟s3_l JAVA智能卡從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的長度,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)更新讀取地址和已處理數(shù)據(jù)的長度;
[0511]具體地,讀取地址的初始值為相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0512]步驟s3_2 JAVA智能卡根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-3,否則執(zhí)行步驟s3-6 ;
[0513]步驟s3_3 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0514]步驟s3_4 JAVA智能卡根據(jù)第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;
[0515]具體地,被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0516]步驟s3_5 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0517]步驟s3_6 JAVA智能卡根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-7,否則返回成功信息,結(jié)束;
[0518]步驟s3_7 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0519]步驟s3_8 JAVA智能卡根據(jù)第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;
[0520]具體地,被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0521]步驟s3_9 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111。
[0522]除此之外,步驟101至步驟110可替換為:
[0523]步驟s4_l JAVA智能卡從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的長度,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度,更新讀取地址和已處理數(shù)據(jù)的長度;
[0524]具體地,讀取地址的初始值為相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0525]步驟s4_2 JAVA智能卡根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-3,否則執(zhí)行步驟s4-6 ;[0526]步驟s4_3 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度、讀取地址和已處理數(shù)據(jù)的長度;
[0527]步驟s4_4 JAVA智能卡根據(jù)第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;
[0528]具體地,被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0529]步驟s4_5 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111 ;
[0530]步驟s4_6 JAVA智能卡根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-7,否則返回成功信息,結(jié)束;
[0531]步驟s4_7 JAVA智能卡根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度和讀取地址;
[0532]步驟s4_8 JAVA智能卡根據(jù)第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;
[0533]具體地,被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0534]步驟s4_9 JAVA智能卡根據(jù)被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟111。
[0535]實(shí)施例3
[0536]本發(fā)明的實(shí)施例3提供一種高效更新JAVA指令的裝置,如圖9所示,該裝置包括:第一獲取模塊301、第二獲取模塊302、第一判斷模塊303、第一處理模塊304、第二處理模塊305、第一更新模塊306和輸出模塊307 ;
[0537]第一獲取模塊301,用于從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值;
[0538]第二獲取模塊302,用于根據(jù)第一獲取模301塊獲取到的常量池組件中的索引值在常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù);
[0539]第一判斷模塊303,用于當(dāng)?shù)诙@取模塊302獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型;
[0540]第一處理模塊304,用于當(dāng)?shù)谝慌袛嗄K303判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)偏移值和JAVA指令對應(yīng)的組件起始地址得到第一參數(shù);
[0541]第二處理模塊305,用于當(dāng)?shù)谝慌袛嗄K303判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為外部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù);
[0542]第一更新模塊306,用于當(dāng)?shù)谝惶幚砟K304得到第一參數(shù)后,根據(jù)第一參數(shù)更新JAVA指令的指令參數(shù);當(dāng)?shù)诙幚砟K305得到第一參數(shù)后,根據(jù)第一參數(shù)更新JAVA指令的指令參數(shù);
[0543]輸出模塊307,用于當(dāng)?shù)诙@取模塊302未獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,返回錯誤信息。
[0544]裝置還包括:第三獲取模塊和第二判斷模塊;[0545]第三獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的修正數(shù)據(jù)的長度作為未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0546]第二判斷模塊,用于根據(jù)第三獲取模塊獲取到的未處理數(shù)據(jù)長度判斷是否存在未處理的修正數(shù)據(jù);
[0547]輸出模塊307,還用于當(dāng)?shù)诙袛嗄K判斷不存在未處理的修正數(shù)據(jù)時,返回成功
信息;
[0548]第一獲取模塊301,具體用于根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的相關(guān)地址組件的修正數(shù)據(jù),更新未處理數(shù)據(jù)長度和讀取地址;
[0549]裝置還包括第三判斷模塊和接收模塊;
[0550]第三判斷模塊,用于在第一更新模塊306更新JAVA指令的指令參數(shù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成;
[0551]輸出模塊307,還用于當(dāng)?shù)谌袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,返回成功信息;
[0552]接收模塊,用于當(dāng)?shù)谌袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元。
[0553]第三獲取模塊包括第一獲取單元和第二獲取單元;
[0554]第一獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0555]第二獲取單元,用于當(dāng)?shù)谒呐袛嗄K判斷未獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;
[0556]第二判斷模塊包括第一判斷單元和第二判斷單元;
[0557]第一判斷單元,用于當(dāng)?shù)谝猾@取單元獲取到第一未處理數(shù)據(jù)長度后,根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0558]第二判斷單元,用于當(dāng)?shù)谒呐袛嗄K判斷已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或第二獲取單元獲取到第二未處理數(shù)據(jù)長度時,根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0559]輸出模塊307,還用于當(dāng)?shù)诙袛鄦卧袛嗖淮嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,返回成功信息;
[0560]第一獲取模塊301包括第三獲取單元、第一更新單元和第四獲取單元;
[0561]第三獲取單元,用于當(dāng)?shù)谝慌袛鄦卧袛啻嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度和讀取地址;
[0562]第一更新單元,用于根據(jù)第三獲取單元獲取到的第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0563]第四獲取單元,用于根據(jù)第一更新單元更新得到的被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0564]裝置包括第四判斷模塊,用于當(dāng)?shù)谝慌袛鄦卧袛嗖淮嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,判斷是否已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;
[0565]第一獲取模塊301包括第五獲取單元、第二更新單元和第六獲取單元;
[0566]第五獲取單元,用于當(dāng)?shù)诙袛鄦卧袛啻嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度和讀取地址;
[0567]第二更新單元,用于根據(jù)第五獲取單元獲取到的第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0568]第六獲取單元,用于根據(jù)第二更新單元更新得到的被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0569]除此之外,第三獲取模塊包括第七獲取單元和第八獲取單元;
[0570]第七獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0571]第八獲取單元,用于當(dāng)?shù)谖迮袛嗄K判斷未獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;
[0572]第二判斷模塊包括第三判斷單元和第四判斷單元;
[0573]第三判斷單元,用于當(dāng)?shù)谄攉@取單元獲取到第一未處理數(shù)據(jù)長度后,根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0574]第四判斷單元,用于當(dāng)?shù)谖迮袛嗄K判斷已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或第八獲取單元獲取到第二未處理數(shù)據(jù)長度時,根據(jù)第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0575]輸出模塊307,還用于當(dāng)?shù)谒呐袛鄦卧袛嗖淮嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,返回成功信息;
[0576]第一獲取模塊301包括第九獲取單元、第三更新單元和第十獲取單元;
[0577]第九獲取單元,用于當(dāng)?shù)谌袛鄦卧袛啻嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度和讀取地址;
[0578]第三更新單元,用于根據(jù)第九獲取單元獲取到的第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;[0579]第十獲取單元,用于根據(jù)第三更新單元更新得到的被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0580]裝置包括第五判斷模塊,用于當(dāng)?shù)谌袛鄦卧袛嗖淮嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,判斷是否已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;
[0581]第一獲取模塊301包括第十一獲取單元、第四更新單元和第十二獲取單元;
[0582]第^^一獲取單元,用于當(dāng)?shù)谒呐袛鄦卧袛啻嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度和讀取地址;
[0583]第四更新單元,用于根據(jù)第十一獲取單元獲取到的第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0584]第十二獲取單元,用于根據(jù)第四更新單元更新得到的被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0585]除此之外,第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0586]第二判斷模塊包括第五判斷單元和第六判斷單元;
[0587]第五判斷單元,用于當(dāng)?shù)谌@取模塊獲取到第一未處理數(shù)據(jù)長度后,根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0588]第六判斷單元,用于當(dāng)?shù)谖迮袛鄦卧袛嗖淮嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,根據(jù)第三獲取模塊獲取到的第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0589]輸出模塊307,還用于當(dāng)?shù)诹袛鄦卧袛嗖淮嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,返回成功信息;
[0590]第一獲取模塊301包括第十三獲取單元、第五更新單元和第十四獲取單元;
[0591]第十三獲取單元,用于當(dāng)?shù)谖迮袛鄦卧袛啻嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度和讀取地址;
[0592]第五更新單元,用于根據(jù)第十三獲取單元獲取到的第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0593]第十四獲取單元,用于根據(jù)第五更新單元更新得到的被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0594]第一獲取模塊301包括第十五獲取單元、第六更新單元和第十六獲取單元;
[0595]第十五獲取單元,用于當(dāng)?shù)诹袛鄦卧袛啻嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度和讀取地址;
[0596] 第六更新單元,用于根據(jù)第十五獲取單元獲取到的第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0597]第十六獲取單元,用于根據(jù)第六更新單元更新得到的被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0598]除此之外,第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0599]第二判斷模塊包括第七判斷單元和第八判斷單元;
[0600]第七判斷單元,用于當(dāng)?shù)谌@取模塊獲取到第一未處理數(shù)據(jù)長度后,根據(jù)第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù);
[0601]第八判斷單元,用于當(dāng)?shù)谄吲袛鄦卧袛嗖淮嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,根據(jù)第三獲取模塊獲取到的第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù);
[0602]輸出模塊307,還用于當(dāng)?shù)诎伺袛鄦卧袛嗖淮嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,返回成功信息;
[0603]第一獲取模塊301包括第十七獲取單元、第七更新單元和第十八獲取單元;
[0604]第十七獲取單元,用于當(dāng)?shù)谄吲袛鄦卧袛啻嬖谖刺幚淼碾p字節(jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第一未處理數(shù)據(jù)長度和讀取地址;
[0605]第七更新單元,用于根據(jù)第十七獲取單元獲取到的第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;被重定位數(shù)據(jù)的第一物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0606]第十八獲取單元,用于根據(jù)第七更新單元更新得到的被重定位數(shù)據(jù)的第一物理地址從JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;
[0607]第一獲取模塊301包括第十九獲取單元、第八更新單元和第二十獲取單元;
[0608]第十九獲取單元,用于當(dāng)?shù)诎伺袛鄦卧袛啻嬖谖刺幚淼膯巫止?jié)修正數(shù)據(jù)時,根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的相關(guān)地址組件中的數(shù)據(jù),更新第二未處理數(shù)據(jù)長度和讀取地址;
[0609]第八更新單元,用于根據(jù)第十九獲取單元獲取到的第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;被重定位數(shù)據(jù)的第二物理地址的初始值為JAVA智能卡存儲的方法組件基地址;
[0610]第二十獲取單元,用于根據(jù)第八更新單元更新得到的被重定位數(shù)據(jù)的第二物理地址從JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
[0611]裝置包括第四獲取模塊、第六判斷模塊、第七判斷模塊和接收模塊;
[0612]第四獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的長度數(shù)據(jù)的長度更新讀取地址;讀取地址的初始值為相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址;
[0613]第一獲取模塊301,具體用于根據(jù)讀取地址從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的相關(guān)地址組件的修正數(shù)據(jù),更新未處理數(shù)據(jù)長度和讀取地址;
[0614]第六判斷模塊,用于在第一更新模塊306更新JAVA指令的指令參數(shù)后,判斷是否處理完相關(guān)地址組件中的所有數(shù)據(jù);
[0615]輸出模塊307,還用于當(dāng)?shù)诹袛嗄K判斷已處理完相關(guān)地址組件中的所有數(shù)據(jù)后,返回成功信息;
[0616]第七判斷模塊,用于當(dāng)?shù)诹袛嗄K判斷未處理完相關(guān)地址組件中的所有數(shù)據(jù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成;
[0617]輸出模塊307,還用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,返回成功信息;
[0618]接收模塊,用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元。
[0619]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第一指令,第一判斷模塊303,具體用于判斷第一指令的引用類型;
[0620]第一處理模塊304,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第一指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)第一偏移值和JAVA智能卡存儲的類信息 組件起始地址得到類信息物理地址,根據(jù)類信息物理地址和EEPROM基地址得到類信息的偏移值;
[0621]第二處理模塊305包括第二十一獲取單元、第九判斷單元、第九更新單元和第二十二獲取單元;
[0622]第二十一獲取單元,用于當(dāng)?shù)谝慌袛嗄K303判斷第一指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ;
[0623]第九判斷單元,用于判斷第二十一獲取單元獲取到的包ID是否小于第一預(yù)設(shè)值;
[0624]第九更新單元,用于當(dāng)?shù)诰排袛鄦卧袛喟麵D小于第一預(yù)設(shè)值時,更新第一指令的指令碼;
[0625]第二十二獲取單元,用于當(dāng)?shù)诰排袛鄦卧袛喟麵D不小于第一預(yù)設(shè)值或第九更新單元更新第一指令的指令碼后,根據(jù)包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值;
[0626]第一更新模塊306,具體用于當(dāng)?shù)谝惶幚砟K304得到偏移值后,將類信息的偏移值作為第一參數(shù),根據(jù)第一參數(shù)更新第一指令的指令參數(shù);當(dāng)?shù)诙@取單元獲取到偏移值后,將類信息的偏移值作為第一參數(shù),根據(jù)第一參數(shù)更新第一指令的指令參數(shù)。
[0627]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第二指令,第一判斷模塊303,具體用于判斷第二指令的引用類型;
[0628]第一處理模塊304,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第二指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)類信息物理地址和EEPROM基地址得到類信息的偏移值;
[0629]第二處理模塊305包括第二十三獲取單元、第十判斷單元、第一處理單元和第二處理單元;[0630]第二十三獲取單元,用于當(dāng)?shù)谝慌袛嗄K303判斷第二指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)包ID獲取包的導(dǎo)出表地址;
[0631]第十判斷單元,用于判斷第二十三獲取單元獲取到的包ID是否小于第一預(yù)設(shè)值;
[0632]第一處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址;
[0633]第二處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0634]第一更新模塊306包括第二十四獲取單元、第十一判斷單元、第三處理單元、第四處理單元、第五處理單元和第十更新單元;
[0635]第二十四獲取單元,用于當(dāng)?shù)谝惶幚砟K304得到類信息物理地址,或第一處理單元得到類信息物理地址,或第二處理單元得到類信息物理地址后,根據(jù)類信息物理地址,在JAVA智能卡存儲區(qū)獲取當(dāng)前類信息;[0636]第十一判斷單元,用于判斷第二十四獲取單元獲取到的當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值;
[0637]第三處理單元,用于當(dāng)?shù)谑慌袛鄦卧袛喈?dāng)前類信息的第一部分的數(shù)據(jù)為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址;
[0638]第四處理單元,用于當(dāng)?shù)谑慌袛鄦卧袛喈?dāng)前類信息的第一部分的數(shù)據(jù)不為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址;
[0639]第五處理單元,用于當(dāng)?shù)谌幚韱卧虻谒奶幚韱卧玫疆?dāng)前類信息的父類的類信息的物理地址后,根據(jù)當(dāng)前類信息的父類的類信息的物理地址,在JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值;
[0640]第十更新單元,用于當(dāng)?shù)谖逄幚韱卧玫剿饕岛?,將索引值作為第一參?shù),根據(jù)第一參數(shù)更新第二指令的指令參數(shù)。
[0641]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第三指令,第一判斷模塊303,具體用于判斷第三指令的引用類型;
[0642]第一處理模塊304,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第三指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址;
[0643]第二處理模塊305包括第二十五獲取單元、第十二判斷單元、第六處理單元和第七處理單元;
[0644]第二十五獲取單元,用于當(dāng)?shù)谝慌袛嗄K303判斷第三指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)包ID獲取包的導(dǎo)出表地址;[0645]第十二判斷單元,用于判斷第二十五獲取單元獲取到的包ID是否小于第一預(yù)設(shè)值;
[0646]第六處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址;
[0647]第七處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0648]第一更新模塊306,具體用于當(dāng)?shù)谝惶幚砟K303得到類信息物理地址,或第六處理單元獲取到類信息物理地址,或第七處理單元獲取類信息物理地址后,根據(jù)類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址,根據(jù)被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù),根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)得到第一參數(shù),根據(jù)第一參數(shù)更新第三指令的指令參數(shù)。
[0649]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第四指令,第一判斷模塊303,具體用于判斷第四指令的引用類型;
[0650]第一處理模塊3004,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第四指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)第一偏移值和JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址;
[0651]第二處理模塊305包括第二十六獲取單元、第十三判斷單元、第八處理單元和第九處理單元;
[0652]第二十六獲取單元,用于當(dāng)?shù)谝慌袛嗄K303判斷第四指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)包ID獲取包的導(dǎo)出表地址;
[0653]第十三判斷單元,用于判斷第二十六獲取單元獲取到的包ID是否小于第一預(yù)設(shè)值;
[0654]第八處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和ROM基地址得到類信息物理地址,并更新第四指令的指令碼;
[0655]第九處理單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)類信息的偏移值和EEPROM基地址得到類信息物理地址;
[0656]第一更新模塊306,具體用于當(dāng)?shù)谝惶幚砟K303得到類信息物理地址,或第八處理單元獲取到類信息物理地址,或第九處理單元獲取到類信息物理地址后,根據(jù)類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址,將被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)第一參數(shù)更新第四指令的指令參數(shù)。
[0657]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第五指令,第一判斷模塊303,具體用于判斷第五指令的引用類型;
[0658]第一處理模塊304,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第五指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)第二偏移值和JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址,根據(jù)靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址;
[0659]第二處理模塊305,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第五指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址;
[0660]第一更新模塊306,具體用于當(dāng)?shù)谝惶幚砟K304得到被訪問靜態(tài)域的偏移地址,或第二處理模塊305得到被訪問靜態(tài)域的偏移地址后,將被訪問靜態(tài)域的偏移地址作為第一參數(shù),根據(jù)第一參數(shù)更新第五指令的指令參數(shù)。
[0661]若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第六指令,第一判斷模塊303,具體用于判斷第六指令的引用類型;
[0662]第一處理模塊304,具體用于當(dāng)?shù)谝慌袛嗄K303判斷第六指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)第二偏移值和JAVA智能卡存儲的方法組件起始地址得到方法物理地址,根據(jù)方法物理地址和EEPROM基地址得到方法的偏移值;
[0663]第二處理模塊305包括第二十七獲取單元、第十四判斷單元、第十一更新單元和第二十八獲取單元;
[0664]第二十七獲取單元,用于當(dāng)?shù)谝慌袛嗄K303判斷第六指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ;
[0665]第十四判斷單元,用于判斷第二十七獲取單元獲取到的包ID是否小于第一預(yù)設(shè)值;
[0666]第十一更新單元,用于當(dāng)?shù)谑呐袛鄦卧袛喟麵D小于第一預(yù)設(shè)值時,更新第六指令的指令碼;
[0667]第二十八獲取單元,用于當(dāng)?shù)谑袛鄦卧袛喟麵D不小于第一預(yù)設(shè)值,或第十一更新單元更新第六指令的指令碼后,根據(jù)包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值;
[0668]第一更新模塊306,具體用于當(dāng)?shù)谝惶幚砟K304得到方法的偏移值,或第二十八獲取單元獲取到方法的偏移值后,將方法的偏移值作為第一參數(shù),根據(jù)第一參數(shù)更新第六指令的指令參數(shù)。
[0669]以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種高效更新JAVA指令的方法,其特征在于,所述方法包括: 步驟SI JAVA智能卡從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值; 步驟S2:所述JAVA智能卡根據(jù)獲取到的所述常量池組件中的索引值在所述常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù),是則執(zhí)行步驟S3,否則返回錯誤信息,結(jié)束; 步驟S3:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟S4,若是外部引用則執(zhí)行步驟S5 ; 步驟S4:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)所述偏移值和所述JAVA指令對應(yīng)的組件起始地址得到第一參數(shù),執(zhí)行步驟S6 ; 步驟S5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和所述包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù),執(zhí)行步驟S6 ; 步驟S6:所述JAVA智能卡根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù),結(jié)束。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟SI之前包括: 步驟SO-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 步驟S0-2:所述JAVA智能卡根據(jù)所述未處理數(shù)據(jù)長度判斷是否存在未處理的修正數(shù)據(jù),是則執(zhí)行步驟SI,否則返回成功信息,結(jié)束; 所述步驟SI具體為:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址; 所述步驟S6之后包括: 步驟S7:所述JAVA智能卡判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成,是則返回成功信息,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元,返回步驟S0-2,否則返回步驟S0-2。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度按鍵; 所述步驟SO-1至步驟SI具體為: 步驟Sl-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 步驟sl-2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟sl-3,否則執(zhí)行步驟sl-6 ; 步驟sl-3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 步驟sl-4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟sl-5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ; 步驟sl-6:所述JAVA智能卡判斷是否已獲取雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟sl-7,否則所述JAVA智能卡根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址,執(zhí)行步驟sl-7 ; 步驟sl-7:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟sl-8,否則返回成功信息,結(jié)束; 步驟sl-8:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 步驟sl-9:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟sl-ΙΟ:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度時間包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù); 所述步驟SO-1至步驟SI具體為: 步驟s2-l:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 步驟s2-2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-3,否則執(zhí)行步驟s2-6 ; 步驟s2-3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 步驟s2-4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟s2-5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ; 步驟s2-6:所述JAVA智能卡判斷是否已獲取單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,是則執(zhí)行步驟s2-7,否則所述JAVA智能卡根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址,執(zhí)行步驟s2-7 ; 步驟s2-7:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s2-8,否則返回成功信息,結(jié)束; 步驟s2-8:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 步驟s2-9:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟S2-10:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù); 所述步驟SO-1至步驟SI具體為: 步驟S3-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 步驟s3-2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-3,否則執(zhí)行步驟s3-6 ; 步驟s3-3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 步驟s3-4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟s3-5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ; 步驟s3-6:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s3-7,否則返回成功信息,結(jié)束; 步驟s3-7:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 步驟s3-8:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟s3-9:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述相關(guān)地址組件中的所述修正數(shù)據(jù)的長度數(shù)據(jù)包括單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)和雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù); 所述步驟SO-1至步驟SI具體為: 步驟S4-1:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 步驟s4-2:所述JAVA智能卡根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-3,否則執(zhí)行步驟s4-6 ; 步驟s4-3:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 步驟s4-4:所述JAVA智能卡根據(jù)所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟s4-5:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S4 ; 步驟s4-6:所述JAVA智能卡根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù),是則執(zhí)行步驟s4-7,否則返回成功信息,結(jié)束; 步驟s4-7:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù);根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 步驟s4-8:所述JAVA智能卡根據(jù)所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 步驟s4-9:所述JAVA智能卡根據(jù)所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值,執(zhí)行步驟S2。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟SI之前包括: 步驟S0-1’:所述JAVA智能卡根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址,執(zhí)行步驟SI ; 所述步驟SI具體為:所述JAVA智能卡根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址; 所述步驟S6之后包括:步驟S8: 所述JAVA智能卡判斷是否處理完所述相關(guān)地址組件中的所有數(shù)據(jù),是則返回成功信息,結(jié)束,否則執(zhí)行步驟S9 ; 步驟S9:所述JAVA智能卡判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成,是則返回成功信息,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元,返回步驟SI,否則返回步驟SI。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第一指令,所述步驟S3至步驟S6具體為: 步驟Al:所述JAVA智能卡判斷所述第一指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟A2,若是外部引用則執(zhí)行步驟A3 ; 步驟A2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值,執(zhí)行步驟A7 ; 步驟A3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ; 步驟A4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟A5,否則執(zhí)行步驟A6 ; 步驟A5:所述JAVA智能卡更新所述第一指令的指令碼,執(zhí)行步驟A6 ; 步驟A6:所述JAVA智能卡根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,執(zhí)行步驟A7 ; 步驟A7:所述JAVA智能卡將所述類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù)。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第二指令,所述步驟S3至步驟S6具體為: 步驟B1:所述JAVA智能卡判斷所述第二指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟B2,若是外部引用則執(zhí)行步驟B3 ; 步驟B2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟B7 ; 步驟B3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 步驟B4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟B5,否則執(zhí)行步驟B6 ; 步驟B5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟B7 ; 步驟B6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟B7 ;步驟B7:所述JAVA智能卡根據(jù)所述類信息物理地址,在所述JAVA智能卡存儲區(qū)獲取當(dāng)前類信息; 步驟B8:所述JAVA智能卡判斷當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值,是則執(zhí)行步驟B9,否則執(zhí)行步驟BlO ; 步驟B9:所述JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟Bll ; 步驟BlO:所述JAVA智能卡根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址,執(zhí)行步驟Bll ; 步驟Bll:所述JAVA智能卡根據(jù)所述當(dāng)前類信息的父類的類信息的物理地址,在所述JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值; 步驟B12:所述JAVA智能卡將所述索引值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第二指令的指令參數(shù)。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第三指令,所述步驟S3至步驟S6具體為: 步驟Cl:所述JAVA智能卡判斷所述第三指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟C2,若是外部引用則執(zhí)行步驟C3 ; 步驟C2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟C7 ; 步驟C3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 步驟C4:所述JAVA所述智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟C5,否則執(zhí)行步驟C6 ; 步驟C5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,執(zhí)行步驟C7 ; 步驟C6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟C7 ; 步驟C7 JAVA智能卡根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址,根據(jù)所述被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù),根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到第一參數(shù),根據(jù)所述第一參數(shù)更新所述第三指令的指令參數(shù)。
11.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第四指令,所述步驟S3至步驟S6具體為: 步驟Dl:所述JAVA智能卡判斷所述第四指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟D2,若是外部引用則執(zhí)行步驟D3 ; 步驟D2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,執(zhí)行步驟D7 ; 步驟D3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 步驟D4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟D5,否則執(zhí)行步驟D6 ; 步驟D5:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,并更新第四指令的指令碼,執(zhí)行步驟D7 ; 步驟D6:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址,執(zhí)行步驟D7 ; 步驟D7:所述JAVA智能卡根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址,將所述被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第四指令的指令參數(shù)。
12.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第五指令,所述步驟S3至步驟S6具體為: 步驟El:所述JAVA智能卡判斷所述第五指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟E2,若是外部引用則執(zhí)行步驟E3 ; 步驟E2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址,根據(jù)所述靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址,執(zhí)行步驟E4 ; 步驟E3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址,執(zhí)行步驟E4; 步驟E4:所述JAVA智能卡將所述被訪問靜態(tài)域的偏移地址作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第五指令的指令參數(shù)。
13.根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第六指令,所述步驟S3至步驟S6具體為: 步驟Fl:所述JAVA智能卡判斷所述第六指令的引用類型,若是內(nèi)部引用則執(zhí)行步驟F2,若是外部引用則執(zhí)行步驟F3 ; 步驟F2:所述JAVA智能卡根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的方法組件起始地址得到方法物理地址,根據(jù)所述方法物理地址和EEPROM基地址得到方法的偏移值,執(zhí)行步驟F7 ; 步驟F3:所述JAVA智能卡獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ; 步驟F4:所述JAVA智能卡判斷所述包ID是否小于第一預(yù)設(shè)值,是則執(zhí)行步驟F5,否則執(zhí)行步驟F6 ; 步驟F5:所述JAVA智能卡更新第六指令的指令碼,執(zhí)行步驟F6 ;步驟F6:所述JAVA智能卡根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值; 步驟F7:所述JAVA智能卡將所述方法的偏移值作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第六指令的指令參數(shù)。
14.一種高效更新JAVA指令的裝置,其特征在于,所述裝置包括:第一獲取模塊、第二獲取模塊、第一判斷模塊、第一處理模塊、第二處理模塊、第一更新模塊和輸出模塊; 所述第一獲取模塊,用于從應(yīng)用協(xié)議數(shù)據(jù)單元中獲取相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值; 所述第二獲取模塊,用于根據(jù)所述第一獲取模塊獲取到的所述常量池組件中的索引值在所述常量池組件中獲取當(dāng)前項(xiàng)數(shù)據(jù),判斷是否獲取到當(dāng)前項(xiàng)數(shù)據(jù); 所述第一判斷模塊,用于當(dāng)所述第二獲取模塊獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第I個字節(jié)判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型; 所述第一處理模塊,用于當(dāng)所述第一判斷模塊判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一預(yù)設(shè)部分得到偏移值,根據(jù)所述偏移值和所述JAVA指令對應(yīng)的組件起始地址得到第一參數(shù); 所述第二處理模塊,用于當(dāng)所述第一判斷模塊判斷當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令的引用類型為外部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第二預(yù)設(shè)部分得到包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)和所述包的導(dǎo)出表地址在包的導(dǎo)出表中獲取第一參數(shù); 所述第一更新模塊,用于當(dāng)所述第一處理模塊得到第一參數(shù)后,根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù);當(dāng)所述第二處理模塊得到第一參數(shù)后,根據(jù)所述第一參數(shù)更新所述JAVA指令的指令參數(shù); 所述輸出模塊,用于當(dāng)所述第二獲取模塊未獲取到當(dāng)前項(xiàng)數(shù)據(jù)時,返回錯誤信息。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述裝置還包括:第三獲取模塊和第二判斷模塊; 所述第三獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第二判斷模塊,用于根據(jù)所述第三獲取模塊獲取到的所述未處理數(shù)據(jù)長度判斷是否存在未處理的修正數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第二判斷模塊判斷不存在未處理的修正數(shù)據(jù)時,返回成功信息; 所述第一獲取模塊, 具體用于根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址; 所述裝置還包括第三判斷模塊和接收模塊; 所述第三判斷模塊,用于在所述第一更新模塊更新所述JAVA指令的指令參數(shù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成;所述輸出模塊,還用于當(dāng)所述第三判斷模塊判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,返回成功信息; 所述接收模塊,用于當(dāng)所述第三判斷模塊判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成時,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述第三獲取模塊包括第一獲取單元和第二獲取單元; 所述第一獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第二獲取單元,用于當(dāng)?shù)谒呐袛嗄K判斷未獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址; 所述第二判斷模塊包括第一判斷單元和第二判斷單元; 所述第一判斷單元,用于當(dāng)所述第一獲取單元獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù); 所述第二判斷單元,用于當(dāng)所述第四判斷模塊判斷已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或所述第二獲取單元獲取到所述第二未處理數(shù)據(jù)長度時,根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第二判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,返回成功信息; 所述第一獲取模塊包括第三獲取單元、第一更新單元和第四獲取單元; 所述第三獲取單元,用于當(dāng)所述第一判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 所述第一更新單元,用于根據(jù)所述第三獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;所述第四獲取單元,用于根據(jù)所述第一更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;所述裝置包括所述第四判斷模塊,用于當(dāng)所述第一判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,判斷是否已獲取到雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;所述第一獲取模塊包括第五獲取單元、第二更新單元和第六獲取單元; 所述第五獲取單元,用于當(dāng)所述第二判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 所述第二更新單元,用于根據(jù)所述第五獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 所述第六獲取單元,用于根據(jù)所述第二更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
17.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述第三獲取模塊包括第七獲取單元和第八獲取單元; 所述第七獲取單元,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第八獲取單元,用于當(dāng)?shù)谖迮袛嗄K判斷未獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度時,根據(jù)所述讀取地址從所述接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址; 所述第二判斷模塊包括第三判斷單元和第四判斷單元; 所述第三判斷單元,用于當(dāng)所述第七獲取單元獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù); 所述第四判斷單元,用于當(dāng)所述第五判斷模塊判斷已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度或所述第八獲取單元獲取到所述第二未處理數(shù)據(jù)長度時,根據(jù)所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第四判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,返回成功信息; 所述第一獲取模塊包括第九獲取單元、第三更新單元和第十獲取單元; 所述第九獲取單元,用于當(dāng)所述第三判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 所述第三更新單元,用于根據(jù)所述第九獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;所述第十獲取單元,用于根據(jù)所述第三更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值;所述裝置包括所述第五判斷模塊,用于當(dāng)所述第三判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,判斷是否已獲取到單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度;所述第一獲取模塊包括第十一獲取單元、第四更新單元和第十二獲取單元; 所述第十一獲取單元,用于當(dāng)所述第四判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 所述第四更新單元,用于根據(jù)所述第十一獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 所述第十二獲取單元,用于根據(jù)所述第四更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
18.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第二判斷模塊包括第五判斷單元和第六判斷單元; 所述第五判斷單元,用于當(dāng)所述第三獲取模塊獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù); 所述第六判斷單元,用于當(dāng)所述第五判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述第三獲取模塊獲取到的所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第六判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,返回成功信息; 所述第一獲取模塊包括第十三獲取單元、第五更新單元和第十四獲取單元; 所述第十三獲取單元,用于當(dāng)所述第五判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 所述第五更新單元,用于根據(jù)所述第十三獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 所述第十四獲取單元,用于根據(jù)所述第五更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值; 所述第一獲取模塊包括第十五獲取單元、第六更新單元和第十六獲取單元; 所述第十五獲取單元,用于當(dāng)所述第六判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 所述第六更新單元,用于根據(jù)所述第十五獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址;所述第十六獲取單元,用于根據(jù)所述第六更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
19.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述第三獲取模塊具體用于,根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第一未處理數(shù)據(jù)長度,獲取所述相關(guān)地址組件中的單字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)作為第二未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的雙字節(jié)修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第二判斷模塊包括第七判斷單元和第八判斷單元; 所述第七判斷單元,用于當(dāng)所述第三獲取模塊獲取到所述第一未處理數(shù)據(jù)長度后,根據(jù)所述第一未處理數(shù)據(jù)長度判斷是否存在未處理的雙字節(jié)修正數(shù)據(jù); 所述第八判斷單元,用于當(dāng)所述第七判斷單元判斷不存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述第三獲取模塊獲取到的所述第二未處理數(shù)據(jù)長度判斷是否存在未處理的單字節(jié)修正數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第八判斷單元判斷不存在未處理的單字節(jié)修正數(shù)據(jù)時,返回成功信息; 所述第一獲取模塊包括第十七獲取單元、第七更新單元和第十八獲取單元; 所述第十七獲取單元,用于當(dāng)所述第七判斷單元判斷存在未處理的雙字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第一修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第一未處理數(shù)據(jù)長度和所述讀取地址; 所述第七更新單元,用于根據(jù)所述第十七獲取單元獲取到的所述第一修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第一物理地址;所述被重定位數(shù)據(jù)的第一物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 所述第十八獲取單元,用于根據(jù)所述第七更新單元更新得到的所述被重定位數(shù)據(jù)的第一物理地址從所述JAVA智能卡存儲區(qū)中獲取2個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值; 所述第一獲取模塊包括第十九獲取單元、第八更新單元和第二十獲取單元; 所述第十九獲取單元,用于當(dāng)所述第八判斷單元判斷存在未處理的單字節(jié)修正數(shù)據(jù)時,根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的I個字節(jié)的數(shù)據(jù)作為第二修正數(shù)據(jù),根據(jù)讀取到的所述相關(guān)地址組件中的數(shù)據(jù),更新所述第二未處理數(shù)據(jù)長度和所述讀取地址; 所述第八更新單元,用于根據(jù)所述第十九獲取單元獲取到的所述第二修正數(shù)據(jù)更新被重定位數(shù)據(jù)的第二物理地址;所述被重定位數(shù)據(jù)的第二物理地址的初始值為所述JAVA智能卡存儲的方法組件基地址; 所述第二十獲取單元,用于根據(jù)所述第八更新單元更新得到的所述被重定位數(shù)據(jù)的第二物理地址從所述JAVA智能卡存儲區(qū)中獲取I個字節(jié)的數(shù)據(jù)作為常量池組件中的索引值。
20.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述裝置包括第四獲取模塊、第六判斷模塊、第七判斷模塊和接收模塊; 所述第四獲取模塊,用于根據(jù)讀取地址從接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)作為未處理數(shù)據(jù)長度,根據(jù)獲取到的所述長度數(shù)據(jù)的長度更新所述讀取地址;所述讀取地址的初始值為所述相關(guān)地址組件中的修正數(shù)據(jù)的長度數(shù)據(jù)的首地址; 所述第一獲取模塊,具體用于根據(jù)所述讀取地址從所述應(yīng)用協(xié)議數(shù)據(jù)單元中獲取所述相關(guān)地址組件的修正數(shù)據(jù),根據(jù)所述修正數(shù)據(jù)從JAVA智能卡存儲區(qū)中獲取常量池組件中的索引值,根據(jù)讀取到的所述相關(guān)地址組件的修正數(shù)據(jù),更新所述未處理數(shù)據(jù)長度和所述讀取地址; 所述第六判斷模塊,用于在所述第一更新模塊更新所述JAVA指令的指令參數(shù)后,判斷是否處理完所述相關(guān)地址組件中的所有數(shù)據(jù); 所述輸出模塊,還用于當(dāng)所述第六判斷模塊判斷已處理完所述相關(guān)地址組件中的所有數(shù)據(jù)后,返回成功信息; 所述第七判斷模塊,用于當(dāng)所述第六判斷模塊判斷未處理完所述相關(guān)地址組件中的所有數(shù)據(jù)后,判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的所述相關(guān)地址組件的數(shù)據(jù)是否已經(jīng)處理完成; 所述輸出模塊,還用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,返回成功信息; 所述接收模塊,用于當(dāng)?shù)谄吲袛嗄K判斷本次接收到的應(yīng)用協(xié)議數(shù)據(jù)單元中的數(shù)據(jù)已經(jīng)處理完成后,等待并接收下一個包含所述相關(guān)地址組件的數(shù)據(jù)的應(yīng)用協(xié)議數(shù)據(jù)單元。
21.根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第一指令,所述第一判斷模塊,具體用于判斷所述第一指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第一指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值; 所述第二處理模塊包括第二十一獲取單元、第九判斷單元、第九更新單元和第二十二獲取單元; 所述第二十一獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第一指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID ; 所述第九判斷單元,用于判斷所述第二十一獲取單元獲取到的所述包ID是否小于第一預(yù)設(shè)值; 所述第九更新單元,用于當(dāng)所述第九判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,更新第一指令的指令碼; 所述第二十二獲取單元,用于當(dāng)所述第九判斷單元判斷所述包ID不小于第一預(yù)設(shè)值或所述第九更新單元更新第一指令的指令碼后,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值;所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述偏移值后,將類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù);當(dāng)所述第二十二獲取單元獲取到所述偏移值后,將類信息的偏移值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第一指令的指令參數(shù)。
22. 根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第二指令,所述第一判斷模塊,具體用于判斷所述第二指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第二指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址,根據(jù)所述類信息物理地址和EEPROM基地址得到類信息的偏移值; 所述第二處理模塊包括第二十三獲取單元、第十判斷單元、第一處理單元和第二處理單元; 所述第二十三獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第二指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 所述第十判斷單元,用于判斷所述第二十三獲取單元獲取到的所述包ID是否小于第一預(yù)設(shè)值; 所述第一處理單元,用于當(dāng)所述第十判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址; 所述第二處理單元,用于當(dāng)所述第十判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址; 所述第一更新模塊包括第二十四獲取單元、第十一判斷單元、第三處理單元、第四處理單元、第五處理單元和第十更新單元; 所述第二十四獲取單元,用于當(dāng)所述第一處理模塊得到類信息物理地址,或所述第一處理單元得到類信息物理地址,或所述第二處理單元得到類信息物理地址后,根據(jù)所述類信息物理地址,在JAVA智能卡存儲區(qū)獲取當(dāng)前類信息; 所述第十一判斷單元,用于判斷所述第二十四獲取單元獲取到的當(dāng)前類信息的第一部分的數(shù)據(jù)是否為第二預(yù)設(shè)值; 所述第三處理單元,用于當(dāng)所述第十一判斷單元判斷當(dāng)前類信息的第一部分的數(shù)據(jù)為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與ROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址; 所述第四處理單元,用于當(dāng)所述第十一判斷單元判斷當(dāng)前類信息的第一部分的數(shù)據(jù)不為第二預(yù)設(shè)值時,根據(jù)當(dāng)前類信息的第二部分的數(shù)據(jù)與EEPROM基地址,得到當(dāng)前類信息的父類的類信息的物理地址; 所述第五處理單元,用于當(dāng)所述第三處理單元或所述第四處理單元得到當(dāng)前類信息的父類的類信息的物理地址后,根據(jù)當(dāng)前類信息的父類的類信息的物理地址,在所述JAVA智能卡存儲區(qū)中獲取當(dāng)前類信息的父類的類信息的第一部分的數(shù)據(jù),根據(jù)獲取到的數(shù)據(jù)和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到索引值; 所述第十更新單元,用于當(dāng)所述第五處理單元得到所述索引值后,將所述索引值作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第二指令的指令參數(shù)。
23.根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第三指令,所述第一判斷模塊,具體用于判斷所述第三指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第三指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址; 所述第二處理模塊包括第二十五獲取單元、第十二判斷單元、第六處理單元和第七處理單元; 所述第二十五獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第三指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 所述第十二判斷單元,用于判斷所述第二十五獲取單元獲取到的所述包ID是否小于第一預(yù)設(shè)值; 所述第六處理單元,用于當(dāng)所述第十二判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址; 所述第七處理單元,用于當(dāng)所述第十二判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址; 所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述類信息物理地址,或所述第六處理單元獲取到所述類信息物理地址,或所述第七處理單元獲取到所述類信息物理地址后,根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的物理地址,根據(jù)所述被調(diào)用方法的物理地址在JAVA智能卡存儲區(qū)中獲取被調(diào)用方法的參數(shù)個數(shù),根據(jù)被調(diào)用方法的參數(shù)個數(shù)和當(dāng)前項(xiàng)數(shù)據(jù)的第4個字節(jié)的數(shù)據(jù)得到第一參數(shù),根據(jù)所述第一參數(shù)更新所述第三指令的指令參數(shù)。
24.根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第四指令,所述第一判斷模塊,具體用于判斷所述第四指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第四指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)得到第一偏移值,根據(jù)所述第一偏移值和所述JAVA智能卡存儲的類信息組件起始地址得到類信息物理地址; 所述第二處理模塊包括第二十六獲取單元、第十三判斷單元、第八處理單元和第九處理單元; 所述第二十六獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第四指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址; 所述第十三判斷單元,用于判斷所述第二十六獲取單元獲取到的所述包ID是否小于第一預(yù)設(shè)值; 所述第八處理單元,用于當(dāng)所述第十三判斷單元判斷所述包ID小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和ROM基地址得到類信息物理地址,并更新第四指令的指令碼;所述第九處理單元,用于當(dāng)所述第十三判斷單元判斷所述包ID不小于第一預(yù)設(shè)值時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第三部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取類信息的偏移值,根據(jù)所述類信息的偏移值和EEPROM基地址得到類信息物理地址; 所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述類信息物理地址,或所述第八處理單元獲取到所述類信息物理地址,或所述第九處理單元獲取到所述類信息物理地址后,根據(jù)所述類信息物理地址和當(dāng)前項(xiàng)數(shù)據(jù)的第四部分的數(shù)據(jù)得到被調(diào)用方法的偏移地址,將所述被調(diào)用方法的偏移地址作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第四指令的指令參數(shù)。
25.根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第五指令,所述第一判斷模塊,具體用于判斷所述第五指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第五指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的靜態(tài)域組件起始地址得到靜態(tài)域物理地址,根據(jù)所述靜態(tài)域物理地址和EEPROM基地址得到被訪問靜態(tài)域的偏移地址; 所述第二處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第五指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被引用類信息所屬的包的包ID,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第一部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在導(dǎo)出表中獲取被訪問靜態(tài)域的偏移地址; 所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述被訪問靜態(tài)域的偏移地址,或所述第二處理模塊得到所述被訪問靜態(tài)域的偏移地址后,將所述被訪問靜態(tài)域的偏移地址作為所述第一參數(shù),根據(jù)所述第一參數(shù)更新所述第五指令的指令參數(shù)。
26.根據(jù)權(quán)利要求14所述的裝置,其特征在于,若當(dāng)前項(xiàng)數(shù)據(jù)對應(yīng)的JAVA指令為第六指令,所述第一判斷模塊,具體用于判斷所述第六指令的引用類型; 所述第一處理模塊,具體用于當(dāng)所述第一判斷模塊判斷所述第六指令的引用類型為內(nèi)部引用時,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)得到第二偏移值,根據(jù)所述第二偏移值和所述JAVA智能卡存儲的方法組件起始地址得到方法物理地址,根據(jù)所述方法物理地址和EEPROM基地址得到方法的偏移值; 所述第二處理模塊包括第二十七獲取單元、第十四判斷單元、第十一更新單元和第二十八獲取單元; 所述第二十七獲取單元,用于當(dāng)所述第一判斷模塊判斷所述第六指令的引用類型為外部引用時,獲取當(dāng)前項(xiàng)數(shù)據(jù)的第二部分的數(shù)據(jù)作為被調(diào)用方法所屬的包的包ID ; 所述第十四判斷單元, 用于判斷所述第二十七獲取單元獲取到的所述包ID是否小于第一預(yù)設(shè)值; 所述第十一更新單元,用于當(dāng)所述第十四判斷單元判斷所述包ID小于所述第一預(yù)設(shè)值時,更新所述第六指令的指令碼; 所述第二十八獲取單元,用于當(dāng)所述第十三判斷單元判斷所述包ID不小于所述第一預(yù)設(shè)值,或所述第十一更新單元更新第六指令的指令碼后,根據(jù)所述包ID獲取包的導(dǎo)出表地址,根據(jù)當(dāng)前項(xiàng)數(shù)據(jù)的第五部分的數(shù)據(jù)和所述包的導(dǎo)出表地址,在包的導(dǎo)出表中獲取方法的偏移值;所述第一更新模塊,具體用于當(dāng)所述第一處理模塊得到所述方法的偏移值,或所述第二十八獲取單元獲取到所述方法的偏移值后,將所述方法的偏移值作為第一參數(shù),根據(jù)所述第一參數(shù)更新所述第 六指令的指令參數(shù)。
【文檔編號】G06F9/445GK103914326SQ201410160741
【公開日】2014年7月9日 申請日期:2014年4月21日 優(yōu)先權(quán)日:2014年4月21日
【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
宁乡县| 南城县| 双鸭山市| 岫岩| 交口县| 阿尔山市| 武邑县| 遂川县| 禹城市| 洮南市| 贺州市| 广河县| 静海县| 怀仁县| 平遥县| 剑河县| 吴桥县| 宁蒗| 临桂县| 秦安县| 花莲县| 澄城县| 西畴县| 鄂州市| 沿河| 丁青县| 麻栗坡县| 金门县| 华容县| 容城县| 深圳市| 陵水| 城口县| 旬邑县| 乳源| 蛟河市| 三河市| 庄浪县| 梁山县| 屯门区| 长沙市|