首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Java5协同工作的Java反编译器(处理枚举和其他新事物)

与Java5协同工作的Java反编译器(处理枚举和其他新事物)
EN

Stack Overflow用户
提问于 2011-10-24 19:25:11
回答 2查看 1.7K关注 0票数 8

我知道这个问题已经被问了无数次了,但我特别想要一个能够正确处理枚举的反编译器(因为我正在反编译的jar大量使用枚举)。我测试了JAD和JD-GUI都不支持。

有没有人推荐一个反编译器(理想情况下,它可以在Linux下工作,可以轻松地处理整个jar,而不需要我编写shell脚本)?

编辑:具体地说,我在构造方面遇到了一些问题:

代码语言:javascript
复制
switch(myEnum) {
case A: ...
case B: ...
}

它们被反编译(对于JAD和JD-GUI),如下所示:

代码语言:javascript
复制
switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) {
case 1:
case 2:
}

其中$SWITCH_TABLE$com$MyType()要么根本不声明,要么不编译。

EN

回答 2

Stack Overflow用户

发布于 2011-10-25 20:52:23

无法正确反编译枚举开关。java-classfile在编译后不知道enum-Typ,因此你的反编译器不能按你喜欢的方式反编译它。

枚举类型都是java.lang.Enum的一个子类型,每个枚举常量都有一个序号,这个序号用在switch语句中。编译器在int-value上进行切换,在枚举类型上进行切换简单地说就是语法糖。如果您尝试打开null-enum,则会收到NPE。

票数 2
EN

Stack Overflow用户

发布于 2013-11-15 20:58:09

我发现一个研究项目的产品CFR可以很好地处理枚举。

到目前为止,JD-GUI和JAD的性能并不比OP问题发布时更好,而CFR版本0.43生成了正确的、可编译的源代码,即使是在输入混淆的类时也是如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7874887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档