public static void main(String[] args) {
try {
String filename = "/home/xxx/apps/eclipse/workspace/Test/bin/com/ibm/plugin/test/MyChecker.class";
DataInputStream in = new DataInputStream(new FileInputStream(filename));
int magic = in.readInt();
if (magic != 0xcafebabe) {
System.out.println(filename + "is not a valid class!");
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
System.out.println(filename + ":" + major + "." + minor);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
String version = null;
DataInputStream in = null;
try {
tring filename = "/home/zhujt/apps/eclipse/workspace/Test/bin/com/ibm/plugin/test/MyChecker.class";
in = new DataInputStream(new FileInputStream(filename));
int magic = in.readInt();
if (magic != 0xcafebabe) {
throw new IllegalArgumentException("Wrong file format.");
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
/*
major minor version
45 3 1.0
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 1.5
50 0 1.6
*/
if(major == 45 && minor == 3) {
version = "1.1";
} else if(major == 46) {
version = "1.2";
} else if(major == 47) {
version = "1.3";
} else if(major == 48) {
version = "1.4";
} else if(major == 49) {
version = "1.5";
} else if(major == 50) {
version = "1.6";
}
// Just for future use, it is not correct
else if(major > 50) {
version = "1.7";
}
} finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return version;
}
分享到:
相关推荐
标题提到的是一个针对 JDK 1.8 版本的 Java 反编译工具,这表明该工具兼容 Java 8 的字节码,能够在不拥有源代码的情况下查看和理解类文件的实现细节。描述中提到了作者在寻找可用的工具过程中遇到困难,最终找到并...
首先,我们来看第一个子文件“jdk-8u202-windows-x64.exe”,这是针对Windows 64位系统的JDK安装程序。JDK 8u202是Java 8的更新版本,"u202"代表该版本的具体更新号,意味着它是第八个主要版本的第202次更新。对于...
安装JDK1.6.0_37在Ubuntu上的步骤通常是这样的: 1. **下载**:从Oracle官网或者第三方镜像站点获取`jdk-6u37-linux-i586.bin`文件,这是JDK的二进制安装包。 2. **赋予执行权限**:使用命令`chmod +x jdk-6u37-...
通常,JDK的安装路径可能是`C:\Program Files\Java\jdk版本号\bin`(Windows)或者`/usr/lib/jvm/java-版本号-openjdk-amd64/bin`(Linux或MacOS)。 接下来,为了在Eclipse中集成JAD,你需要下载并安装`...
紧随魔术数之后,是两个字节的版本信息,分别表示主版本号和次版本号,主版本号表示class文件可以被执行的JVM版本,次版本号表示class文件的兼容性。class文件中的版本信息告诉JVM运行class文件的Java环境版本。 接...
确保替换路径中的版本号以匹配实际安装的build-tools版本。 ##### 使用ADB运行测试 一旦生成了`Hello.dex`文件,就可以通过ADB将其推送到设备上并执行。步骤如下: 1. 使用`adb root`获取root权限。 2. 将`Hello....
另外,jar-or-class-version.jar是该工具的主要执行文件,它是一个Java可执行jar包,利用Java的反射和类加载机制,读取并解析class文件的魔数和主版本号,从而获取编译时的JDK版本信息。最后,readme.txt文件通常...
这个版本号1.8代表的是Java 8,这是一个非常重要的Java版本,引入了许多新特性,如Lambda表达式、Stream API和方法引用来增强代码的简洁性和可读性。 JDK的核心组件包括: 1. **Java编译器**(javac):负责将源...
2. 文件版本:接着是两个2字节的次版本号和主版本号,用于标识Class文件的版本,与JVM的版本对应,确保兼容性。 3. 表结构:表是Class文件的核心,包括常量池表、访问标志表、类索引、父类索引、接口索引集合、字段...
例如,在Windows上可能是`C:\Program Files\Java\jdk版本号\bin`,在macOS或Linux上可能是`/Library/Java/JavaVirtualMachines/jdk版本号.jdk/Contents/Home/bin`。 3. 使用JAD反编译:在命令行中,输入以下命令来...
3、将jad反编译工具jad.exe放到jdk安装路径的bin目录下面,jadclipse_3.1.0.jar放到eclipse的安装目录下的plugins目录下。 4、启动eclipse,打开:Window->Preferences->Java->JadClipse. Path to ...
Java 编译器(javac):用于将 Java 源代码编译成 Java 字节码,也就是 .class 文件。 Java 虚拟机(JVM):负责解释执行 Java 字节码,并将其转换为特定硬件平台的机器码。 Java 运行时环境(JRE):包含 Java ...
当我们编译 Java 代码时,编译器会生成 class 文件,而 class 文件的版本号是根据编译时使用的 JDK 版本确定的。如果我们使用的 JDK 版本高于 Tomcat 运行时使用的 JDK 版本,那么 Tomcat 就会报告 "bad version ...
当我们提到"Class反编译"时,通常指的是将Java的.class文件转换回可读的源代码形式。下面我们将详细探讨这个过程所需的工具和jar包。 首先,我们要介绍的是JAD(Java Decompiler)。JAD是一款非常流行的开源Java反...
1. **Java编译器** (javac): 它将源代码(.java文件)转换为Java字节码(.class文件),这是Java平台可执行的二进制形式。字节码可以在任何支持Java的平台上运行,因为JVM会解释并执行它。 2. **Java解释器** (java...
以下是一个详细的步骤指南,帮助您在Ubuntu 18.04上成功安装JDK 1.8。 首先,我们需要更新系统软件包列表,确保我们有最新的可用版本: ```shell sudo apt update ``` 由于Ubuntu 18.04默认仓库中的JDK版本可能不是...
2. **Java解释器**(java):执行编译后的.class文件,使Java程序得以运行。 3. **Java虚拟机(JVM)**:JVM是Java平台的核心,负责执行字节码并提供运行时环境。 4. **Java运行库**:包含大量的类库,如基础的...
"Bad version number in .class file" 是一个在Java编程中常见的错误,通常出现在尝试运行或编译不兼容的.class文件时。这个错误意味着.class文件(Java字节码)的版本与正在执行它的JVM(Java虚拟机)版本不匹配。...
安装JDK之后,你可以通过`javac`命令来编译Java源代码(.java文件),生成字节码(.class文件)。例如,`javac HelloWorld.java`会将HelloWorld.java文件编译成HelloWorld.class。然后使用`java`命令运行程序,如`...