Java类文件结构解析与反编译
1. 类文件展示格式
传统展示类文件的方式较为繁琐,可采用XML格式,它能让我们更快速地遍历类文件的内部结构,也使类文件信息更易理解。若要运行相关代码,可按以下步骤操作:
1. 从www.freeinternals.org下载jCFL jar文件,并将其放入类路径。
2. 执行以下命令:
javac ClassToXML.java
java ClassToXML < Casting.class > Casting.xml
2. 魔数(Magic Number)
魔数和版本号位于类文件开头,容易找到。类文件的前4个字节是十六进制的魔数0xCAFEBABE,它告知JVM正在接收一个类文件。有趣的是,NeXT平台的多架构二进制(MAB)文件的前四个字节也是这个魔数,这可能是因为早期Java实现时Sun和NeXT的人员有交流。
选择0xCAFEBABE有多个原因。一方面,用A - F这些字母很难组成有意义的八个字母的单词;另一方面,据James Gosling说,他们办公室附近有一家名为Cafe Dead的咖啡馆,感恩而死乐队曾在那里演出,因此先有了0xCAFEDEAD,随后0xCAFEBABE成为Java文件格式的一部分。此外,还有一些其他的魔数,如Motorola用的0xFEEDFACE、IBM用的0xDEADBEEF和Sun用的0xDEADBABE ,微软的CLR文件有类似的头部BSJB,它是以.NET平台的四位原始开发者命名的。