zoukankan      html  css  js  c++  java
  • Javacard 解释器怎样在API类库中找到源文件调用的类、方法或者静态域?

    申明:本篇非本人原创,是在阅读各种论文文献之后,对论文文献的一种梳理。

    主要参考文献为:

     ----------------------------------------------------------------我是分割线---------------------------------------------------------------------------

    什么是Javacard API?

    Javacard API也被称为API类库或类库,按照包、类和接口/方法的层次结构提供了一系列标准的库函数,为Javacard 应用程序的开发人员提供了标准的接口。

    通过这个接口就可以请求系统服务和系统资源,应用开发者不需要了解复杂的智能卡系统就可以开发出智能卡applet了。

    这样的API设计也体现了分层思想。

    Javacard API 是怎样跟解释器集成的呢?

    上诉问题可以分解为三个问题:

    1、Javacard 解释器怎样在API库类中找到源文件调用的类、方法或者静态域?

    2、Javacard 解释器怎样处理找到的类、方法或者静态域?

    3、在API中是如何实现具体的类、方法和静态域?

    本篇文章首先解决第一个问题。

    概括地来说:

    在Java智能卡中,无论是类库还是应用程序applet,转换器已经为所有的类和实例化方法都分配了一个值,被称为token值。

    Applet运行时,解释器根据token值作为索引,利用CAP文件各组件中具体的包信息、类信息和方法信息,完成对类、方法和域引用的解析。这就是token动态链接原理。这个问题就是Applet对于调用外包的具体解析过程。

    下面详细讲解这个过程。

    Applet对于调用外包的解析设计到两个文件:CAP文件和Export文件。

    Export文件主要描述了Applet和引用包之间的关联关系,包含了当前类所在的包完整的公有方法的连接信息,并且为当前的类、方法和域都分配了不同的token值。

    CAP文件是通过卡外虚拟机convert将Java编译生成的.class文件转换为更为紧凑集中的.cap文件。在卡内,Javacard虚拟机解释器对这个CAP文件进一步解析。

    根据最新的sun公司的Javacard规范,一个CAP包含12个组件,它们分别是:

    在Applet调用外包的解析过程中,主要涉及到Applet自身包的常量池组件(ConstantPool.cap)和导入组件(Import.cap)和该Applet所调用外包的导出组件(Export.cap)、类组件(Class.cap)和方法组件(Method.cap)。

    那具体又是怎样通过这些组件在API类库中找到源文件调用的类、方法和域的呢?

    第一步,

      解释器从常量池组件(COMPONENT_ConstantPool)出发,在常量池组件中获取该方法所在包的索引、类的token值和方法的token值。

    第二步,

      根据刚才获得的方法所在包的索引,在Applet所在包的导入组件(COMPONENT_Import)获取包号。根据包号,解释器就可以跳转到该方法所在的类所属的包。

    第三步,

      这个时候解释器已经跳转到外部的包。根据第一步获得的方法所在类的token值,在导入包的导出组件(COMPONENT_Export)中提取该方法所在的类在类组件(COMPONENT_Class)的偏移量。

    第四步,

      根据上一步获得的方法所在的类在类组件(COMPONENT_Class)中的偏移量,在类组件中找到这个类的类信息。并根据第一步获得的方法的token值,在类组件中获取实例化方法在方法组件(COMPONENT_Method)中的偏移量。

    第五步,

      根据上一步获取的实例化方法在方法组件(COMPONENT_Method)中的偏移量找到具体的方法。至此,解释器就获得了外包实例化方法的地址,紧接着将继续执行该方法的字节码,进而完成一次对外包实例化方法的调用。

    上面的步骤通过图表来表示如下:

  • 相关阅读:
    How to build Linux system from kernel to UI layer
    Writing USB driver for Android
    Xposed Framework for Android 8.x Oreo is released (in beta)
    Linux Smartphone Operating Systems You Can Install Today
    Librem 5 Leads New Wave of Open Source Mobile Linux Contenders
    GUADEC: porting GNOME to Android
    Librem 5 – A Security and Privacy Focused Phone
    GNOME and KDE Join Librem 5 Linux Smartphone Party
    Purism计划推出安全开源的Linux Librem 5智能手机
    国产系统之殇:你知道的这些系统都是国外的
  • 原文地址:https://www.cnblogs.com/cuglkb/p/5711622.html
Copyright © 2011-2022 走看看