#1 楼
JDK包含一个javap
命令。它提供了很多信息,但是您可以像这样使用它:javap -verbose yourClass | grep version
示例输出:
minor version: 0
major version: 51
主要版本会告诉您编译器的版本:
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
#2 楼
同样,file(1)
实用程序和基于它的libmagic(3)
也可以成为您的朋友:$ file Gwan.class
Gwan.class: compiled Java class data, version 50.0 (Java 1.6)
评论
如果您使用Windows,该怎么办?
–avgvstvs
14年4月18日在13:55
@avgvstvs:然后您仍然可以使用Cygwin之类的东西。老实说,如果通过将RCE工作限制在单个主机OS上来限制自己的工具集,那是你自己的错。简而言之:基于任意和人为的限制,知道什么时候使用什么工具,不要挑剔。
– 0xC0000022L♦
2014年4月27日在18:24
Cygwin引入了不必要的依赖关系。如果要反转.class文件,则在每个JVM上,您都可以访问javap。我不会不同意您所说的其他内容,但是我很懒惰,如果我不必启动vm或d / l cygwin,我会更开心。
–avgvstvs
2014年4月27日在19:52
#3 楼
您正在命令行(对于名为MyClass的类)中进行查找:在Unix / Linux上: :
javap -verbose MyClass | grep "major"
您需要结果的主要版本。以下是一些示例值:
Java 1.2使用主要版本46
Java 1.3使用主要版本47
Java 1.4使用主要版本48
Java 5使用主要版本49
Java 6使用主要版本50
Java 7使用主要版本51
Java 8使用主要版本52
评论
对于45,确切的编译器版本取决于次要版本。我相信45.3将是1.0.2。
–锑
13年4月15日在17:13
这实际上告诉您类文件格式的版本,而不是编译器或用于生成它的其他工具的版本。 javac支持-target或--release标志来生成针对JDK早期版本的类文件。
–大卫·菲利普斯(David Phillips)
18-12-29 at 3:50
除了代码,有没有办法获取版本?
–艾弗里
5月11日16:35