JAVA字节码文件格式

字节码文件(.class)的格式固定如下

因为觉得这几张表后面的学习可能会用到,所以在https://www.cnblogs.com/paddix/p/5282004.html盗窃了这几张图,留作备份。

目录

字节码文件(.class)的格式固定如下

因为觉得这几张表后面的学习可能会用到,所以在https://www.cnblogs.com/paddix/p/5282004.html盗窃了这几张图,留作备份。

以下数字均表示相应组成部分占据字节大小,如4magic代表文件格式这个参数在生成的字节码文件里占据4个字节

以下是一个空白的JAVA文件对应的字节码文件里的信息


以下数字均表示相应组成部分占据字节大小,如4magic代表文件格式这个参数在生成的字节码文件里占据4个字节

4magic+2minor_version+2major_version+2constant_pool_count+constant_pool[-1]

+2access_flags+2this_class+2super_class+2interfaces_count+2interfaces[]+

2fiellds_count+fields[]+2methods_count+methods[]+2attributes_count+attributes[]

共需要1+5张表来说明这5个数组和常量池

以下是一个空白的JAVA文件对应的字节码文件里的信息

2.常量池的数据类型是表,它的类型包括以下14种

3.每种常量类型对应的表结构如下:(共14种)

常量

项目

类型

描述

CONSTANT_Utf8_info

tag

u1

1

length

u2

字节数

bytes

u1

utf-8编码的字符串

CONSTANT_Integer_info

tag

u1

3

bytes

u4

int值

CONSTANT_Float_info

tag

u4

4

bytes

u1

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_String_info

tag

u1

8

index

u2

指向字符串常量的索引

CONSTANT_Fieldref_info

tag

u1

9

index

u2

指向声明字段的类或接口描述符CONSTANT_Class_info的索引值

index

u2

指向CONSTANT_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

指向该字段或方法名称常量的索引值

index

u2

指向该字段或方法描述符常量的索引值

CONSTANT_MethodHandle_info

tag

u1

15

reference_kind

u1

值必须1~9,它决定了方法句柄的的类型

reference_index

u2

对常量池的索引

CONSTANT_MethodType_info

tag

u1

16

description_index

u2

对常量池中方法描述符的索引

CONSTANT_InvokeDynamic_info

tag

u1

18

bootstap_method_attr_index

u2

对引导方法表的索引

name_and_type_index

u2

对CONSTANT_NameAndType_info的索引

4.访问标识符规定

5.方法表的结构如下:(领域表和接口表这里没有介绍)

TypeDescriptor
u2access_flag
u2name_index
u2descriptor_index
u2attributes_count
attribute_infoattribute_info[attributes_count]

 6.属性表如下:

TypeDescriptor
u2attribute_name_index
u4attribute_length
u1bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值