Java类文件结构解析与反编译探索
1. 类文件展示格式
传统展示类文件的方式较为繁琐,可采用XML格式,它能让我们更快速地遍历类文件的内部结构,也使类文件信息更易理解。要运行相关代码,需先从www.freeinternals.org下载jCFL jar文件并放入类路径,然后执行以下命令:
javac ClassToXML.java
java ClassToXML < Casting.class > Casting.xml
2. 魔数(Magic Number)
类文件开头的4个字节是魔数,以十六进制表示为0xCAFEBABE,它告知JVM正在接收一个类文件。这个魔数的选择有其缘由,据说与附近一家名为Cafe Dead的咖啡馆有关,最初是0xCAFEDEAD,随后演变为0xCAFEBABE。其他一些公司也有各自的魔数,如Motorola的0xFEEDFACE、IBM的0xDEADBEEF和Sun的0xDEADBABE等。而Microsoft的CLR文件有类似的头部BSJB,是以.NET平台的四位原始开发者命名的。
3. 次要和主要版本号(Minor and Major Versions)
紧跟魔数之后的4个字节是次要和主要版本号,示例中为0x0000和0x0033,即次要版本0和主要版本51,这表明代码是由JDK 1.7.0编译的。JVM使用这些版本号来确保识别并完全理解类文件的格式,会拒绝执行具有更高主次版本号的类文件。次要版本用于需要更新JVM的小改动,主要版本用于需要全新且不兼容JVM的重大根本性改动。
超级会员免费看
订阅专栏 解锁全文
49

被折叠的 条评论
为什么被折叠?



