在研究JCVM规范的同时,试图对capfile进行反编译,我想到了以下问题:
描述符组件(6.13)说:
描述符组件提供了足够的信息来解析和验证CAP文件的所有元素。它引用并因此描述了常数池组件(第6至14页中的第6.7节,“恒定池组件”)、类组件(第6至21页的第6.8节,“类组件”)、方法组件(第6至35页的“方法组件”)和静态字段组件(第6至41页的“静态字段组件”)中的元素。CAP文件中没有组件引用描述符组件。
组件模型(6.1)说:
完整的CAP文件必须包含本章中指定的所有必需组件。三个组件是可选的: Applet组件(第6.5节,第6-12页的“Applet组件”),导出组件(第6-47页的第6.12节,“导出组件”)和Debug组件(第6-57页的第6.14节,“调试组件”)。
然而,它在安装(6.2)中说:
COMPONENT_Descriptor (可选)
而且,我还没有观察到全局平台加载中的描述符组件用于加载命令!因此,问题是描述符实际用于什么,以及为什么applet不需要在卡片上工作?相反,JCVM规范3.0.1和更高版本不将描述符组合列为可选的。
发布于 2018-10-17 11:49:36
而且,我还没有观察到全局平台加载中的描述符组件用于加载命令!因此,问题是描述符实际用于什么,以及为什么applet不需要在卡片上工作?
Descriptor.cap组件提供了用于分析和验证CAP文件中其他元素的信息。因此,字节码验证需要Descriptor.cap组件,它是在卡外完成的,对卡片操作没有重要意义。它引用并指向不同CAP文件组件的信息,但没有组件(强制组件)指向描述符组件。因此,没有必要在卡上加载此组件。因此,您在Global Platform [Load] commands.中看不到它
如下面JCVM规范3.0.5所定义的那样。
描述符组件提供了足够的信息来解析和验证CAP文件的所有元素。它引用并描述了常数池组件(6.8恒定池组件)、类组件(6.9类组件)、方法组件(6.10方法组件)和静态字段组件(6.11静态字段组件)中的元素。CAP文件中没有组件引用描述符组件。
相反,JCVM规范3.0.1和更高版本不将描述符组合列为可选的。
在下面的JCVM规范3.0.5中,他们按照Descriptor.cap文件组件的安装顺序将optional描述为optional(6.3节)。虽然不是相同的规范,但很难说出他们为什么没有在您提到的规范中提到这一点。
https://stackoverflow.com/questions/52834572
复制相似问题