java class文件反编译
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 viewer、bytecode 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文件反编译相关推荐
- java class文件反编译 去掉无用注释
java class文件反编译之后 有一些没有用的注释 在myEclipse中使用正则表达式 /\*(.*)\*/
- Java class 文件反编译工具JD-GUI下载安装使用教程(好用)
多少个日日夜夜上线系统.都会有明明我改成了最新代码咋没变呢这咋整,看看反编译后的文件吧.每次看完都哦的 豁然开朗. 简介: JD-GUI是java class反编译软件上线的时候很有用.开发这么多年找 ...
- java的class文件反编译工具jad的应用
java的class文件反编译工具jad的应用 JAD用法具体用法: http://www.kpdus.com/jad.html 官方最新版本,支持jdk1.6 Java下的一个简单易用的反编译工具 ...
- java在控制台中的反编译指令,反编译class-class文件反编译工具 v0.3.7免费版
反编译class class文件反编译工具是一款class文件反向编译的java工具,它能够将class文件逆向编译为java语言.此款软件比较小巧,特别适合初学者使用,感兴趣的赶紧下载啊! clas ...
- Java字节码反编译工具
jd-gui-0.3.3.windows.zip是一个JAVA字节码(.class文件)反编译的工具, 试了一下感觉挺好用的的.下载地址: http://ishare.iask.sina.com.cn ...
- 安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)
Java Decompiler是Java语言的反编译工具,具体介绍见博客Java Decompiler(Java反编译工具) 1.下载插件 Eclipe的Java Decompiler插件名为JD-E ...
- 对Android APK文件反编译查看其源码
概述 作为android的开发者,相信你会有那么一刻,比如,对于手机中某一款App,有一项功能或者效果你蛮喜欢的,想学习一下它具体是怎么实现的.追求高一点的话,我想深究它这个App的项目架构,本着一探 ...
- Android APK+Dex文件反编译及回编译工具
本帖最后由 zhu891108 于 2012-8-3 11:00 编辑 大家好! 相信很多人玩智能手机,无论是塞班,安卓等等,不只是看重各种软件的功能,而更多的是看重系统的可定制性,可以自己动手DIY ...
- Android APK+Dex文件反编译及回编译工具 v.1.8.0 测试版
可显示APK文件自身图标 _______________________________________________________________________________________ ...
- Android APK+Dex文件反编译及回编译工具(APKDB)v.1.9.2 正式版
http://idoog.me/?p=1913 [Android APK+Dex文件反编译及回编译工具 (APKDB)v.1.9.2 正式版] <APK+Dex文件反编译及回编译工具> 简 ...
最新文章
- 一对多和多对一的关系,用mybatis写
- 邂逅 2008-06-27 23:24
- 深度学习模型保存_解读计算机视觉的深度学习模型
- Django权限系统auth模块详解
- Windows Server 2008 R2无法远程桌面解决方法
- [hashmap|空间换时间] leetcode 1 两数之和
- CountDownLatch和cyclicbarrier的使用
- html5转PDF软件,html转pdf软件(wkhtmltopdf) 0.12.5官方版
- JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收
- 华为NP课程笔记20-eSight和SNMP简介
- vos3000下载java_VOS3000 安装
- python下载手机app视频教程_Python实例教学
- 【工具使用】Modscan32软件使用详解
- LSTM matlab实现
- Linux大实验 (图书管理系统)
- css字体样式加粗变大,css怎么设置字体加粗样式
- 你不知道的“虚假需求”
- 抖音电商广告后台分为哪些?它们其中又有什么区别?
- AUTOSAR CAN Wakeup Analysis
- 虚拟示波器-开天斧-STC8H8K64U核心功能实验板测试