为什么反编译Java代码很容易?
所以我刚刚意识到反编译我的Java代码是多么容易。 我一直在寻找networking,我似乎无法弄清楚为什么这么容易。 每次我谷歌的东西,如“为什么我可以分解.class
文件? 或者“为什么Java如此轻松地反编译”,我所得到的只是能够轻松地解密我的代码的软件链接。 所以我转向你StackOverflow:为什么Java可以被转换回易于阅读的源代码,而C ++和其他语言不是很友好的反编译?
谢谢
由于Java字节码与程序集相比距离源更近(更类似)。
特别是.class
文件包括类名称,方法名称,字段和参数types等的元数据。
所有的Java(或.Net)反编译器都需要查看每个方法体中的指令,并将它们转换为合适的语法结构。
相比之下,像C ++这样的本地语言根本不包含任何元数据,所以反编译器需要重构所有的东西 。
Java被编译成中间forms的JVM字节码,它保留了原始Java代码中包含的大量信息。 像C ++这样的语言编译成汇编代码,看起来与原始代码有很大的不同,因此很难反转。