BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #55197同步于 2017/2/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

eclipse中用java反编译插件查看.class文件

naxienian
2017/2/26镜像同步6 回复
在Eclipse中安装反编译插件,如JADClipse后,反编译自己的.class文件得到的是字节码,如何才能变成Java代码。 下面分别是原始的java文件以及用JADClipse查看的.class文件 public class StringInSwitchCase { public static void main(String[] args) { String mode = args[0]; switch (mode) { case "ACTIVE": System.out.println("Application is running on Active mode"); break; default : System.out.println("Application is running on Other mode"); } } } // Compiled from StringInSwitchCase.java (version 1.8 : 52.0, super bit) public class StringInSwitchCase { // Method descriptor #6 ()V // Stack: 1, Locals: 1 public StringInSwitchCase(); 0 aload_0 [this] 1 invokespecial java.lang.Object() [8] 4 return Line numbers: [pc: 0, line: 1] Local variable table: [pc: 0, pc: 5] local: this index: 0 type: StringInSwitchCase // Method descriptor #15 ([Ljava/lang/String;)V // Stack: 2, Locals: 3 public static void main(java.lang.String[] args); 0 aload_0 [args] 1 iconst_0 2 aaload 3 astore_1 [mode] 4 aload_1 [mode] 5 dup 6 astore_2 7 invokevirtual java.lang.String.hashCode() : int [16] 10 lookupswitch default: 51 case 1925346054: 28 28 aload_2 29 ldc <String "ACTIVE"> [22] 31 invokevirtual java.lang.String.equals(java.lang.Object) : boolean [24] 34 ifne 40 37 goto 51 40 getstatic java.lang.System.out : java.io.PrintStream [28] 43 ldc <String "Application is running on Active mode"> [34] 45 invokevirtual java.io.PrintStream.println(java.lang.String) : void [36] 48 goto 59 51 getstatic java.lang.System.out : java.io.PrintStream [28] 54 ldc <String "Application is running on Other mode"> [42] 56 invokevirtual java.io.PrintStream.println(java.lang.String) : void [36] 59 return Line numbers: [pc: 0, line: 3] [pc: 4, line: 4] [pc: 40, line: 6] [pc: 48, line: 7] [pc: 51, line: 9] [pc: 59, line: 11] Local variable table: [pc: 0, pc: 60] local: args index: 0 type: java.lang.String[] [pc: 4, pc: 60] local: mode index: 1 type: java.lang.String Stack map table: number of frames 4 [pc: 28, append: {java.lang.String, java.lang.String}] [pc: 40, same] [pc: 51, same] [pc: 59, chop 1 local(s)] } 如何才能得到下面所示的反编译后的文件 public class StringInSwitchCase{ public StringInSwitchCase() { } public static void main(string args[]) { String mode = args[0]; String s; switch ((s = mode).hashCode()) { case 1925346054: if (s.equals("ACTIVE")) { System.out.println("Application is running on Active mode"); } break; default: System.out.println("Application is running on Other mode"); break; } } }
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
cayman机器人#1 · 2017/2/27
百度搜索java 反编译 不过还是建议抛弃Eclipse, 换IntelliJ idea,用过的都说好 【 在 naxienian 的大作中提到: 】 : 在Eclipse中安装反编译插件,如JADClipse后,反编译自己的.class文件得到的是字节码,如何才能变成Java代码。 : 下面分别是原始的java文件以及用JADClipse查看的.class文件 : public class StringInSwitchCase { : ...................
naxienian机器人#2 · 2017/2/27
已经安装了反编译插件,如JAD、JD-Core,不过反编译过来的效果不是自己想要的 目前的反编译插件对外来的class文件可以很好地反编译,但是对自己的.class文件(自己编写的java文件生成的.class文件)反编译后只能得到类似汇编指令的文件 【 在 cayman 的大作中提到: 】 : 百度搜索java 反编译 : 不过还是建议抛弃Eclipse, 换IntelliJ idea,用过的都说好
nihaoa机器人#3 · 2017/3/5
请用这个http://www.javadecompilers.com/,javap也能用,只不过只保留了方法的签名。
naxienian机器人#4 · 2017/3/5
哇塞,问题完美解决了,谢谢 请问,eclipse里面有没有比较好用的反编译插件可以推荐,我下载的JAD、JD-Core对自己生成的.class文件反编译效果都不好 【 在 nihaoa 的大作中提到: 】 : 请用这个http://www.javadecompilers.com/,javap也能用,只不过只保留了方法的签名。
nihaoa机器人#5 · 2017/3/5
推荐用IDEA吧 【 在 naxienian 的大作中提到: 】 : 哇塞,问题完美解决了,谢谢 : 请问,eclipse里面有没有比较好用的反编译插件可以推荐,我下载的JAD、JD-Core对自己生成的.class文件反编译效果都不好
naxienian机器人#6 · 2017/3/6
不失为一种好办法,谢啦 【 在 nihaoa 的大作中提到: 】 : 推荐用IDEA吧