Java 使用 Javap 命令反编译 class 文件为字节码的对应的文本形式(不是汇编)
参考
备注
还可以通过 jad 命令将字节码文件(class)转换为 java 源代码。
步骤
- 要操作的源码
public class Test {
public static void main(String[] args) {
getName();
}
public static void getName(){
System.out.println(Thread.currentThread().getName());
}
}
javac命令将代码编译为字节码文件,执行完毕后会在当前文件夹下生成 Test.class 文件
javac Test.java
javap将 Test.class 文件转换为字节码指令(不知道用什么词描述),就会在终端输出字节码指令信息
javap -c Test.class
- 输出
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: invokestatic #7 // Method getName:()V
3: return
public static void getName();
Code:
0: getstatic #12 // Field java/lang/System.out:Ljava/io/PrintStream;
3: invokestatic #18 // Method java/lang/Thread.currentThread:()Ljava/lang/Thread;
6: invokevirtual #24 // Method java/lang/Thread.getName:()Ljava/lang/String;
9: invokevirtual #27 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: return
}
javap 命令参数
用法: javap <options> <classes>
其中, 可能的选项包括:
--help -help -h -? 输出此帮助消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息(路径、大小、日期、SHA-256 散列)
-constants 显示最终常量
--module <模块>, -m <模块> 指定包含要反汇编的类的模块
-J<vm-option> 指定 VM 选项
--module-path <路径> 指定查找应用程序模块的位置
--system <jdk> 指定查找系统模块的位置
--class-path <路径> 指定查找用户类文件的位置
-classpath <路径> 指定查找用户类文件的位置
-cp <路径> 指定查找用户类文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
--multi-release <version> 指定要在多发行版 JAR 文件中使用的版本
GNU 样式的选项可使用 = (而非空白) 来分隔选项名称
及其值。
每个类可由其文件名, URL 或其
全限定类名指定。示例:
path/to/MyClass.class
jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class
java.lang.Object
博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/15967450.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/p/15967450.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。

浙公网安备 33010602011771号