JCVM Specification——CAP File Format(学习记录)

本文详细解析了JavaCard中的CAP组件,包括Header、Directory、ConstantPool等,介绍了它们的结构和功能,重点阐述了组件间的关系,特别是Applet的下载、安装和注册流程。
摘要由CSDN通过智能技术生成

分析CAP各组件

各Component的定义

根据JCVM规范,各组件的结构如下。
在这里插入图片描述

Header组件

各package的AID和name。

Directory组件

目录,记录各组件的大小,CAP文件的import package数量,applet数量等。

ConstantPool组件

ConstantPool存的并不是常量对象,而是类、方法和静态域等项的引用。在JavaCard技术中,引用不是地址值,而是token值。在CAP文件的上下文中,对其它项的引用是通过CAP的常量池间接进行的。

Applet组件

个人理解就是简化版的特殊Class。包含Applet的AID和install方法的地址。

Class组件

类列表。描述了package内所有类的信息,包括:实现的接口,字段,方法的引用。

Method组件

方法列表。保存了所有方法的入参、所需栈大小以及字节码。

StaticField组件

包含所有初始化与未初始化的静态域。

Reference Location组件

记录Method组件中info字段到ConstantPool中constant_pool[]字段的偏移,利用这个信息,可以将Method对3类资源的间接引用替换为直接引用。

Descriptor组件

辅助描述的作用,非必选。
在这里插入图片描述

各Component间的引用关系

1. 安装成功后,卡上留下的5个组件间的引用关系

● 有Export Component意味着该package的属性为public,否则就没有Export组件。
● 类、方法、静态域都从ConstanPool间接访问,前提是这3类资源的地址不变。在Applet运行过程中,Class、Method组件的内容不变、地址不变,但StaticField内容可能发生改变,Flash磨损均衡策略会改变StaticField的地址,再把StaticField组件的引用放到ConstantPool中就不合适。
在这里插入图片描述

Applet的下载、安装、注册流程

下载

通过APDU指令,把CAP各组件下载到卡的内存中。
在这里插入图片描述

安装+注册

安装:JCRE通过JCVM调用Applet的install方法,new出一个Applet对象。
注册:将安装好的Applet对象注册到JCRE的Applet表中。
Applet组件中有install方法的偏移,JCRE可以通过JCVM执行该Applet的install方法进行安装。
在这里插入图片描述

以下的流程图为自己推测,因为JCRE的实现并未有统一版本,只要符合规范即可。
在这里插入图片描述

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值