解析魔数
魔数,只是用来判断一个文件是否是一个class文件,魔数占四个字节,固定值为0xCAFEBABE,这个值永远不会改变,存储在class文件的前4个字节,如下图所示。
魔数解析的实现非常简单,我们只需要从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 日
作者: 吴就业
GitHub链接:https://github.com/wujiuye/JVMByteCodeGitBook
链接: https://www.wujiuye.com/ebook/JVMByteCodeGitBook/chapter/chapter02_02.md
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!