我知道这个问题已经被问了无数次了,但我特别想要一个能够正确处理枚举的反编译器(因为我正在反编译的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()要么根本不声明,要么不编译。
发布于 2011-10-25 20:52:23
无法正确反编译枚举开关。java-classfile在编译后不知道enum-Typ,因此你的反编译器不能按你喜欢的方式反编译它。
枚举类型都是java.lang.Enum的一个子类型,每个枚举常量都有一个序号,这个序号用在switch语句中。编译器在int-value上进行切换,在枚举类型上进行切换简单地说就是语法糖。如果您尝试打开null-enum,则会收到NPE。
发布于 2013-11-15 20:58:09
我发现一个研究项目的产品CFR可以很好地处理枚举。
到目前为止,JD-GUI和JAD的性能并不比OP问题发布时更好,而CFR版本0.43生成了正确的、可编译的源代码,即使是在输入混淆的类时也是如此。
https://stackoverflow.com/questions/7874887
复制相似问题