首页 > 代码库 > xxd

xxd

Code

方法表

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  max_stack u2 1 操作数栈深度的最大值

  max_locals u2 1 局部变量表所需的存储空间

  code_length u4 1

  Code u1 code_length code_lengthcode存储Java源程序编译后的字节码指令

  exception_table_length u2 1

  exception_table exception_info exception_table_length

  attribute_count u2 1

  Attributes attribute_info attributes attributes_count

}

ConstantValue

字段表

通知虚拟机自动为静态变量赋值

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  constantvalue_index u2 1 代表常量池中一个字面量的引用

}

Deprecated

类、方法表、字段表

某个类、字段或方法不在推荐使用

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

}

Exceptions

方法表

列出方法中可能抛出的受检查异常

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  number_of_exceptions u2 1 可能抛出number_of_exceptions种异常

  exception_index_table u2 number_of_exception 每一种受检查异常用exception_index_table项表示,这是 个指向常量池中CONSTANT_Utf8_info型常量的索引

}

EnclosingMethod

类文件

 

InnerClass

类文件

记录内部类与宿主类之间的关联

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  number_of_classes  u2 1 记录了多少个内部类的信息

  Inner_classes inner_classes_info number_of_classes  每一个内部类的信息都由一个inner_classes_info表进行描述

}

Inner_classes_info {

  Inner_class_info_index u2 1 指向常量池中CONSTANT_Class_info类型常量的索引,内部类的符号引用

  outer_class_info_index u2 1 指向常量池中CONSTANT_Class_info类型常量的索引,宿主类的符号引用  

  Inner_name_index u2 1 指向常量池中CONSTANT_Class_info类型常量的索引,内部类名称,匿名内部类值为0

  Inner_class_access_flags u2 1 内部类的访问标志

}

LineNumberTable

Code属性

描述Java源码行号与字节码行号(字节码的偏移量)之间的对应关系

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  line_number_table_length u2 1

  line_number_table  

line_number_info(start_pc u2字节码行号,line_number u2 Java源码行号)

Line_number_table_length

}

LocalVariableTable

LocalVariableTypeTable

Code属性

描述栈帧中局部变量表的变量与Java源码中定义的变量之间的关系

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  local_variable_table_length u2 1

  local_variable_table  

local_variable_info(start_pc u2字节码行号,line_number u2 Java源码行号)

local_variable_table_length

}

 

Local_variable_info {

  start_pc u2 1 局部变量的生命周期开始的字节码偏移量

  length u2 1 作用范围覆盖的长度,与start_pc结合表示局部变量在字节码中的作用域范围

  name_index u2 1 局部变量的名称

  descriptor_index u2 1 局部变量的描述符

  index u2 1 局部变量在栈帧局部变量表中Slot的位置

}

StackMapTable

Code属性

在虚拟机类加载的字节码验证阶段被新类型检查验证器使用

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  Number_of_entries u2 1

  Stack_map_frame_entries stack_map_frame number_of_entries

}

Signature

类、方法表、字段表

 

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  Signature_index u2 1 指向CONSTANT_Utf8_info常量的索引,表示类签名、方法类型签名或字段类型签名

}

SourceFile

类文件

生成class文件的源码文件名称

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  sourcefile_index u2 1 类型是CONSTANT_Utf8_info类型,表示源码文件的文件名

}

SourceDebugExtension

类文件

 

Synthetic

类、方法表、字段表

此字段或方法不是由源码产生,而是由编译器自行添加的

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

}

LocalVariableTypeTable

 

RuntimeVisibleAnnotations

类、方法表、字段表

 

RuntimeInvisibleAnnotations

类、方法表、字段表

 

RuntimeVisibleParameterAnnotations

方法表

 

RuntimeInvisibleParameterAnnotations

方法表

 

AnnotationDefault

方法表

 

BootstrapMethods

类文件

{

  attribute_name_index u2 1  -指向CONSTANT_Utf8_info常量的索引,表示属性的名称

  attribute_length u4 1 属性值的长度

  Num_bootstrap_methods u2 1

  Bootstrap_methods bootstrap_method num_bootstrap_methods

}

 

Bootstrap_method{

  Bootstrap_method_ref u2 1

  Num_bootstrap_arguments u2 1

  Bootstrap+arguments u2 num_bootstrap_arguments

}

xxd