本文相关知识均来自:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html
.class
文件都遵循ClassFile结构:
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];
}
类型 | 描述 | 备注 |
---|---|---|
u4 | magic | 魔数:0xCAFEBABE |
u2 | minor_version | 小版本号 |
u2 | major_version | 主版本号 |
u2 | constant_pool_count | 常量池大小,从1开始 |
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 | 方法数(默认有构造方法<init>:()V ,所以该项至少为1) |
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组成
cp_info 结构:
cp_info {
u1 tag;
u1 info[];
}
相应的,在.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];
}
标签:count,文件,ClassFile,Java,attribute,u2,info,attributes,class
From: https://www.cnblogs.com/iw1waoejlfo2lo/p/16711483.html