给定一个java类文件,我们可以使用hexdump或od来了解它的jdk版本,但是我们可以知道给定java类文件的64位或32位信息吗?
我想知道java类文件是否有像version field这样的字段?
如果字节码与字大小无关,那么当您对类文件进行操作时,它就像:
0000000 feca beba 0000 3100 6300 0009 0019 0946
0000020 1900 4700 0009 0019 0948 1900 4900 0009
0000040 0019 094a 1900 4b00 000a 001a 074c 4d00
第一行约为2 * 8字节,为什么第二行地址为0000020?
答案 0 :(得分:4)
但是我们能否知道给定java类文件的64位或32位信息?
不,你不能说。
.class
文件。它们在 1 上编译的平台无关紧要。javap
输出中没有任何内容告诉您使用了什么java编译器。 (您可以从类文件版本中直接使用Java主要版本,但这不是确定的,并且它不是我们所说的......).class
或strings
)在od
文件中找不到任何编译器版本字符串的跟踪。跟进:
为什么第二行地址是0000020?
它是八进制的。有关详细信息,请参阅man 1 od
。 (从历史上看,od
是“八进制转储”的缩写。)
1 - 忽略类文件版本问题......
答案 1 :(得分:2)
Java .class文件与平台无关。特别是可以在32位和64位架构上执行相同的类文件。因此,类文件中没有这样的字段,因为它没有必要。
答案 2 :(得分:0)
类文件的字节代码是特殊的VM字节代码,与底层架构无关。因此,您无需确定此信息。您可以使用64位JDK编译Java程序并在JRE_32位上运行它。