一種Java卡的Java代碼補(bǔ)丁方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及Java智能卡領(lǐng)域,具體涉及一種Java卡的Java代碼補(bǔ)丁方法。
【背景技術(shù)】
[0002] 隨著金融電子化的全面發(fā)展,為解決用戶(hù)對(duì)一卡多用的需要,支持多應(yīng)用的Java 卡得到了越來(lái)越多的普及應(yīng)用。Java卡作為一種智能卡,其存儲(chǔ)體系主要由讀寫(xiě)存儲(chǔ)器 (RAM)、只讀存儲(chǔ)器(ROM)和可擦寫(xiě)編程存儲(chǔ)器(EEPROM)組成,其中RAM用于存放運(yùn)算過(guò)程 中的中間數(shù)據(jù)和結(jié)果數(shù)據(jù),ROM用于存放智能卡的操作系統(tǒng),EEPROM是智能卡的主要存儲(chǔ) 器,用于存放卡人的個(gè)人信息及發(fā)行單位的信息和應(yīng)用數(shù)據(jù)。
[0003] 然而,隨著用戶(hù)需求的變更、業(yè)務(wù)的多樣化變化,Java卡產(chǎn)品在投放使用后,很可 能出現(xiàn)缺陷或者對(duì)功能提出升級(jí)的要求,若固化到Java卡ROM或者EEPROM中的Java代碼 無(wú)法升級(jí)維護(hù),則需要用戶(hù)更換Java卡,影響用戶(hù)的生活,若在進(jìn)行打補(bǔ)丁升級(jí)時(shí),使用的 Java卡的空間較大,在處理一些對(duì)時(shí)間敏感的應(yīng)用(如快捷支付)時(shí),不能保證Java卡的運(yùn) 行效率。
[0004] 現(xiàn)有的Java卡補(bǔ)丁方法中如發(fā)現(xiàn)原有程序存在缺陷,一般通過(guò)刪除原程序,下載 并安裝新的應(yīng)用程序的方法,該方法會(huì)造成客戶(hù)數(shù)據(jù)的丟失,并且由于應(yīng)用程序本身的內(nèi) 存較大,需要進(jìn)行的修改較少,若整個(gè)應(yīng)用程序重新下載,需要較長(zhǎng)的時(shí)間。
【發(fā)明內(nèi)容】
[0005] 為解決上述問(wèn)題,本發(fā)明的目的是提供一種Java卡的Java代碼補(bǔ)丁方法。
[0006] 本發(fā)明為實(shí)現(xiàn)上述目的,通過(guò)以下技術(shù)方案實(shí)現(xiàn): 一種Java卡的Java代碼補(bǔ)丁方法,包括如下步驟: (1) 在Java卡芯片中預(yù)先在EEPROM中分配一塊區(qū)域作為Java代碼的補(bǔ)丁管理表,在 為不同的包打補(bǔ)丁時(shí),動(dòng)態(tài)從EEPROM中分配一塊區(qū)域作為Java代碼的補(bǔ)丁信息表,若每個(gè) 包內(nèi)補(bǔ)丁數(shù)目超過(guò)10,則需要多級(jí)補(bǔ)丁信息表; Java代碼補(bǔ)丁由補(bǔ)丁管理表、補(bǔ)丁信息表和補(bǔ)丁代碼組成; 補(bǔ)丁管理表大小為固化到ROM區(qū)域的Java包的個(gè)數(shù)X 3字節(jié),其中3字節(jié)的數(shù)據(jù)分別 為1字節(jié)的補(bǔ)丁個(gè)數(shù)和2字節(jié)的補(bǔ)丁信息表的偏移地址; 每級(jí)補(bǔ)丁信息表的大小為62字節(jié),每級(jí)補(bǔ)丁信息表內(nèi)包含10個(gè)補(bǔ)丁方法,補(bǔ)丁信息表 的數(shù)據(jù)信息包括本級(jí)的10個(gè)補(bǔ)丁方法X 6字節(jié)和2字節(jié)的下一級(jí)補(bǔ)丁信息表的偏移地址, 其中6字節(jié)的數(shù)據(jù)分別為2字節(jié)方法的絕對(duì)地址、2字節(jié)修正后方法的異常信息偏移地址和 2字節(jié)修正后方法的方法體偏移地址; (2) 產(chǎn)生要修改的Java方法的補(bǔ)丁代碼,所述的補(bǔ)丁代碼包括異常處理信息和方法 體; (3) 將所有方法的Java補(bǔ)丁代碼通過(guò)應(yīng)用協(xié)議數(shù)據(jù)單元命令以數(shù)據(jù)流的方式從卡外 下載到卡內(nèi),并存儲(chǔ)至ROM區(qū)域或EEPROM區(qū)域,在卡內(nèi)實(shí)現(xiàn)補(bǔ)丁代碼存儲(chǔ)的步驟為: 如待打補(bǔ)丁的包的ID小于固化到ROM中Java包的個(gè)數(shù),為ROM區(qū)域的包;對(duì)于ROM區(qū) 域的包采取第一補(bǔ)丁方法;如待打補(bǔ)丁的包的ID不小于固化到ROM中Java包的個(gè)數(shù),為 EEPROM區(qū)域的包;對(duì)于EEPROM區(qū)域的包采取第二補(bǔ)丁方法; 所述的第一補(bǔ)丁方法為在Java卡芯片中預(yù)先分配一定大小的EEPROM作為Java補(bǔ)丁 代碼空間,該空間包含補(bǔ)丁管理表和補(bǔ)丁信息表,所述的補(bǔ)丁管理表用于維護(hù)固化在ROM 區(qū)域的每個(gè)包的補(bǔ)丁數(shù)及其對(duì)應(yīng)的補(bǔ)丁信息表的偏移地址;所述的補(bǔ)丁信息表的空間不需 要事先分配,而是在打補(bǔ)丁的時(shí)候從EEPROM中分配,所述的補(bǔ)丁信息表存儲(chǔ)指定個(gè)數(shù)的方 法的絕對(duì)地址、修正后方法的異常信息偏移地址、修正后方法的方法體偏移地址和下一級(jí) 補(bǔ)丁信息表的偏移地址。
[0007] 所述的第二補(bǔ)丁方法不采用額外的空間,在原有方法的入口地址處,使用第一個(gè) 字節(jié)作為是否打補(bǔ)丁的標(biāo)志位;如果第一個(gè)字節(jié)不等于0,表示該方法沒(méi)有打過(guò)補(bǔ)?。蝗绻?等于0,表示方法該打過(guò)補(bǔ)丁,則后面2個(gè)字節(jié)表示新方法的偏移地址。。
[0008] 為進(jìn)一步實(shí)現(xiàn)本發(fā)明的目的,還可以采用以下技術(shù)方案: 優(yōu)選的一種Java卡的Java代碼補(bǔ)丁方法,第一補(bǔ)丁方法包括以下步驟: ① 將卡片定位到補(bǔ)丁管理表,訪(fǎng)問(wèn)補(bǔ)丁管理表的靜態(tài)數(shù)組變量,增加補(bǔ)丁方法的個(gè)數(shù), 檢查是否存在補(bǔ)丁信息表,如不存在則需要額外分配空間來(lái)存儲(chǔ)補(bǔ)丁信息表; ② 在補(bǔ)丁信息表中增加一條新的補(bǔ)丁方法信息,包括三部分內(nèi)容:方法的絕對(duì)地址、修 正后方法的異常信息偏移地址和修正后方法的方法體偏移地址; ③ 如果補(bǔ)丁信息表中補(bǔ)丁信息已滿(mǎn),需要從EEPROM申請(qǐng)新的空間,建立下一級(jí)補(bǔ)丁信 息表,并在現(xiàn)有補(bǔ)丁信息表最后寫(xiě)入新表的偏移地址,然后轉(zhuǎn)到第二步繼續(xù)執(zhí)行。
[0009] 優(yōu)選的一種Java卡的Java代碼補(bǔ)丁方法,第二補(bǔ)丁方法包括以下步驟: ① 卡片定位到原方法的方法體,將第一字節(jié)更新為〇 ; ② 從EEPROM分配空間來(lái)存儲(chǔ)補(bǔ)丁代碼,并將補(bǔ)丁代碼的偏移地址寫(xiě)入到原方法的方 法體的第2和第3字節(jié)中。
[0010] 本發(fā)明的優(yōu)點(diǎn)在于: 本發(fā)明對(duì)Java卡內(nèi)存儲(chǔ)于ROM區(qū)域Java代碼和EEPROM區(qū)域Java代碼提供了兩種不 同處理方式,對(duì)于ROM區(qū)域的Java代碼,只需事先分配補(bǔ)丁管理表,采用多級(jí)補(bǔ)丁信息表的 方法,無(wú)需事先分配空間給補(bǔ)丁信息表,補(bǔ)丁信息表在打補(bǔ)丁的時(shí)候動(dòng)態(tài)分配,這樣可以大 大減少事先分配的空間;對(duì)于EEPROM區(qū)域Java代碼,無(wú)需開(kāi)辟額外空間進(jìn)行管理,直接在 原方法地址進(jìn)行修改,減少查表的操作,進(jìn)一步提高方法執(zhí)行的速度。
[0011] 本發(fā)明的Java卡的Java代碼補(bǔ)丁方法,解決了 Java智能卡代碼出廠后固化到 Java智能卡芯片的ROM或者EEPROM后維護(hù)更新難的問(wèn)題,用戶(hù)不用更換Java卡即可對(duì) Java卡中的Java方法打補(bǔ)丁,達(dá)到功能升級(jí)或者缺陷修復(fù)的目的;由于本發(fā)明Java卡的 Java代碼補(bǔ)丁方法打補(bǔ)丁占用的內(nèi)存小,所以在打補(bǔ)丁后能確保Java卡的運(yùn)行效率,滿(mǎn)足 客戶(hù)對(duì)時(shí)間敏感應(yīng)用的需要,提高了面向用戶(hù)的Java智能卡應(yīng)用程序升級(jí)的靈活性。本發(fā) 明的Java卡的Java代碼補(bǔ)丁方法,能夠避免更新應(yīng)用程序造成的客戶(hù)數(shù)據(jù)丟失,并且修復(fù) 需要的時(shí)間短。
【附圖說(shuō)明】
[0012] 如圖1為ROM區(qū)域的Java包補(bǔ)丁機(jī)制;圖2為ROM區(qū)域代碼補(bǔ)丁的更新示意圖; 如圖3為EEPROM區(qū)域的Java包補(bǔ)丁機(jī)制。
【具體實(shí)施方式】
[0013] -種Java卡的Java代碼補(bǔ)丁方法,包括如下步驟: (1) 在Java卡芯片中預(yù)先在EEPROM中分配一塊區(qū)域作為Java代碼的補(bǔ)丁管理表,在 為不同的包打補(bǔ)丁時(shí),動(dòng)態(tài)從EEPROM中分配一塊區(qū)域作為Java代碼的補(bǔ)丁信息表,若每個(gè) 包內(nèi)補(bǔ)丁數(shù)目超過(guò)10,則需要多級(jí)補(bǔ)丁信息表; Java代碼補(bǔ)丁由補(bǔ)丁管理表、補(bǔ)丁信息表和補(bǔ)丁代碼組成; 補(bǔ)丁管理表大小為固化到ROM區(qū)域的Java包的個(gè)數(shù)X 3字節(jié),其中3字節(jié)的數(shù)據(jù)分別 為1字節(jié)的補(bǔ)丁個(gè)數(shù)和2字節(jié)的補(bǔ)丁信息表的偏移地址; 每級(jí)補(bǔ)丁信息表的大小為62字節(jié),每級(jí)補(bǔ)丁信息表內(nèi)包含10個(gè)補(bǔ)丁方法,補(bǔ)丁信息表 的數(shù)據(jù)信息包括本級(jí)的10個(gè)補(bǔ)丁方法X 6字節(jié)和2字節(jié)的下一級(jí)補(bǔ)丁信息表的偏移地址, 其中6字節(jié)的數(shù)據(jù)分別為2字節(jié)方法的絕對(duì)地址、2字節(jié)修正后方法的異常信息偏移地址和 2字節(jié)修正后方法的方法體偏移地址; (2) 產(chǎn)生要修改的Java方法的補(bǔ)丁代碼,所述的補(bǔ)丁代碼包括異常處理信息和方法 體; (3) 將所有方法的Java補(bǔ)丁代碼通過(guò)