50

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

谢谢

4

2 回答 2

58

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

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

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

于 2012-09-16T20:37:44.173 回答
22

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

于 2012-09-16T20:39:01.447 回答