为什么反编译Java代码这么容易?

use*_*502 49 java decompiling

所以我刚刚意识到反编译Java代码是多么容易.我一直在网上搜索,我似乎无法弄清楚为什么这么容易.我每次谷歌都会说"为什么我可以解压缩.class文件?" 或者"为什么Java反编译如此容易",我得到的只是软件的链接,可以轻松地反编译我的代码.所以我转向你StackOverflow:为什么Java可以转换回易于阅读的源代码,而C++和其他语言对反编译不是很友好?

谢谢

SLa*_*aks 58

因为Java字节码比汇编更接近(更相似)源.

特别是,.class文件包括类名,方法名,字段和参数类型等的元数据......
所有Java(或.Net)反编译器需要做的是查看每个方法体中的指令,并将它们转换为适当的语法.结构体.

相比之下,像C++这样的本地语言根本不包含任何元数据,因此反编译器需要重建所有内容.

  • 此外,java字节码没有像本机代码那样进行优化,因为java依赖于JITter来在执行时优化代码. (9认同)

dhg*_*dhg 22

Java被编译成中间形式JVM字节码,它保留了原始Java代码中包含的大量信息.像C++这样的语言编译成汇编代码,看起来与原始代码有很大不同,因此更难以反转.

  • +1.所以重点是字节码,而不是Java.Java可以编译成x86指令(http://www.excelsior-usa.com/jet.html,http://gcc.gnu.org/java/),然后像C++一样难以反编译. (5认同)