根据asm对字节码的解析,可以分析出.class文件的字节码结构
结构示意图如下
- 4个byte为cafe babe,2个byte为minor 和major
- 常量池分两部分,2个byte的常量池大小和内容
- 2个byte的access flag,2个byte的class名,2个byte的super class名,2个byte的interface数量,及interface
- 2个byte的field数量及field内容
- 2个byte的method数量及method内容
- 2个byte的i值,2个byte的attribute名,4个byte的attribute长度及attribute内容
下面分别来看各个部分
cafe babe为魔数,写死的,minor version和major version也好理解
常量池部分
常量池大小即常量的个数,具体的每个常量部分第一个byte为类型,后面为常量内容,类型总共有17种,根据占据byte个数不同可以分为2类,固定长度的和可变长度的
其中固定长度的有4种
- 4个byte:
- CONSTANT_FIELDREF_TAG
- CONSTANT_METHODREF_TAG
- CONSTANT_INTERFACE_METHODREF_T