没有合适的资源?快使用搜索试试~ 我知道了~
2.2 major_version.minor_versionmajor_version.minor_version合在一起形成当前.class文件的版本号,
资源详情
资源评论
资源推荐
1.总体格式
Class File format
type
descriptor
remark
u4
magic
0xCAFEBABE
u2
minor_version
u2
major_version
u2
constant_pool_count
cp_info
constant_pool[cosntant_pool_count – 1]
index 0 is invalid
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]
2. 格式详解
2.1 magic
magic 被称为“魔数”,用来标识.class 文件的开头。所有合法的.class 字节码都应该是该数
开头,占 4 个字节。
2.2 major_version.minor_version
major_version.minor_version 合在一起形成当前.class 文件的版本号,该版本号一般由编
译器产生,并且由 sun 定义。如 59.0。它们一起占 4 个字节。
2.3 constant_pool
在 Java 字节码中,有一个常量池,用来存放不同类型的常量。由于 Java 设计的目的之一就
是字节码需要经网络传输的,因而字节码需要比较紧凑,以减少网络传输的流量和时间。常
量池的存在则可以让一些相同类型的值通过索引的方式从常量池中找到,而不是在不同地方
有不同拷贝,缩减了字节码的大小。
每个常量池中的项是通过 cp_info 的类型来表示的,它的格式如下:
cp_info format
type
descriptor
remark
u1
tag
u1
info[]
这里 tag 用来表示当前常量池不同类型的项。info 中存放常量池项中存放的数据。
tag 中表示的数据类型:
CONSTANT_Class_info (7)、
CONSTANT_Integer_info (3)、
CONSTANT_Long_info (5)、
CONSTANT_Float_info (4)、
CONSTANT_Double_info (6)、
CONSTANT_String_info (8)、
CONSTANT_Fieldref_info (9)、
CONSTANT_Methodref_info (10)、
CONSTANT_InterfaceMethodref_info (11)、
CONSTANT_NameAndType_info (12)、
CONSTANT_Utf8_info (1)、
注:在 Java 字节码中,所有 boolean、byte、char、short 类型都是用 int 类型存放,因而在常
量池中没有和它们对应的项。
2.3.1 CONSTANT_Class_info
用于记录类或接口名(used to represent a class or an interface)
CONSTANT_Class_info format
type
descriptor
remark
u1
tag
CONSTANT_Class (7)
u2
name_index
constant_pool 中的索引,CONSTANT_Utf8_info
类型。表示类或接口名。
注:在 Java 字节码中,类和接口名不同于源码中的名字,详见附件 A.
2.3.2 CONSTANT_Integer_info
用于记录 int 类型的常量值(represent 4-byte numeric (int) constants:)
CONSTANT_Integer_info
type
descriptor
remark
u1
tag
CONSTANT_Integer (3)
u4
bytes
整型常量值
2.3.3 CONSTANT_Long_info
用于记录 long 类型的常量值(represent 8-byte numeric (long) constants:)
CONSTANT_Long_info
type
descriptor
remark
u1
tag
CONSTANT_Long (5)
u4
high_bytes
长整型的高四位值
u4
low_bytes
长整型的低四位值
2.3.4 CONSTANT_Float_info
用于记录 float 类型的常量值(represent 4-byte numeric (float) constants:)
CONSTANT_Float_info
type
descriptor
remark
u1
tag
CONSTANT_Float(4)
u4
bytes
单精度浮点型常量值
几个特殊值:0x7f800000 => Float.POSITIVE_INFINITY、0xff800000 =>
Float.NEGATIVE_INFINITY、
0x7f800001 to 0x7fffffff => Float.NaN、0xff800001 to 0xffffffff => Float.NaN
2.3.5 CONSTANT_Double_info
用于记录 double 类型的常量值(represent 8-byte numeric (double) constants:)
CONSTANT_Double_info
type
descriptor
remark
u1
tag
CONSTANT_Double(6)
u4
high_bytes
双精度浮点的高四位值
u4
low_bytes
双精度浮点的低四位值
几个特殊值:0x7ff0000000000000L => Double.POSITIVE_INFINITY、
0xfff0000000000000L => Double.NEGATIVE_INFINITY
0x7ff0000000000001L to 0x7fffffffffffffffL => Double.NaN 、
0xfff0000000000001L to 0xffffffffffffffffL => Double.NaN
2.3.6 CONSTANT_String_info
用于记录常量字符串的值(represent constant objects of the type String:)
CONSTANT_String_info
type
descriptor
remark
u1
tag
CONSTANT_String(8)
u2
string_index
constant_pool 中的索引,CONSTANT_Utf8_info
类型。表示 String 类型值。
2.3.7 CONSTANT_Fieldref_info
用于记录字段信息(包括类或接口中定义的字段以及代码中使用到的字段)。
CONSTANT_Fieldref_info
type
descriptor
remark
u1
tag
CONSTANT_Fieldref(9)
u2
class_index
constant_pool 中的索引,
CONSTANT_Class_info 类型。记录定义该字段的
类或接口。
u2
name_and_type_index
constant_pool 中的索引,
CONSTANT_NameAndType_info 类型。指定类
或接口中的字段名(name)和字段描述符
(descriptor)。
2.3.8 CONSTANT_Methodref_info
用于记录方法信息(包括类中定义的方法以及代码中使用到的方法)。
CONSTANT_Methodref_info
type
descriptor
remark
u1
tag
CONSTANT_Methodref(10)
u2
class_index
constant_pool 中的索引,
CONSTANT_Class_info 类型。记录定义该方法的
类。
u2
name_and_type_index
constant_pool 中的索引,
CONSTANT_NameAndType_info 类型。指定类
中扽方法名(name)和方法描述符
(descriptor)。
2.3.9 CONSTANT_InterfaceMethodref_info
用于记录接口中的方法信息(包括接口中定义的方法以及代码中使用到的方法)。
CONSTANT_InterfaceMethodref_info
type
descriptor
remark
u1
tag
CONSTANT_InterfaceMethodref(11)
u2
class_index
constant_pool 中的索引,
CONSTANT_Class_info 类型。记录定义该方法的
接口。
u2
name_and_type_index
constant_pool 中的索引,
CONSTANT_NameAndType_info 类型。指定接
剩余42页未读,继续阅读
恽磊
- 粉丝: 20
- 资源: 297
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0