CN105573814A - 一种java卡局部变量字节码采用芯片硬件解析执行的方法 - Google Patents
一种java卡局部变量字节码采用芯片硬件解析执行的方法 Download PDFInfo
- Publication number
- CN105573814A CN105573814A CN201510555310.4A CN201510555310A CN105573814A CN 105573814 A CN105573814 A CN 105573814A CN 201510555310 A CN201510555310 A CN 201510555310A CN 105573814 A CN105573814 A CN 105573814A
- Authority
- CN
- China
- Prior art keywords
- bytecode
- local variable
- byte code
- java card
- hardware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种硬件解析JAVA卡局部变量字节码的方法,包括:指令执行返回状态字SW初始化;确定字节码PC指针不为0,且当前字节码不是关于native方法的处理;读取当前PC指针处的字节码,根据读取的字节码,通过字节码处理函数调用CPU指令处理字节码。采用此方法可以解决JAVA卡行业用软件实现JAVA卡字节码性能低、难以达到行业应用性能指标的问题。
Description
技术领域
本发明涉及JAVA智能卡领域,特别是一种JAVA卡局部变量字节码采用芯片硬件解析执行的方法。
背景技术
JAVA卡虚拟机(以下简称JCVM)是加载到智能卡芯片上的精简版java虚拟机,虚拟机的技术核心是JAVA卡栈帧的管理,以及JAVA卡字节码的解析执行。但是由于目前的智能卡芯片资源有限,CPU主频较低,用软件编码实现的JAVA卡虚拟机执行速度慢,在解析执行银行金融相关应用的时候,难以满足该行业要求的交易性能指标。且在增加安全机制后,性能下降严重,更难达到行业应用的性能要求。虚拟机执行速度慢的问题在除了银行业以外的其它行业也普遍存在,因此JAVA卡虚拟机字节码解析执行的效率尤为重要,其性能高低成为JAVA卡产品成败最关键的因素之一。
发明内容
本发明提供一种JAVA卡局部变量字节码采用芯片硬件解析执行的方法,可以大大提高性能,同时保证硬件所实现的功能模块的可靠性。JCVM局部变量字节码详见图3和图4。
在JCVM字节码解析器执行过程中,如果是局部变量相关的字节码(详见图3,图4表格中的字节码),即可以直接调用本发明提供的芯片硬件提供的处理逻辑(专为JCVM扩展的CPU指令)进行处理,而不再采用性能较低的软件编码方式实现。本发明提供的处理方式为首创,尚未发现有同类技术存在。
JAVA卡系统实现的原则为:保持JCVM解析器架构不变,将局部变量相关字节码的处理模块化为硬件逻辑实现,如芯片专门为JCVM扩展CPU指令集,不但不会影响整体JCVM的系统设计,而且可以提高此部分的可靠性。此方法可以应用到各种JAVA卡虚拟机解析器实现中,大大提高JAVA卡虚拟机字节码解析执行的效率和可靠性。
为了实现上述发明目的,本方法提供的硬件解析JAVA卡局部变量字节码的方法包括以下步骤:
步骤一、芯片专门为JCVM扩展用于管理栈帧的硬件寄存器,包括三个:reg_FP,reg_FP_TOP,reg_SP;
步骤二、芯片专门为JCVM扩展用于JAVA卡字节码流管理的PC指针硬件寄存器reg_PC;
步骤三、局部变量相关的字节码均不再采用软件编码实现,而采用扩展芯片的CPU指令来实现其功能。
具体来讲,包括:将当前字节码所提示的局部变量的值域取出,存储到相应的操作数中;以及将当前字节码所提示的操作数取出,并存储到字节码提示的局部变量中。其中包括取出局部变量的值域,找到对应的操作数位置,将值存储到对应位置;或者是取出相应的操作数,找到对应的局部变量位置,将值存储到对应位置。其间,需要通过栈指针检查变量位置的合法性,操作数位置的合法性。
步骤四、芯片专门为JCVM扩展中断,在硬件实现局部变量相关的字节码时,遇到错误发生时,触发JCVM处理中断,在中断处理程序中对相应错误进行错误处理。对于错误处理的方式有多种,各使用者可以根据系统需要进行,比如进行安全报警,或者是报出代码错误等提示信息。
附图说明
图1JAVA卡栈帧结构示意图
图2本发明所述的JAVA卡局部变量字节码采用芯片硬件解析执行的方法流程示意图
图3操作数栈道局部变量进行存储的字节码
图4局部变量到操作数栈的字节码
具体实施方式
以下结合附图和实例对本发明所提供的JAVA卡局部变量字节码采用芯片硬件解析执行的过程做进一步的说明。
一、栈管理
如附图1所示,JAVA卡栈帧包括操作数栈,局部变量区,以及上下文信息区,操作数栈为JAVA卡字节码操作数栈区域,局部变量区为JAVA卡当前方法局部变量存储区域。在JAVA卡字节码解析执行的过程中,数据主要在操作数栈及局部变量区域进行交互,此区域的性能高低会较大程度影响JAVA卡虚拟机字节码解析执行的性能。在本发明中,将附图1中的FP(栈底),G_FP_top(局部变量栈顶),SP(操作数栈顶)用智能卡芯片硬件专用寄存器进行其存储的存储,以及通过硬件逻辑实现数据的压栈,出栈操作管理;寄存器的处理时间要远小于用软件进行管理和处理的时间(为了便于下文描述,此发明暂且将此三个寄存器称为reg_FP,reg_FP_TOP,reg_SP)。
二、实现JAVA卡字节码流指针的硬件管理
在JCVM字节码解析器进行字节码取值,以及从字节码流中获取操作数的时候,需要从当前PC指针处读取字节码码流中的操作码或者操作数。本发明设计芯片硬件寄存器reg_PC用于专门指向JAVA卡字节码流当前位置。在JCVM字节码解析器进行字节码解析执行的时候,可以从寄存器reg_PC所指向的位置处读取数据存放到临时缓存,用于字节码解析,当前字节码读出之后,硬件逻辑自动实现字节码PC指针的递增操作(即reg_PC中保存的PC指针值自动递增到下一条字节码开始的位置)。由于JAVA卡应用均为JAVA卡字节码流,在应用执行过程中,在每次获取字节码的时候,均需要读取,频率非常高,用硬件处理此操作,可以大大缩短字节码处理的时间。
三、在局部变量相关的字节码处理过程中,本发明提供芯片硬件逻辑实现局部变量处理的功能模块,如CPU指令的方式进行处理,替代原始的纯软件处理方式。如增加如下指令集合:
A、实现操作数栈数据到局部变量的存储字节码
1)CPUCmd_SSTORE、CPUCmd_SSTORE_0、CPUCmd_SSTORE_1、CPUCmd_SSTORE_2、CPUCmd_SSTORE_3
此类CPU指令用于实现字节码SSTORE、SSTORE_0、SSTORE_1、SSTORE_2、SSTORE_3的功能,指令功能说明详见图3。
2)CPUCmd_ASTORE、CPUCmd_ASTORE_0、CPUCmd_ASTORE_1、CPUCmd_ASTORE_2、CPUCmd_ASTORE_3
此类CPU指令用于实现字节码ASTORE、ASTORE_0、ASTORE_1、ASTORE_2、ASTORE_3的功能,指令功能说明详见图3。
3)CPUCmd_ISTORE、CPUCmd_ISTORE_0、CPUCmd_ISTORE_1、CPUCmd_ISTORE_2、CPUCmd_ISTORE_3
此类CPU指令用于实现字节码ISTORE、ISTORE_0、ISTORE_1、ISTORE_2、ISTORE_3的功能,指令功能说明详见图3。
B、实现从局部变量数据到操作数栈的存储字节码
1)CPUCmd_SLOAD、CPUCmd_SLOAD_0、CPUCmd_SLOAD_1、CPUCmd_SLOAD_2、CPUCmd_SLOAD_3
此类CPU指令用于实现字节码SLOAD、SLOAD_0、SLOAD_1、SLOAD_2、SLOAD_3的功能,指令功能说明详见图4。
2)CPUCmd_ALOAD、CPUCmd_ALOAD_0、CPUCmd_ALOAD_1、CPUCmd_ALOAD_2、CPUCmd_ALOAD_3
此类CPU指令用于实现字节码ALOAD、ALOAD_0、ALOAD_1、ALOAD_2、ALOAD_3的功能,指令功能说明详见图4。
3)CPUCmd_ILOAD、CPUCmd_ILOAD_0、CPUCmd_ILOAD_1、CPUCmd_ILOAD_2、CPUCmd_ILOAD_3
此类CPU指令用于实现字节码ILOAD、ILOAD_0、ILOAD_1、ILOAD_2、ILOAD_3的功能,指令功能说明详见图4。
四、在上面CPU指令处理局部变量相关的字节码时,其字节码相关的边界检查通过硬件逻辑实现。
1、局部变量操作越界检查
在读取或存储局部变量的时候,在字节码流或者是操作码本身处可以获得该字节码当前处理的局部变量索引index,硬件逻辑需要结合该index及reg_FP以及reg_FP_top进行检查,检查该index是否超出局部变量范围。
2、操作数栈操作越界检查
在从操作数栈获取数据并存储到局部变量,或是从局部变量获取数据存储到操作数栈时,均需要检查操作的操作数栈是否在reg_FP_top、reg_SP以及最大的栈帧边界范围内。
五、出错处理
在以上硬件逻辑实现(CPU指令)的字节码处理流程中,在相应的边界等出错时触发硬件中断,在中断处理程序中,JAVA卡平台开发者可以进行错误的后续处理,如安全报警或提示代码错误。
六、JAVA卡虚拟机解析调用CPU指令的流程
JCVM字节码解析器处理流程参考附图2:
步骤1、代码开始,指令执行返回的状态字SW初始化为9000;
步骤2、如果字节码PC指针不为0,则进到下一步,否则返回当前SW,处理结束;
步骤3、判断当前字节码是否关于native方法的处理,是则调用naive方法的处理,不是则进入下一步;
步骤4、读取当前PC指针处的字节码,根据读取的字节码,进入相应的字节码处理函数,处理完毕,返回到步骤2。
所述进入相应的字节码处理函数,为调用CPU指令进行字节码处理。
如SLOAD命令:
void_sload()
{//以下用c嵌入汇编指令方式进行编程,调用CPU指令
CPUCmd_SLOAD;
}
不同的CPU指令进行字节码的处理流程有所不同,下面以两个CPU指令处理字节码为例来具体说明:
1、CPUCmd_SSTORE指令处理流程:
芯片硬件定位reg_PC寄存器所指向的字节码流位置,读取SSTORE操作码后面的操作数index,根据reg_SP,reg_FP及reg_FP_top所记录的值域边界范围判断index是否在此范围内。如果不在则触发中断,进入中断处理程序进行错误处理;如果在则表明当前操作数index处于正确的局部变量范围内,需将对应值存储到index所指向的局部变量位置。
2、CPUCmd_SLOAD指令处理流程:
芯片硬件定位reg_PC寄存器所指向的字节码流位置,读取SLOAD操作码后面的操作数index,并根据reg_FP、reg_FP_top等判断index是否在正确的局部变量范围之内,出错则产生中断或者复位(芯片硬件可设置操作方式);正确,则从index处取出数据,数据存储到JCVM操作数栈里面。
Claims (4)
1.一种JAVA卡局部变量字节码采用芯片硬件解析执行的方法,其特征在于,该方法包括:
指令执行返回状态字SW初始化;
确定字节码PC指针不为0,且当前字节码不是关于native方法的处理;
读取当前PC指针处的字节码,根据读取的字节码,通过字节码处理函数调用CPU指令处理字节码。
2.根据权利要求1所述的方法,其特征在于,所述通过字节码处理函数调用CPU指令处理字节码包括:
芯片硬件定位reg_PC寄存器所指向的的字节码位置,读取操作码的操作数index,根据寄存器判断index是否在正确的局部变量范围之内,不在所述局部变量范围之内,则产生中断或复位;在所述局部变量范围之内,则从index处取出数据,存储到操作数栈。
3.根据权利要求1或2所述的方法,其特征在于,所述CPU指令为实现硬件解析局部变量字节码新增的指令集合,具体为在字节码前加前缀CPUCmd_。
4.根据权利要求3所述的方法,其特征在于,该方法开始之前,专门为JCVM扩展用于管理栈帧的硬件寄存器,扩展用于JAVA卡字节码管理的PC指针硬件寄存器,为JCVM扩展中断。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510555310.4A CN105573814A (zh) | 2015-09-01 | 2015-09-01 | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510555310.4A CN105573814A (zh) | 2015-09-01 | 2015-09-01 | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105573814A true CN105573814A (zh) | 2016-05-11 |
Family
ID=55883986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510555310.4A Pending CN105573814A (zh) | 2015-09-01 | 2015-09-01 | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105573814A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406932A (zh) * | 2016-08-26 | 2017-02-15 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
CN106649009A (zh) * | 2016-11-30 | 2017-05-10 | 北京中电华大电子设计有限责任公司 | 一种java卡字节码引用访问测试方法 |
CN106845225A (zh) * | 2016-12-20 | 2017-06-13 | 北京中电华大电子设计有限责任公司 | 一种java卡帧的边界检查方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003025743A1 (fr) * | 2001-09-12 | 2003-03-27 | Hitachi, Ltd. | Systeme processeur ayant un accelerateur java |
CN1468399A (zh) * | 2000-10-10 | 2004-01-14 | 纳佐米通信公司 | 使用微代码引擎的java硬件加速器 |
CN1513137A (zh) * | 2001-05-31 | 2004-07-14 | Arm | 使用多重指令集的数据处理 |
CN101375248A (zh) * | 2006-06-07 | 2009-02-25 | 香港应用科技研究院有限公司 | 硬件JavaTM字节码译码器 |
-
2015
- 2015-09-01 CN CN201510555310.4A patent/CN105573814A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1468399A (zh) * | 2000-10-10 | 2004-01-14 | 纳佐米通信公司 | 使用微代码引擎的java硬件加速器 |
CN1513137A (zh) * | 2001-05-31 | 2004-07-14 | Arm | 使用多重指令集的数据处理 |
WO2003025743A1 (fr) * | 2001-09-12 | 2003-03-27 | Hitachi, Ltd. | Systeme processeur ayant un accelerateur java |
CN101375248A (zh) * | 2006-06-07 | 2009-02-25 | 香港应用科技研究院有限公司 | 硬件JavaTM字节码译码器 |
Non-Patent Citations (4)
Title |
---|
谢晶晶: "JCVM解释器的研究与设计", 《中国优秀硕士学位论文全文数据库 信息科级辑》 * |
赵丽等: "一种JVM硬件体系结构的探讨", 《科技资讯》 * |
赵睿: "软硬件结合构造JVM的方法", 《计算机工程应用技术》 * |
黄以华等: "Java处理器关键技术分析", 《小型微型计算机系统》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406932A (zh) * | 2016-08-26 | 2017-02-15 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
CN106406932B (zh) * | 2016-08-26 | 2020-01-07 | 北京中电华大电子设计有限责任公司 | 一种改进的Java卡初始化方法和Java卡 |
CN106649009A (zh) * | 2016-11-30 | 2017-05-10 | 北京中电华大电子设计有限责任公司 | 一种java卡字节码引用访问测试方法 |
CN106845225A (zh) * | 2016-12-20 | 2017-06-13 | 北京中电华大电子设计有限责任公司 | 一种java卡帧的边界检查方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2281547C2 (ru) | Обработка данных с использованием нескольких наборов команд | |
US7783867B2 (en) | Controlling instruction execution in a processing environment | |
KR101249693B1 (ko) | 서브루틴 복귀 메카니즘 선택 | |
US8875114B2 (en) | Employing identifiers provided by an operating system of a processing environment to optimize the processing environment | |
US20070006224A1 (en) | Controlled execution of a program used for a virtual machine on a portable data carrier | |
US8261251B2 (en) | Modification of array access checking in AIX | |
US8387031B2 (en) | Providing code improvements for nested virtual machines | |
US9129137B2 (en) | Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine | |
CN105573814A (zh) | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 | |
JP3732198B2 (ja) | 複数命令セットシステムにおける非処理操作処理 | |
US6907515B2 (en) | Configuration control within data processing systems | |
US7802080B2 (en) | Null exception handling | |
US10802854B2 (en) | Method and apparatus for interpreting bytecode instruction stream | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
Lackner et al. | Towards the hardware accelerated defensive virtual machine–type and bound protection | |
US20040015873A1 (en) | Identifying references to objects during bytecode verification | |
CN104077173A (zh) | 智能卡内java程序指令的执行方法及智能卡 | |
JP2001306334A (ja) | エミュレーション装置 | |
KR102462864B1 (ko) | 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법 | |
CN112199160B (zh) | 虚拟指令还原方法、装置、设备及存储介质 | |
US11966619B2 (en) | Background processing during remote memory access | |
US11152076B2 (en) | Apparatus and method for executing debug instructions | |
CN118626298A (zh) | 一种代码异常处理的方法及装置 | |
Mao et al. | eWAPA: An eBPF-based WASI Performance Analysis Framework for Web Assembly Runtimes | |
CN118509159A (zh) | 一种基于即时编译的智能合约加速执行方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
DD01 | Delivery of document by public notice |
Addressee: Gai Ana Document name: Notification of Acceptance of Patent Application |
|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160511 |
|
WD01 | Invention patent application deemed withdrawn after publication |