📚《深入浅出JVM字节码》

《Java虚拟机字节码:从入门到实战》的开源版本。作者通过自己的实战经验,整合出一套适合新手的高效学习教程。归纳并提炼知识点,制定合理路线,帮助读者更快掌握核心技术。


解析魔数

魔数,只是用来判断一个文件是否是一个class文件,魔数占四个字节,固定值为0xCAFEBABE,这个值永远不会改变,存储在class文件的前4个字节,如下图所示。

image-20210724164435293

魔数解析的实现非常简单,我们只需要从class文件字节缓存中连续读取四个字节,将这四个字节转为一个U4对象,并赋值给ClassFile对象的magic字段,实现代码如下。

public class MagicHandler implements BaseByteCodeHandler {  
   	// 排序排在第一个
    @Override  
    public int order() {  
        return 0;  
    }  
    @Override  
		public void read(ByteBuffer codeBuf, ClassFile classFile) throws Exception {  
  			// 连续读取四个字节并转为U4对象
        classFile.setMagic(new U4(codeBuf.get(), codeBuf.get(),codeBuf.get(), codeBuf.get()));  
        if (!"0xCAFEBABE".equalsIgnoreCase(classFile.getMagic() .toHexString())) {  
            throw new Exception("这不是一个Class文件");  
        }  
    }  
}  

发布于:2021 年 07 月 24 日
作者: 吴就业
链接: https://github.com/wujiuye/JVMByteCodeGitBook
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!


📚目录