温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

javap怎么反编译java字节码文件

发布时间:2021-12-08 10:03:32 来源:亿速云 阅读:201 作者:iii 栏目:大数据

本篇内容介绍了“javap怎么反编译java字节码文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

概述:
         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
}

JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)

常用反编译工具:

1、jd-gui:最好用,但有时反编译出来的结果会有遗漏。

2、DJ Java Decompiler:相对jd-gui易用性上差一些,但是反编译过来的结果更准确。

3、jclasslib bytecode viewer:将字节码转化为JVM指令的工具。

“javap怎么反编译java字节码文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI