JVM二进制对照表

一、Class文件格式表

类型名称数量
u4magic(魔数)1
u2minor_version(次版本号)1
u2major_version(主版本号)1
u2constant_pool_count(常量数)1
cp_infoconstant_pool(常量池表)constant_pool_count-1
u2access_flags(访问标识)1
u2this_class(当前类全限量名)1
u2supper_class(父类全限量名)1
u2interfaces_count(接口数量)1
u2interfaces(接口表)interfaces_count
u2fields_count(字段数量)1
field_infofieldsfields_count
u2methods_count1
method_infomethodsmethods_count
u2attributes_count1
attribute_infoattributesattributes_count

二、Java版本号列表

以下为常用的对应表

JDK版本版本号
751
852
953
1054
1155
1256
1357
1458
1559
1660

三、常量池中的17种数据类型的结构表

常量项目类型描述
CONSTANT_Utf8_infotagu1值为1
lengthu2UTF-8编码的字符串占用了字节数
bytesu1长度为length的UTF-8编码的字符串
CONSTANT_Integer_infotagu1值为3
bytesu4按照高位在前存储的int值
CONSTANT_Float_infotagu1值为4
bytesu4按照高位在前存储的float值
CONSTANT_Long_infotagu1值为5
bytesu8按照高位在前存储的long值
CONSTANT_Double_infotagu1值为6
bytesu8按照高位在前存储的double值
CONSTANT_Class_infotagu1值为7
indexu2指向全限定名常量项的索引
CONSTANT_String_infotagu1值为8
indexu2指向字符串字面量的索引
CONSTANT_Fieldref_infotagu1值为9
indexu2指向声明字段的类或者接口描述符CONSTANT_Class_info的索引项
indexu2指向字段描述符CONSTANT_NameAndType的索引项
CONSTANT_Methodref_infotagu1值为10
indexu2指向声明方法的类描述符CONSTANT_Class_info的索引项
indexu2指向名称及类型描述符CONSTANT_NameAndType的索引项
CONSTANT_InterfaceMethodref_infotagu1值为11
indexu2指向声明方法的接口描述符CONSTANT_Class_info的索引项
indexu2指向名称及类型描述符CONSTANT_NameAndType的索引项
CONSTANT_NameAndType_infotagu1值为12
indexu2指向该字段或方法名称常量项的索引
indexu2指向该字段或方法描述符常量项的索引
CONSTANT_MethodHandle_infotagu1值为15
reference_kindu1值必须在1至9之间(包括1和9),它决定了方法句柄的类型。方法句柄类型的值表示方法句柄的字节码行为
reference_indexu2值必须是对常量池的有效索引
CONSTANT_MethodType_infotagu1值为16
descriptor_indexu2值必须是对常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示方法的描述符
CONSTANT_Dynamic_infotagu1值为17
bootstrap_method_att_indexu2值必须是对当前Class文件中引导方法表的bootstrap_methods[]数组的有效索引
name_and_type_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_NameAndType_info结构,表示方法名和方法描述符
CONSTANT_InvokeDynamic_infotagu1值为18
bootstrap_method_att_indexu2值必须是对当前Class文件中引导方法表的bootstrap_methods[]数组的有效索引
name_and_type_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_NameAndType_info结构,表示方法名和方法描述符
CONSTANT_Module_infotagu1值为19
name_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示模块名称
CONSTANT_Package_infotagu1值为20
name_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示包名称

四、访问标志表(类)

标志名称标志值含义
ACC_PUBLIC0x0001是否为public类型
ACC_FINAL0x0010是否被声明为final,只有类可设置
ACC_SUPER0x0020是否允许使用invokespecial字节码指令的新语义,invokespecial指令的语义在JDK1.0.2发生过改变,为了区别这条指令使用哪种语义,JDK1.0.2之后编译出来的类的这个标志都必须为真
ACC_INTERFACE0x0200标识这是一个接口
ACC_ABSTRACT0x0400是否为abstract类型,对于接口或者抽象类来说,此标志值为真,其它类型值为假
ACC_SYNTHETIC0x1000标识这个类并非由用户代码产生的
ACC_ANNOTATION0x2000标识这是一个注解
ACC_ENUM0x4000标识这是一个枚举
ACC_MODULE0x8000标识这是一个模块

五、field_info(字段表结构)

类型名称数量
u2access_flags1
u2name_index1
u2descriptor_index1
u2attributes_count1
attribute_infoattributesattributes_count

五(1)、字段访问标志

标志名称标志值含义
ACC_PUBLIC0x0001字段是否为public
ACC_PRIVATE0x0002字段是否为private
ACC_PROTECTED0x0004字段是否为protected
ACC_STATIC0x0008字段是否为static
ACC_FINAL0x0010字段是否final
ACC_VOLATILE0x0040字段是否为volatile
ACC_TRANSIENT0x0080字段是否为transient
ACC_SYNTHETIC0x1000字段是否由编译器自动产生
ACC_ENUM0x4000字段是否enum

六、method_info(方法表结构)

类型名称数量
u2access_flags1
u2name_index1
u2desciptor_index1
u2attributes_count1
attribute_infoattributesattributes_count

六(1). 方法访问标志

标志名称标志值含义
ACC_PUBLIC0x0001方法是否为public
ACC_PRIVATE0x0002方法是否为private
ACC_PROTECTED0x0004方法是否为protected
ACC_STATIC0x0008方法是否为static
ACC_FINAL0x0010方法是否为final
ACC_SYNCHRONIZED0x0020方法是否为synchronized
ACC_BRIDGE0x0040方法是不是由编译器产生的桥接方法
ACC_VARARGS0x0080方法是否接受不定参数
ACC_NATIVE0x0100方法是否 为native
ACC_ABSTRACT0x0400方法是否为abstract
ACC_STRICT0x0800方法是否为strictfp
ACC_SYNTHETIC0x1000方法是否由编译器自动产生

六(2). 属性表结构


类型名称数量
u2attribute_name_index1
u4attribute_length1
u1infoattribute_length

六(3). Code属性表的结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2max_stack1
u2max_locals1
u4code_length1
u1codecode_length
u2exception_table_length1
exception_infoexception_tableexception_table_length
u2attributes_count1
attribute_infoattributesattributes_count

七、虚拟机规范预定义的属性

属性名称使用位置含义
Code方法表Java代码编译成的字节码指令
ConstantValue字段表由final 关键字定义的常量值
Deprecated类、方法表、字段表被声明为deprecated的方法和字段
Exceptions方法表方法抛出的异常列表
EnclosingMethod类文件仅当一个类为局部类或者匿名类时才能垫拥有这个属性,这个属性用于标示这个类所在的外围方法
InnerClasses类文件内部类列表
LineNumberTableCode属性Java源码的行号与字节码指令的对应关系
LocalVariableTableCode属性方法的局部变量描述
StackMapTableCode属性JDK 6中新增的属性,供新的类型检查验证器(Type Checker)检查和处理目标方法的局部变量和操作数所需要的类型是否匹配
Signature类、方法表、字段表JDK5 中新增的属性,用于支持泛型情况下的方法签名。在Java语言中,任何类、接口、初始化方法或成员的泛型签名如果包含了类型变量(Type Variables)或参数化类型(Parameterized Type),则Signature属性会为它记录泛型签名信息。由于Java的泛型采用擦除法实现,为了避免类型信息被擦除后导致的签名混乱,需要这个属性记录泛型中的相关信息
SourceFile类文件记录源文件名称
SourceDebugExtensiion类文件JDK5 中新增的属性,用于存储额外的调试信息。譬如在进行JSP文件调试时,无法通过Java堆栈来定位到JSP文件的型号,JSR 45提案为这些非Java语言编写,却需要编译成字节码并运行在Java虚拟机中的程序提供了一个进行调试的标准机制,使用该属性就可以用于存储这个标准所新加入的调试信息
Synthetic类、方法表、字段表标识方法或字段为编译器自动生成的
LocalVariableTypeTableJDK 5中新增的属性,它使用特征签名代替描述符,是为了引入泛型语法之后能描述泛型参数化类型面添加
RuntimeVisibleAnnotations类、方法表、字段表JDK 5中新增的属性,为动态注解提供支持。该属性用于指明哪些注解是运行时(实际上运行时就是进行反射调用)可见的
RuntimeInvisibleAnnotations类、方法表、字段表JDK 5中新增的属性,与RuntimeVisibleAnnotations属性作用刚好相反,用于指明哪些注解是运行时不可见的
RuntimeVisibleParameterAnnotations方法表JDK 5中新增的属性,作用与RuntimeVisibleAnnotations属性类似,只不过作用对象为方法参数
RuntimeInvisibleParameterAnnotations方法表JDK 5中新增的属性,作用与RuntimeInvisibleAnnotations属性类似,只不过作用对象为方法参数
AnnotationDefault方法表JDK 5中新增的属性,用于记录注解类元素的默认值
BootstrapMethods类文件JDK 7中新增的属性,用于保存invokedynamic指令引用的引导方法限定符
RuntimeVisibleTypeAnnotatinons类、方法表、字段表,Code属性JDK 8中新增的属性,为实现JSR 308中新增的类型注解提供的支持,用于指明哪些类注解是运行时(实际上运行时就是进行反射调用)可见的
RuntimeInvisibleTypeAnnotions类、方法表、字段表,Code属性JDK 8中新增的属性,为实现JSR 308中新增的类型注解提供的支持,与RuntimeVisibleTypeAnnotations属性作用刚好相反,与RuntimeVisibleTypeAnnotations属性作用刚好相反,用于指明哪些注解是运行时不可见的
MethodParameters方法表JDK 8中新增的属性,用于支持(编译时加上-parameters参数)将方法名称编译进Class文件中,并可运行时获取。此前要获取方法名称(典型的如IDE的代码提示)只能通过JavaDoc中得到
ModuleJDK 9中新增的属性,用于记录一个Module的名称以及相关信息(requires、exports、opens、uses、provides)
ModulePackagesJDK 9中新增的属性,用于记录一个模块中所有被exports或者open的包
ModuleMainClassJDK 9中新增的属性,用于指定一个模块的主类
NestHostJDK 11中新增的属性,用于支持嵌套类(Java 中的内部类)的反射和访问控制的API,一个内部类通过该属性得知自己的宿主类
NestMembersJDK 11中新增的属性,用于支持嵌套类(Java 中的内部类)的反射和访问控制的API,一个宿主类通过该属性得知自己有哪些内部类

Exceptions属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2number_of_exceptions1
u2exception_index_tablenumber_of_exceptions

LineNumberTable属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2line_number_table_length1
lline_number_infoline_number_tableline_number_table_length

line_number_info

类型名称数量
u2start_pc1
u2line_number1

LocalVariableTable属性结构

类型名称数量
u2attribute_name_inidex1
u4attribute_length1
u2local_variable_table_length1
local_variable_infolocal_variable_tablelocal_variable_table_length

Local_variable_info项目结构

类型名称数量
u2start_pc1
u2length1
u2name_index1
u2descriptor_index1
u2index1

LocalVariableTypeTable属性结构

类型名称数量
u2attribute_name_inidex1
u4attribute_length1
u2local_variable_table_length1
local_variable_infolocal_variable_tablelocal_variable_table_length

Local_variable_type_info项目结构

类型名称数量
u2start_pc1
u2length1
u2name_index1
u2Signature1
u2index1

SourceFile属性结构

类型名称数量
u2attribute_name_index1
u2attribute_length1
u2sourcefile_index1

SourceDebugExtension属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u1debug_extension[attribute_length]1

ConstantValue属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2constantvalue_index1

InnerClasses属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2number_of_classes1
Inner_class_infoInner_classnumber_of_classes

inner_classes_info表的结构

类型名称数量
u2inner_class_info_index1
u2outer_class_info_index1
u2inner_name_index1
u2inner_class_access_flags1

inner_class_access_flags标志

标志名称标志值
ACC_PUBLIC0x0001内部类是否为public
ACC_PRIVATE0x0002内部类是否为private
ACC_PROTECTED0x0004内部类是否为protected
ACC_STATIC0x0008内部类是否为static
ACC_FINAL0x0010内部类是否为final
ACC_INTERFACE0x0020内部类是否为接口
ACC_ABSTRACT0x0400内部类是否为abstract
ACC_SYNTHETIC0x1000内部类是否并非由用户代码产生的
ACC_ANNOTATION0x2000内部类是不是一个注解
ACC_ENUM0x4000内部类是不是一个枚举

Deprecated及Synthetic属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1

StackMapTable属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2number_of_entries1
stack_map_framestack_map_frame_entriesnumber_of_entries

Signature属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2signature_index1

BootstrapMethods属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2num_bootstrap_methods1
bootstrap_methodbootstrap_methodsnum_bootstrap_methods

bootstrap_method属性结构

类型名称数量
u2bootstrap_method_ref1
u2num_bootstrap_arguments1
u2bootstrap_argumentsnum_bootstrap_arguments

Methodparameters属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u1parameter_count1
parameterparametersparameter_count

parameter属性结构

类型名称数量
u2name_index1
u2access_flags1

Module属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2module_name_index1
u2module_flags1
u2module_version_index1
u2requires_count1
requirerequiresrequires_count
u2exports_count1
exportexportsexports_count
u2opens_count1
openopensopens_count
u2uses_count1
useuses_indexuses_count
u2provides_count1
privateprovidesprovides_count

exports属性结构

类型名称数量
u2exports_index1
u2exports_flags1
u2exports_to_count1
exportexports_to_indexexports_to_count

ModulePackages属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2pckage_count1
u2pcakge_indexpackage_count

ModulePackages属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2package_count1
u2package_indexpackage_count

ModuleMainClass属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2main_class_index1

RuntimeVisibleAnnotations属性结构

类型名称数量
u2attribute_name_index1
u4attribute_length1
u2num_annotations1
annotationannotationsnum_annotations

annotation属性结构

类型名称数量
u2type_index1
u2num_element_value_pairs1
element_value_pairelement_value_pairsnum_element_value_pairs

十、附加表

1. 二进制对照表

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL

2. 特殊字符解释

NUL空VT 垂直制表SYN 空转同步
STX 正文开始CR 回车CAN 作废
ETX 正文结束SO 移位输出EM 纸尽
EOY 传输结束SI 移位输入SUB 换置
ENQ 询问字符DLE 空格ESC 换码
ACK 承认DC1 设备控制1FS 文字分隔符
BEL 报警DC2 设备控制2GS 组分隔符
BS 退一格DC3 设备控制3RS 记录分隔符
HT 横向列表DC4 设备控制4US 单元分隔符
LF 换行NAK 否定DEL 删除
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值