一種在Java卡中實現(xiàn)本地方法調(diào)用的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理系統(tǒng)中的指令操作技術(shù)領(lǐng)域,特別涉及一種在Java卡中實現(xiàn)本地方法調(diào)用的方法及裝置。
【背景技術(shù)】
[0002]Java卡是一種可以運行Java程序的智能卡。在Java卡中往往存有應(yīng)用程序,這些應(yīng)用程序可以是Java卡在開發(fā)時便存入的,也可以是在Java卡發(fā)行后加入的,這些應(yīng)用程序往往可以在Java卡上進(jìn)行修改。每個應(yīng)用程序均可以被防火墻保護(hù)以維護(hù)其完整性以及防止干擾。
[0003]Java卡在工作過程中,往往需要調(diào)用各種各樣的方法。這些方法例如可以包括本地方法以及普通的靜態(tài)方法。所述本地方法可以是用C語言實現(xiàn)的方法,是Java代碼和C語言代碼的交互接口。
[0004]目前,Java卡實現(xiàn)本地方法調(diào)用的流程與實現(xiàn)普通靜態(tài)方法調(diào)用的流程是類似的,其步驟可以如下所述:
[0005]首先可以從Java代碼區(qū)獲取所需要調(diào)用的方法對應(yīng)的標(biāo)識,該方法對應(yīng)的標(biāo)識往往由2個字節(jié)構(gòu)成。獲取到所述標(biāo)識后,便可以根據(jù)該標(biāo)識,對所需要調(diào)用的方法所在包(package)的位置以及代碼的位置進(jìn)行定位。在定位到代碼的位置后,便可以從代碼中獲知所述方法對應(yīng)的方法類型。若該方法類型為本地方法,則可以取出所述本地方法的索引,所述索引往往可以由2個字節(jié)構(gòu)成。根據(jù)該索引,便可以查詢到對應(yīng)的本地方法,然后便可以利用InvokeStatic指令進(jìn)行調(diào)用。
[0006]在實施本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在如下問題:
[0007]從上述描述中可以發(fā)現(xiàn),目前實現(xiàn)本地方法調(diào)用的步驟十分繁瑣,需要根據(jù)所需要調(diào)用的方法對應(yīng)的標(biāo)識,進(jìn)行一系列定位過程,然后才可以獲取到該方法對應(yīng)的索引,從而才能實現(xiàn)對該方法的調(diào)用。這種繁瑣的調(diào)用步驟無疑將增大整個系統(tǒng)的性能開銷,導(dǎo)致應(yīng)用程序運行的速率變慢,給用戶帶來不好的體驗。
[0008]應(yīng)該注意,上面對技術(shù)背景的介紹只是為了方便對本發(fā)明的技術(shù)方案進(jìn)行清楚、完整的說明,并方便本領(lǐng)域技術(shù)人員的理解而闡述的。不能僅僅因為這些方案在本發(fā)明的【背景技術(shù)】部分進(jìn)行了闡述而認(rèn)為上述技術(shù)方案為本領(lǐng)域技術(shù)人員所公知。
【發(fā)明內(nèi)容】
[0009]本發(fā)明實施例的目的在于提供一種在Java卡中實現(xiàn)本地方法調(diào)用的方法及裝置,以簡化本地方法調(diào)用的步驟,保證Java卡中應(yīng)用程序的快速運行。
[0010]為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種在Java卡中實現(xiàn)本地方法調(diào)用的方法,包括:在Java卡的指令系統(tǒng)中增設(shè)InvokeNative指令;在所述Java卡與應(yīng)用進(jìn)行代碼連接時,分析InvokeStatic指令調(diào)用的方法對應(yīng)的方法類型;當(dāng)分析的所述方法類型為本地方法時,將所述本地方法的調(diào)用指令修改為所述InvokeNative指令,并將所述本地方法的索引保存至所述InvokeNative指令中。
[0011]進(jìn)一步地,在所述在Java卡的指令系統(tǒng)中增設(shè)InvokeNative指令之后,所述方法還包括:為所述InvokeNative指令分配唯一標(biāo)識。
[0012]進(jìn)一步地,所述分析InvokeStatic指令調(diào)用的方法對應(yīng)的方法類型具體包括:提取InvokeStatic指令調(diào)用的方法對應(yīng)的Java代碼區(qū)中的第一個字節(jié);根據(jù)提取的所述第一個字節(jié),判斷所述InvokeStatic指令調(diào)用的方法對應(yīng)的方法類型。
[0013]進(jìn)一步地,在將所述本地方法的索引保存至所述InvokeNative指令中之后,所述方法還包括:將所述本地方法的代碼從Java代碼區(qū)中去除。
[0014]進(jìn)一步地,在將所述本地方法的索引保存至所述InvokeNative指令中之后,所述方法還包括:當(dāng)所述本地方法通過所述InvokeNative指令被調(diào)用時,審核調(diào)用者的權(quán)限;根據(jù)審核的權(quán)限,確定所述本地方法是否能夠被調(diào)用。
[0015]進(jìn)一步地,所述審核調(diào)用者的權(quán)限具體包括:提取調(diào)用者的包標(biāo)識;將提取的所述包標(biāo)識與預(yù)存的包標(biāo)識進(jìn)行比對,并根據(jù)比對結(jié)果確定所述調(diào)用者的權(quán)限。
[0016]進(jìn)一步地,所述根據(jù)審核的權(quán)限,確定所述本地方法是否能夠被調(diào)用具體包括:當(dāng)提取的所述包標(biāo)識存在于所述預(yù)存的包標(biāo)識中時,確定所述本地方法能夠被調(diào)用;當(dāng)提取的所述包標(biāo)識不存在于所述預(yù)存的包標(biāo)識中時,確定所述本地方法不能夠被調(diào)用。
[0017]本發(fā)明還提供了一種在Java卡中實現(xiàn)本地方法調(diào)用的裝置,包括:指令增設(shè)單元,用于在Java卡的指令系統(tǒng)中增設(shè)InvokeNative指令;方法類型分析單元,用于在所述Java卡與應(yīng)用進(jìn)行代碼連接時,分析InvokeStatic指令調(diào)用的方法對應(yīng)的方法類型;處理單元,用于當(dāng)分析的所述方法類型為本地方法時,將所述本地方法的調(diào)用指令修改為所述InvokeNative指令,并將所述本地方法的索引保存至所述InvokeNative指令中。
[0018]進(jìn)一步地,所述裝置還包括:權(quán)限審核單元,用于當(dāng)所述本地方法通過所述InvokeNative指令被調(diào)用時,審核調(diào)用者的權(quán)限;調(diào)用確定單元,用于根據(jù)審核的權(quán)限,確定所述本地方法是否能夠被調(diào)用。
[0019]進(jìn)一步地,所述權(quán)限審核單元具體包括:包標(biāo)識提取模塊,用于提取調(diào)用者的包標(biāo)識;比對模塊,用于將提取的所述包標(biāo)識與預(yù)存的包標(biāo)識進(jìn)行比對,并根據(jù)比對結(jié)果確定所述調(diào)用者的權(quán)限。
[0020]本發(fā)明實施例提供的一種在Java卡中實現(xiàn)本地方法調(diào)用的方法及裝置,通過增設(shè)專用于本地方法調(diào)用的InvokeNative指令,并且將本地方法的調(diào)用指令修改為所述InvokeNative指令以及將本地方法的索引直接保存至所述InvokeNative指令中,從而可以省去了復(fù)雜的定位過程,大大加快了本地方法調(diào)用的過程。進(jìn)一步地,本發(fā)明實施例還通過權(quán)限審核的方法,將本地方法的調(diào)用權(quán)限限制于Java卡的內(nèi)部包中,保證了本地方法調(diào)用的安全性。
[0021]參照后文的說明和附圖,詳細(xì)公開了本發(fā)明的特定實施方式,指明了本發(fā)明的原理可以被采用的方式。應(yīng)該理解,本發(fā)明的實施方式在范圍上并不因而受到限制。在所附權(quán)利要求的精神和條款的范圍內(nèi),本發(fā)明的實施方式包括許多改變、修改和等同。
[0022]針對一種實施方式描述和/或示出的特征可以以相同或類似的方式在一個或更多個其它實施方式中使用,與其它實施方式中的特征相組合,或替代其它實施方式中的特征。
[0023]應(yīng)該強(qiáng)調(diào),術(shù)語“包括/包含”在本文使用時指特征、整件、步驟或組件的存在,但并不排除一個或更多個其它特征、整件、步驟或組件的存在或附加。
【附圖說明】
[0024]附圖用來提供對本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本申請的實施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對本發(fā)明技術(shù)方案的限制。
[0025]圖1為本發(fā)明實施例提供的一種在Java卡中實現(xiàn)本地方法調(diào)用的方法流程圖;
[0026]圖2為本發(fā)明實施例提供的一種在Java卡中實現(xiàn)本地方法調(diào)用的裝置功能模塊圖。
【具體實施方式】
[0027]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
[0028]在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0029]圖1為本發(fā)明實施例提供的一種在Java卡中實現(xiàn)本地方法調(diào)用的方法流程圖。雖然下文描述流程包括以特定順序出現(xiàn)的多個操作,但是應(yīng)該清楚了解,這些過程可以包括更多或更少的操作,這些