为什么反编译Java代码如此容易?[已关闭]
2022-08-31 20:34:42
所以我刚刚意识到反编译我的Java代码是多么容易。我一直在网上搜索,我似乎无法弄清楚为什么它如此容易。每次我用谷歌搜索“为什么我可以解压缩文件?”或“为什么Java如此容易反编译”之类的东西时,我得到的只是指向可以轻松解构我的代码的软件的链接。所以我转向StackOverflow:为什么Java可以转换回易于阅读的源代码,而C++和其他语言对反编译不是很友好?.class
谢谢
所以我刚刚意识到反编译我的Java代码是多么容易。我一直在网上搜索,我似乎无法弄清楚为什么它如此容易。每次我用谷歌搜索“为什么我可以解压缩文件?”或“为什么Java如此容易反编译”之类的东西时,我得到的只是指向可以轻松解构我的代码的软件的链接。所以我转向StackOverflow:为什么Java可以转换回易于阅读的源代码,而C++和其他语言对反编译不是很友好?.class
谢谢
因为 Java 字节码比程序集更接近(更相似)源代码。
特别是,文件包括类名,方法名称,字段和参数类型等的元数据。
Java(或.Net)反编译器需要做的就是查看每个方法体中的指令,并将它们转换为适当的语法构造。.class
相比之下,像C++这样的本地语言根本不包含任何元数据,因此反编译器需要重构所有内容。
Java被编译成一种中间形式,即JVM字节码,它保留了原始Java代码中包含的大量信息。像C++这样的语言编译成汇编代码,看起来与原始代码有很大不同,因此更难逆转。