美文网首页
04 - ASM之ClassFile

04 - ASM之ClassFile

作者: 舍是境界 | 来源:发表于2022-01-11 07:05 被阅读0次

    Java ClassFile

    对于一个具体的.class而言,它是遵循ClassFile结构的。这个数据结构位于 Java Virtual Machine Specification The class File Format部分。

    ClassFile {
        u4             magic;
        u2             minor_version;
        u2             major_version;
        u2             constant_pool_count;
        cp_info        constant_pool[constant_pool_count-1];
        u2             access_flags;
        u2             this_class;
        u2             super_class;
        u2             interfaces_count;
        u2             interfaces[interfaces_count];
        u2             fields_count;
        field_info     fields[fields_count];
        u2             methods_count;
        method_info    methods[methods_count];
        u2             attributes_count;
        attribute_info attributes[attributes_count];
    }
    

    其中,

    • u1: 表示占用1个字节
    • u2: 表示占用2个字节
    • u4: 表示占用4个字节
    • u8: 表示占用8个字节

    而cp_info、field_info、method_info和attribute_info表示较为复杂的结构,但它们也是由u1、u2、u4和u8组成的。

    相应的,在.class文件当中,定义的字段,要遵循field_info的结构。

    field_info {
        u2             access_flags;
        u2             name_index;
        u2             descriptor_index;
        u2             attributes_count;
        attribute_info attributes[attributes_count];
    }
    

    同样的,在.class文件当中,定义的方法,要遵循method_info的结构。

    method_info {
        u2             access_flags;
        u2             name_index;
        u2             descriptor_index;
        u2             attributes_count;
        attribute_info attributes[attributes_count];
    }
    

    在method_info结构中,方法当中方法体的代码,是存在于Code属性结构中,其结构如下:

    Code_attribute {
        u2 attribute_name_index;
        u4 attribute_length;
        u2 max_stack;
        u2 max_locals;
        u4 code_length;
        u1 code[code_length];
        u2 exception_table_length;
        {   u2 start_pc;
            u2 end_pc;
            u2 handler_pc;
            u2 catch_type;
        } exception_table[exception_table_length];
        u2 attributes_count;
        attribute_info attributes[attributes_count];
    }
    

    小结

    本文提供了classFile的类结构参考,大家可以对照jdk官网文档进行相关学习,希望对你能有所帮助。

    相关文章

      网友评论

          本文标题:04 - ASM之ClassFile

          本文链接:https://www.haomeiwen.com/subject/jqydcrtx.html