在 .jca 文件文档中,提到constantpool部分将如下所示。
.constantPool {
/*
* The first six entries declare constant pool entries that
* are contained in
* other packages.
* Note that superMethodRef are always declared internal
* entry.
*/
classRef 0.0; // 0 package token 0, class token 0
instanceFieldRef 1.0.2;// 1 package token 1, class token 0,
// instance field token 2
virtualMethodRef 2.0.2; // 2 package token 2, class token 0,
// instance field token 2
classRef 0.3; // 3 package token 0, class token 3
staticFieldRef 1.0.4; // 4 package token 1, class token 0,
// field token 4
staticMethodRef 2.0.5; // 5 package token 2, class token 0,
// method token 5
/*
* The next five entries declare constant pool entries
* relative to this class.
*/
classRef test0; // 6
instanceFieldRef test1/field1; // 7
virtualMethodRef test1/method1()V; // 8
superMethodRef test9/equals(Ljava/lang/Object;)Z; // 9
staticFieldRef test1/field0; // 10
staticMethodRef test1/method3()V; // 11
}
但实际上我的 .constantPool 指令如下所示
.constantPool {
// 0
staticMethodRef Callmymenu/<init>()V;
// 1
classRef Callmymenu;
// 2
virtualMethodRef 0.3.1()V; // javacard/framework/Applet.register()V
// 3
staticMethodRef 0.3.0()V; // javacard/framework/Applet.<init>()V
// 4
virtualMethodRef 0.10.1()[B; // javacard/framework/APDU.getBuffer()[B
// 5
staticMethodRef 0.7.1(S)V; // javacard/framework/ISOException.throwIt(S)V
// 6
virtualMethodRef 0.3.3()Z; // javacard/framework/Applet.selectingApplet()Z
}
有人可以解释一下如何用文档标准分析我的constantPool指令。
答案 0 :(得分:2)
(假设你在谈论this)
您应该查看Java Card Virtual Machine Specification以了解常量池的用途。您粘贴到问题中的“文档”部分只是示例。不同的类具有不同的常量池。
AFAIK java卡常量池的主要原理与桌面java相同(当然有一些约束) - 因此你可能希望看here或here开始。< / p> 祝你好运!