Java =Class文件解析

一、描述

  Class文件是一组以8位(1字节)为基础单位的二进制流。

  当数据项大于8位时,按照【高位在前】分割成若干个8位进行存储。

  按照Java虚拟机规范的规定,Class文件结构只有两种数据类型:无符号数和表

二、无符号数

  无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1字节,2字节,4字节,8字节的无符号数。

  无符号数可用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。

三、表

类型 名字 名称 数量 描述
u4 magic 魔数 1 Class文件1-4字节,是否能被JVM接受;0xCAFEBABE
u2 minor_version 次版本号 1 Class文件5-6字节
u2 major_version 主版本号 1 Class文件7-8字节
u2 constant_pool_count 常量池大小 1 从1开始,第0项常量为空:不引用任何一个常量池项目
cp_info constant_pool 常量池 constant_pool_count - 1

字面量:字符串、常量值等

符号引用:类和接口的全限定名;字段名称和描述符;方法名称和描述符

u2 access_flag   1  
u2 this_class   1  
u2 super_class   1  
u2 interfaces_count   1  
u2 interfaces   interfaces_count  
u2 fields_count   1  
field_info fields   fields_count  
u2 methods_count   1  
method_info methods   methods_count  
u2 attributes_count   1  
attribute_info attributes   attributes_count  
扫描二维码关注公众号,回复: 6648108 查看本文章

3.1 常量池项目

常量 项目 类型 描述
CONSTANT_Utf8_info tag u1 1
length u2 字符串字节数(UTF-8编码)
bytes u1 字符串(UTF-8编码)
CONSTANT_Integer_info tag u1 3
bytes u4 int(高位在前)
CONSTANT_Float_info tag u1 4
bytes u4 float(高位在前)
CONSTANT_Long_info tag u1 5
bytes u8 long(高位在前)
CONSTANT_Double_info tag u1 6
bytes u8 double(高位在前)
CONSTANT_Class_info tag u1 7
index u2 指向全限定名常量项的索引(CONSTANT_Utf8_info)
CONSTANT_String_info tag u1 8
index u2 指向字符串字面量的索引(CONSTANT_Utf8_info)
CONSTANT_Fieldref_info tag u1 9
index u2 指向声明字段的类或接口描述符的索引(CONSTANT_Class_info)
index u2 指向字段描述符的索引(CONSTATN_NameAndType_info)
CONSTANT_Methodref_info tag u1 10
index u2 指向声明方法的类描述符的索引(CONSTANT_Class_info)
index u2 指向方法的名称及类型描述符的索引(CONSTANT_NameAndType_info)
CONSTANT_InterfaceMethodref_info tag u1 11
index u2 指向声明方法的接口描述符的索引(CONSTANT_Class_info)
index u2 指向方法的名称及类型描述符的索引(CONSTANT_NameAndType_info)
CONSTANT_NameAndType_info tag u1 12
index u2 指向字段或方法名称常量项的索引(CONSTANT_Utf8_info)
index u2 指向字段或方法描述符常量项的索引(CONSTANT_Utf8_info)
CONTANT_MethodHandle_info tag u1 15
reference_kind u1 1-9;决定方法句柄类型;标识方法句柄的字节码行为
reference_index u2 对常量池的有效索引
CONSTANT_MethodType_info tag u1 16
descriptor_index u2 对常量池的有效索引,方法的描述符(CONSTANT_Utf8_info)
CONSTANT_InvokeDynamic_info tag u1 18
bootstrap_method_attr_index u2 对当前Class文件中引导方法的bootstrap_methods[]数组的索引
name_and_type_index u2 对当前常量池的有效索引,方法名称和方法描述符(CONSTANT_NameAndType_info)

猜你喜欢

转载自www.cnblogs.com/pascall/p/11097724.html