java class文件反编译

作用:class文件是二进制字节流,对class文件进行反编译可方便查看

************************

源文件

Test.java

public class Test {public static void main(String[] args){String[] s={"hello","hello2"};System.out.println(s[0]+"  "+s[1]);String a="hello";String b="world";System.out.println(a+"  "+b);}
}

************************

idea查看字节码、反编译文件

idea默认集成插件:bytecode viewerbytecode decompiler,可分别用于查看字节码,反编译文件

bytecode viewer:view ==> show bytecode

// class version 59.0 (59)
// access flags 0x21
public class test/Test {// compiled from: Test.java// access flags 0x19public final static INNERCLASS java/lang/invoke/MethodHandles$Lookup java/lang/invoke/MethodHandles Lookup// access flags 0x1public <init>()VL0LINENUMBER 3 L0ALOAD 0INVOKESPECIAL java/lang/Object.<init> ()VRETURNL1LOCALVARIABLE this Ltest/Test; L0 L1 0MAXSTACK = 1MAXLOCALS = 1// access flags 0x9public static main([Ljava/lang/String;)VL0LINENUMBER 6 L0ICONST_2ANEWARRAY java/lang/StringDUPICONST_0LDC "hello"AASTOREDUPICONST_1LDC "hello2"AASTOREASTORE 1L1LINENUMBER 7 L1GETSTATIC java/lang/System.out : Ljava/io/PrintStream;ALOAD 1ICONST_0AALOADALOAD 1ICONST_1AALOADINVOKEDYNAMIC makeConcatWithConstants(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [// handle kind 0x6 : INVOKESTATICjava/lang/invoke/StringConcatFactory.makeConcatWithConstants(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;// arguments:"\u0001  \u0001"]INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)VL2LINENUMBER 9 L2LDC "hello"ASTORE 2L3LINENUMBER 10 L3LDC "world"ASTORE 3L4LINENUMBER 11 L4GETSTATIC java/lang/System.out : Ljava/io/PrintStream;ALOAD 2ALOAD 3INVOKEDYNAMIC makeConcatWithConstants(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [// handle kind 0x6 : INVOKESTATICjava/lang/invoke/StringConcatFactory.makeConcatWithConstants(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;// arguments:"\u0001  \u0001"]INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)VL5LINENUMBER 12 L5RETURNL6LOCALVARIABLE args [Ljava/lang/String; L0 L6 0LOCALVARIABLE s [Ljava/lang/String; L1 L6 1LOCALVARIABLE a Ljava/lang/String; L3 L6 2LOCALVARIABLE b Ljava/lang/String; L4 L6 3MAXSTACK = 4MAXLOCALS = 4
}

bytecode decompiler:out目录(java项目)target目录(springboot项目)

public class Test {public Test6() {}public static void main(String[] args) {String[] s = new String[]{"hello", "hello2"};System.out.println(s[0] + "  " + s[1]);String a = "hello";String b = "world";System.out.println(a + "  " + b);}
}

************************

javap 反编译字节码

使用javac将源文件(.java)编译为字节码文件(.class),再使用javap命令反编译class文件

javap

[root@centos test]# javap --help
用法: javap <options> <classes>
其中, 可能的选项包括:-? -h --help -help               输出此帮助消息-version                         版本信息-v  -verbose                     输出附加信息-l                               输出行号和本地变量表-public                          仅显示公共类和成员-protected                       显示受保护的/公共类和成员-package                         显示程序包/受保护的/公共类和成员 (默认)-p  -private                     显示所有类和成员-c                               对代码进行反汇编-s                               输出内部类型签名-sysinfo                         显示正在处理的类的系统信息(路径、大小、日期、SHA-256 散列)-constants                       显示最终常量--module <模块>, -m <模块>       指定包含要反汇编的类的模块--module-path <路径>             指定查找应用程序模块的位置--system <jdk>                   指定查找系统模块的位置--class-path <路径>              指定查找用户类文件的位置-classpath <路径>                指定查找用户类文件的位置-cp <路径>                       指定查找用户类文件的位置-bootclasspath <路径>            覆盖引导类文件的位置--multi-release <version>        指定要在多发行版 JAR 文件中使用的版本

示例

[root@centos test]# cat Test.java
public class Test {public static void main(String[] args){String[] s={"hello","hello2"};System.out.println(s[0]+"  "+s[1]);String a="hello";String b="world";System.out.println(a+"  "+b);}
}#编译源文件Test.java,生成Test.class
[root@centos test]# javac Test.java
[root@centos test]# ls
Test.class  Test.java#反编译Test.class
[root@centos test]# javap -c Test.class
Compiled from "Test.java"
public class Test {public Test();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: iconst_21: anewarray     #7                  // class java/lang/String4: dup5: iconst_06: ldc           #9                  // String hello8: aastore9: dup10: iconst_111: ldc           #11                 // String hello213: aastore14: astore_115: getstatic     #13                 // Field java/lang/System.out:Ljava/io/PrintStream;18: aload_119: iconst_020: aaload21: aload_122: iconst_123: aaload24: invokedynamic #19,  0             // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;29: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V32: ldc           #9                  // String hello34: astore_235: ldc           #29                 // String world37: astore_338: getstatic     #13                 // Field java/lang/System.out:Ljava/io/PrintStream;41: aload_242: aload_343: invokedynamic #19,  0             // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;48: invokevirtual #23                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V51: return
}

 #7   // class java/lang/String:常量池中第7为字符串

java class文件反编译相关推荐

  1. java class文件反编译 去掉无用注释

    java class文件反编译之后 有一些没有用的注释 在myEclipse中使用正则表达式 /\*(.*)\*/

  2. Java class 文件反编译工具JD-GUI下载安装使用教程(好用)

    多少个日日夜夜上线系统.都会有明明我改成了最新代码咋没变呢这咋整,看看反编译后的文件吧.每次看完都哦的 豁然开朗. 简介: JD-GUI是java class反编译软件上线的时候很有用.开发这么多年找 ...

  3. java的class文件反编译工具jad的应用

    java的class文件反编译工具jad的应用 JAD用法具体用法: http://www.kpdus.com/jad.html  官方最新版本,支持jdk1.6 Java下的一个简单易用的反编译工具 ...

  4. java在控制台中的反编译指令,反编译class-class文件反编译工具 v0.3.7免费版

    反编译class class文件反编译工具是一款class文件反向编译的java工具,它能够将class文件逆向编译为java语言.此款软件比较小巧,特别适合初学者使用,感兴趣的赶紧下载啊! clas ...

  5. Java字节码反编译工具

    jd-gui-0.3.3.windows.zip是一个JAVA字节码(.class文件)反编译的工具, 试了一下感觉挺好用的的.下载地址: http://ishare.iask.sina.com.cn ...

  6. 安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)

    Java Decompiler是Java语言的反编译工具,具体介绍见博客Java Decompiler(Java反编译工具) 1.下载插件 Eclipe的Java Decompiler插件名为JD-E ...

  7. 对Android APK文件反编译查看其源码

    概述 作为android的开发者,相信你会有那么一刻,比如,对于手机中某一款App,有一项功能或者效果你蛮喜欢的,想学习一下它具体是怎么实现的.追求高一点的话,我想深究它这个App的项目架构,本着一探 ...

  8. Android APK+Dex文件反编译及回编译工具

    本帖最后由 zhu891108 于 2012-8-3 11:00 编辑 大家好! 相信很多人玩智能手机,无论是塞班,安卓等等,不只是看重各种软件的功能,而更多的是看重系统的可定制性,可以自己动手DIY ...

  9. Android APK+Dex文件反编译及回编译工具 v.1.8.0 测试版

    可显示APK文件自身图标 _______________________________________________________________________________________ ...

  10. Android APK+Dex文件反编译及回编译工具(APKDB)v.1.9.2 正式版

    http://idoog.me/?p=1913 [Android APK+Dex文件反编译及回编译工具 (APKDB)v.1.9.2 正式版] <APK+Dex文件反编译及回编译工具> 简 ...

最新文章

  1. 一对多和多对一的关系,用mybatis写
  2. 邂逅 2008-06-27 23:24
  3. 深度学习模型保存_解读计算机视觉的深度学习模型
  4. Django权限系统auth模块详解
  5. Windows Server 2008 R2无法远程桌面解决方法
  6. [hashmap|空间换时间] leetcode 1 两数之和
  7. CountDownLatch和cyclicbarrier的使用
  8. html5转PDF软件,html转pdf软件(wkhtmltopdf) 0.12.5官方版
  9. JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收
  10. 华为NP课程笔记20-eSight和SNMP简介
  11. vos3000下载java_VOS3000 安装
  12. python下载手机app视频教程_Python实例教学
  13. 【工具使用】Modscan32软件使用详解
  14. LSTM matlab实现
  15. Linux大实验 (图书管理系统)
  16. css字体样式加粗变大,css怎么设置字体加粗样式
  17. 你不知道的“虚假需求”
  18. 抖音电商广告后台分为哪些?它们其中又有什么区别?
  19. AUTOSAR CAN Wakeup Analysis
  20. 虚拟示波器-开天斧-STC8H8K64U核心功能实验板测试

热门文章

  1. MATLAB实现冒泡排序-M文件
  2. 信号分析与处理 基于matlab认识实验
  3. 2018-11-3-如何使用-Telegram
  4. RNA-seq——五、根据差异基因画火山图、在火山图上标记基因名
  5. linux ext4 inode,Ext4文件系统中inode数量的限制
  6. 他山之石——VBA SQL基础
  7. libmodbus 开发说明
  8. 多元函数的极值及其求法
  9. Linux 之查看 OpenCV 版本并卸载重装
  10. charles V4.2.1版本 破解码