JC applet安装使用了多少eeprom? 它是CAP文件的大小,或者我如何找到? 也许我可以使用JCsystem方法获取可用内存,但是在oracle的JC开发工具中是否有某些直接方法,如某些命令? (我没有JCOP)
答案 0 :(得分:3)
尚未找到直接获取applet大小的方法。以下是我用来获取applet大小的两种方法
标准Javacard
在开发环境中,创建一个使用JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT)
的applet,并在安装(加载)之前和之后发送APDU来调用它以获取类的EEP,并在安装(安装)之前和之后再次调用以获取EEP对于applet实例。
限制是此方法仅支持short
,这意味着最大可用内存为0x7FFF
(32767)个字节。如果applet大于32767字节,则不能使用此方法,并且需要使用虚拟applet减少可用内存,以便安装(加载)之前的可用内存小于32767字节。
Javacard支持GP 2.2 + ETSI
如果您的卡支持Global Platform 2.2和ETSI,您可以使用GET DATA命令。
GP卡规范2.2第11.3节规定
Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226.
在ETSI 102.226第8.2.1.7.2节中:
成功执行命令后,GET DATA响应数据字段应按GlobalPlatform [4]中的定义进行编码。在命令消息的参考控制参数P1和P2中引用的TLV编码数据对象的值是:
Length Description Value
1 Number of installed application tag '81'
1 Number of installed application length X
X Number of installed application
1 Free non volatile memory tag '82'
1 Free non volatile memory length Y
Y Free non volatile memory
1 Free volatile memory tag '83'
1 Free volatile memory length Z
Z Free volatile memory
使用与上面标准Javacard相同的步骤,但不是选择applet获取空闲内存并发送命令,而是直接发送GET DATA
命令。这意味着更容易一步......此外,此命令的响应不限于short
值,这意味着您可以检查大于32767字节的小程序大小
答案 1 :(得分:0)
某些对象的大小取决于Java Card操作系统,因此没有直接链接。不要忘记操作系统可能还需要使用内存来支持您的应用程序。某些操作系统也会对齐数据,使其更加复杂。
因此,除非您的制造商提供过工具,否则很难确定。给定一个或两个字节可能会确定字节代码大小,但我不知道从头到尾有任何特定的工具。
没有工具,JCSystem可能是您最好的选择。