返回信息流在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;
}
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #55197同步于 2017/2/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
eclipse中用java反编译插件查看.class文件
naxienian
2017/2/26镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
百度搜索java 反编译
不过还是建议抛弃Eclipse, 换IntelliJ idea,用过的都说好
【 在 naxienian 的大作中提到: 】
: 在Eclipse中安装反编译插件,如JADClipse后,反编译自己的.class文件得到的是字节码,如何才能变成Java代码。
: 下面分别是原始的java文件以及用JADClipse查看的.class文件
: public class StringInSwitchCase {
: ...................
已经安装了反编译插件,如JAD、JD-Core,不过反编译过来的效果不是自己想要的
目前的反编译插件对外来的class文件可以很好地反编译,但是对自己的.class文件(自己编写的java文件生成的.class文件)反编译后只能得到类似汇编指令的文件
【 在 cayman 的大作中提到: 】
: 百度搜索java 反编译
: 不过还是建议抛弃Eclipse, 换IntelliJ idea,用过的都说好
哇塞,问题完美解决了,谢谢
请问,eclipse里面有没有比较好用的反编译插件可以推荐,我下载的JAD、JD-Core对自己生成的.class文件反编译效果都不好
【 在 nihaoa 的大作中提到: 】
: 请用这个http://www.javadecompilers.com/,javap也能用,只不过只保留了方法的签名。
推荐用IDEA吧
【 在 naxienian 的大作中提到: 】
: 哇塞,问题完美解决了,谢谢
: 请问,eclipse里面有没有比较好用的反编译插件可以推荐,我下载的JAD、JD-Core对自己生成的.class文件反编译效果都不好