1.一種JAVA卡幀的邊界檢查方法,其特征是:所述方法包括:
步驟S1:Java卡虛擬機調(diào)用Java方法時,建立一個方法幀,并壓入棧,記錄方法幀的起始地址,同時記錄兩個范圍:合法操作數(shù)范圍和合法局部變量索引范圍;
步驟S2:Java卡虛擬機執(zhí)行Java方法的字節(jié)碼時如需操作棧數(shù)據(jù),獲取需要操作的棧數(shù)據(jù)類型;
步驟S3:根據(jù)所述數(shù)據(jù)類型;如果是局部變量,則執(zhí)行步驟A1;如果是操作數(shù),則執(zhí)行步驟B1;
步驟A1:判斷局部變量索引是否在合法局部變量索引范圍內(nèi),是則執(zhí)行步驟S4,否則拋出異常;
步驟B1:判斷操作數(shù)地址是否在合法操作數(shù)范圍內(nèi),是則執(zhí)行步驟S4,否則拋出異常;
步驟S4:Java卡虛擬機執(zhí)行當(dāng)前字節(jié)碼。
2.根據(jù)權(quán)利要求1所述的方法,其特征是:所述的兩個范圍是通過所述Java卡虛擬機解析所述應(yīng)用的Java方法的method_header_info數(shù)據(jù)結(jié)構(gòu)中的max_stack,max_locals,nargs信息結(jié)合所述方法幀的起始地址信息,使用0作為合法局部變量索引范圍的下邊界,使用(max_locals+nargs-1)作為合法局部變量索引范圍的上邊界;使用方法幀起始地址加上((max_locals+nargs)*2)作為合法操作數(shù)范圍的下邊界;使用合法操作數(shù)范圍的下邊界加上(max_stack*2)作為合法操作數(shù)范圍的上邊界。