使用xxd读取Java class文件编译版本的字节解读方法
无Java环境下读取Class文件对应编译版本的方法
在未安装Java的Linux机器上,不需要额外安装Java环境,使用系统自带的xxd工具就可以读取class文件对应的Java编译器版本。
你也可以用十六进制编辑器打开class文件,读取第7、8个字节的数值,对照版本映射表就能得到对应的JDK版本。比如字节值
00 2E对应JDK 1.2,也就是十进制46(十六进制0x2E),这个方法在没法使用javap命令的场景下非常实用。
xxd输出解读方法
执行xxd命令查看目标class文件的头部内容,典型输出如下:
00000000: cafe babe 0000 0031 009b 0500 0000 0000 .......1........ 00000010: 0027 1005 0000 0000 0000 4e20 0500 0000 .'........N ....
很多人第一次看xxd输出会有字节计数的误解:开头的cafe babe是8个十六进制字符,每两个十六进制字符对应1个实际字节,因此这部分总共占4字节,刚好是Java class文件开头固定的4字节魔数,和class文件标准布局规则完全吻合,不存在计数冲突。
版本判断结果
你的推导完全正确:
- 第5、6字节值为
00 00,换算为十进制的次版本号是0 - 第7、8字节值为
00 31,换算为十进制的主版本号是49 - 对照Java class版本映射规则,主版本号49对应的就是Java 5版本
常见主版本号对应关系速查
- 46 → Java 1.2
- 47 → Java 1.3
- 48 → Java 1.4
- 49 → Java 5
- 50 → Java 6
- 51 → Java 7
- 52 → Java 8
- 53 → Java 9
- 55 → Java 11
- 61 → Java 17
内容的提问来源于stack exchange,提问作者Jack J
相关产品推荐
相关产品推荐

