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

因此,我刚刚意识到反编译Java代码是多么容易。 我一直在网上搜索,似乎无法弄清楚为什么这么容易。 每次我在Google上搜索“为什么我要反编译.class文件?”之类的信息时, 或“为什么Java这么容易反编译”,我得到的只是指向可以轻松反编译我的代码的软件的链接。 因此,我向您介绍StackOverflow:为什么Java可以转换回容易阅读的源代码,而C ++和其他语言对反编译不是很友好?

谢谢

user818502 asked 2020-02-14T10:54:51Z
2个解决方案
58 votes

因为Java字节码比汇编程序更接近(更类似于)源代码。

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

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

SLaks answered 2020-02-14T10:55:18Z
22 votes

Java被编译成一种中间形式,即JVM字节码,它保留了原始Java代码中包含的大量信息。 诸如C ++之类的语言可编译为汇编代码,其外观与原始代码有很大不同,因此很难逆转。

dhg answered 2020-02-14T10:55:38Z
translate from https://stackoverflow.com:/questions/12450510/why-is-it-so-easy-to-decompile-java-code