我知道这个问题已经被问过无数次了,但我特别关注一个可以正确处理枚举的反编译器(因为我正在反编译的 jar 大量使用枚举)。我测试了JAD和JD-GUI都没有。
有人可以推荐一个反编译器(最好是在 Linux 下工作并且可以轻松处理整个 jar 而不需要我编写 shell 脚本)?
编辑: 具体来说,我对以下结构有疑问:
switch(myEnum) {
case A: ...
case B: ...
}
它们被反编译(对于 JAD 和 JD-GUI)如下:
switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) {
case 1:
case 2:
}
其中 $SWITCH_TABLE$com$MyType()
根本未声明或未编译。
最佳答案
不可能正确地反编译枚举开关。 java-classfile 不知道编译后的 enum-Typ,因此你的反编译器不能按你喜欢的方式反编译它。
枚举类型都是 java.lang.Enum
的子类型,每个枚举常量都有一个序号,用于 switch 语句。编译器对该 int 值进行切换,对枚举类型的切换简单地说是句法糖。如果您尝试打开一个 null
-enum,您将得到一个 NPE。
关于适用于 Java 5 的 Java 反编译器(处理枚举等新事物),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874887/