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

时间:2012-09-16 20:35:57

标签: java decompiling

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

由于

2 个答案:

答案 0 :(得分:57)

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

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

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

答案 1 :(得分:21)

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