java - 如果所有从java源码编译出来的字节码都可以反编译成java源码呢?

标签 java bytecode decompiler

我看到一些 java 反编译器可以将字节码反编译为可读的 java 源代码,我想知道是否所有来自 java(而不是其他 JVM 语言)的字节码都可以再次反编译为 java 源代码?


更新

对不起,让我把问题说清楚。

就说JVM上正常的Java代码(没有Android,没有字节码增强,没有AOP,没有混淆),其实我希望字节码可以被反编译。但我不知道是否有编译成字节码的 java 代码形式,将永远无法反编译为可读的 java 源代码。

最佳答案

I wonder if all the bytecode which comes from java (not other JVM language) can be decompiled to java sources again?

答案是否定的

不保证反编译器适用于所有 Java 字节码:

  • 一个好的混淆器会故意重新排列字节码,这样普通的反编译器就不会产生可读的源代码……而且可能不会产生有效的 源代码。

  • 许多反编译器在处理较新的 Java 结构时都存在问题。

  • 许多反编译器在处理从“复杂”源代码编译的字节码时遇到问题。

  • 即使他们生成可编译代码,也不能保证代码是正确的。

底线是,反编译器的好坏取决于其作者的智慧和勤奋。我从未听说过完美的。

关于java - 如果所有从java源码编译出来的字节码都可以反编译成java源码呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736563/

相关文章:

java - 如何使用马尔可夫链生成句子?

java - ZonedDateTime 在 Spring App 中作为大纪元时间而不是标准字符串返回

java - Java ASM 方法的封面

java - 从 C 源代码到 Java 字节码?

java - 未在字节码中扩展 java.lang.Object。那么为什么编译器不将它添加到新版本的java中呢?

c# - 反编译动态创建的类/类型

.net - 属性 setter 中 Interlocked.Exchange 的简写

java - 赋予标签高亮效果——Java SWT

java - 如何通过java中的套接字发送html文件及其图像

java - 尝试在 Eclipse Luna 中运行反编译器