本章节继续学习常量池相关信息
常量池
接上一章节
CONSTANT_Fieldref_info
CONSTANT_Fieldref_info表示字段符号引用,其结构体如下:
本章节继续学习常量池相关信息
接上一章节
CONSTANT_Fieldref_info表示字段符号引用,其结构体如下:
本章节继续学习常量池相关信息
接上一章节
CONSTANT_String_info常量表示java.lang.String字面量,结构如下:
本章节继续学习ClassFile中各项所代表的含义。
常量池占据了class文件很大一部分数据,里面存储着各式各样的常量信息,包括数字和字符串常量、类和接口名,字段和方法等等,下面我们就来详细了解常量池和各种常量。
constant_pool.go文件中定义了ConstantPool类型,常量池实际上也是一个表,所以ConstantPool被定义成ConstantInfo的数组。所以,要理解常量池,得先去看ConstantInfo是什么,然后再回过来,此处未完待续,接着往下看。
本章节继续学习ClassFile中各项所代表的含义。
类和超类索引后面时接口索引表,表中存放的也是常量池索引。ClassFile.class没有实现接口,所以接口表是空的:
在class_file.go文件中添加读取接口索引表的方法:
本章节开始重点学习ClassFile中各项所代表的含义,这部分可能会比较枯燥,坚持学下去,会有收获的。
很多文件格式都会规定满足该格式的文件必须以某几个固定字节开头,这几个字节主要起标识作用,叫作魔数。class文件的魔数是”0xCAFEBABE”,可以参照classpy打开的ClassFile.class文件看下:
所以,class文件以固定的4个字节(CAFEBABE)开头。在class_file.go文件中添加读取魔数的方法: