bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

自己动手写JVM八【解析class文件(六)】

发表于 2017-01-11 | 分类于 JVM

本章节继续学习常量池相关信息

常量池

接上一章节

CONSTANT_Fieldref_info

CONSTANT_Fieldref_info表示字段符号引用,其结构体如下:

1
2
3
4
5
CONSTANT_Fieldref_info {
u1 tag;
u2 class_index;
u2 name_and_type_index;
}

阅读全文 »
bboyjing's blog

自己动手写JVM七【解析class文件(五)】

发表于 2017-01-10 | 分类于 JVM

本章节继续学习常量池相关信息

常量池

接上一章节

CONSTANT_String_info

CONSTANT_String_info常量表示java.lang.String字面量,结构如下:

1
2
3
4
CONSTANT_String_info {
u1 tag;
u2 string_index;
}

阅读全文 »
bboyjing's blog

自己动手写JVM六【解析class文件(四)】

发表于 2017-01-09 | 分类于 JVM

本章节继续学习ClassFile中各项所代表的含义。

常量池

常量池占据了class文件很大一部分数据,里面存储着各式各样的常量信息,包括数字和字符串常量、类和接口名,字段和方法等等,下面我们就来详细了解常量池和各种常量。

ConstantPool结构体

constant_pool.go文件中定义了ConstantPool类型,常量池实际上也是一个表,所以ConstantPool被定义成ConstantInfo的数组。所以,要理解常量池,得先去看ConstantInfo是什么,然后再回过来,此处未完待续,接着往下看。

阅读全文 »
bboyjing's blog

自己动手写JVM五【解析class文件(三)】

发表于 2017-01-08 | 分类于 JVM

本章节继续学习ClassFile中各项所代表的含义。

接口索引表

类和超类索引后面时接口索引表,表中存放的也是常量池索引。ClassFile.class没有实现接口,所以接口表是空的:
jvmgo_10
在class_file.go文件中添加读取接口索引表的方法:

1
2
3
4
func (self *ClassFile) readInterface(reader *ClassReader) {
//接口是u2类型的表结构,所以用的readUint16s方法读取
self.interfaces = reader.readUint16s()
}

阅读全文 »
bboyjing's blog

自己动手写JVM四【解析class文件(二)】

发表于 2017-01-05 | 分类于 JVM

本章节开始重点学习ClassFile中各项所代表的含义,这部分可能会比较枯燥,坚持学下去,会有收获的。

魔数(magic)

很多文件格式都会规定满足该格式的文件必须以某几个固定字节开头,这几个字节主要起标识作用,叫作魔数。class文件的魔数是”0xCAFEBABE”,可以参照classpy打开的ClassFile.class文件看下:
jvmgo_4
所以,class文件以固定的4个字节(CAFEBABE)开头。在class_file.go文件中添加读取魔数的方法:

阅读全文 »
1…192021…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist