javap反编译java字节码文件

    xiaoxiao2026-05-03  12

    概述:

             javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码,从而对代码内部的执行逻辑进行分析。

    语法:

            把java文件编译为class文件:javac  Test.java  (Test.java为java文件名) 生成对应的 .class 文件 Test.class

            执行javap操作:javap 命令行 class文件名称(不加 .class后缀)

            例如: javap -c Test

    命令行

       -help  输出 javap 的帮助信息。    -l  输出行及局部变量表。    -b  确保与 JDK 1.1 javap 的向后兼容性。    -public  只显示 public 类及成员。    -protected  只显示 protected 和 public 类及成员。    -package  只显示包、protected 和 public 类及成员。这是缺省设置。    -private  显示所有类和成员。    -J[flag]  直接将 flag 传给运行时系统。    -s  输出内部类型签名。    -c  输出类中各方法的未解析的代码,即构成 Java 字节码的指令。    -verbose  输出堆栈大小、各方法的 locals 及 args 数, 以及class文件的编译版本    -classpath [路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。      - bootclasspath [路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelibt.jar 和 jrelibi18n.jar 中。    -extdirs[dirs]  覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。

    示例:

    一个Demo.java文件(存放在桌面)

    class Demo { public static void main(String[] args) { Integer aInteger = 56; int aInt=0; int aInt2 = 123; String s="helloworld"; String aString = new String("IamString"); } }执行命令行操作

    反汇编结果

    Compiled from "Demo.java" class Demo { Demo(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: bipush 56 2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: astore_1 6: iconst_0 7: istore_2 8: bipush 123 10: istore_3 11: ldc #3 // String helloworld 13: astore 4 15: new #4 // class java/lang/String 18: dup 19: ldc #5 // String IamString 21: invokespecial #6 // Method java/lang/String."<init>":(Ljava/lang/String;)V 24: astore 5 26: return }

    对其中的语法不清楚啊?可以参照一下这两篇博客:

    javap -c 命令详解 http://blog.csdn.net/junsure2012/article/details/7099222

    JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc) http://www.cnblogs.com/luyanliang/p/5498584.html

    如果还不清楚,放大招了:

    ORACLE 官方文档  Chapter 4. The class File Format  http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

    转载请注明原文地址: https://ju.6miu.com/read-1309308.html
    最新回复(0)