4

我曾经认为Java可以被反编译,因为它编译成字节码而不是目标码。这是错误的,因为隐含的假设字节码比目标码“更易读”。为什么用 Java 编写的程序可以如此容易地被反编译,甚至具有相同的标识符(变量名)?听说C/C++只能反汇编成汇编,不能反编译成源代码,为什么呢?

4

1 回答 1

8

Java 编译器保留了大部分原始信息,并且在生成字节码时很少进行优化。编译器的任务是验证代码以便动态优化。注意:Excelisor 编译为本机代码,想象一下很难反编译(至少他们的营销人员说的是 ;)

C/C++尽可能的编译优化,丢弃了很多原有的信息。(调试信息除外)这使得解开合理的 C 或 C++ 变得更加困难。

注意:这些是这些语言常用的编译器的功能。不是语言本身的特征。

就语言的差异而言,你只能说Java与C++相比功能相对较差。更少的功能使得更少的编译模式难以理解和逆向工程。

于 2012-09-07T07:37:45.030 回答