【发布时间】:2018-01-04 19:05:16
【问题描述】:
我想知道反编译 Java 代码是什么意思。这是否意味着将本机代码翻译回字节码,然后再翻译为源代码?我还想知道在编译 java 程序时 RAM 扮演什么角色。反编译工具能获取内存中的原生代码吗?
【问题讨论】:
-
Java 编译器 ("
javac") 不会将 Java 源代码编译为二进制代码,而是编译为字节码。字节码是一种中介表示(.class-files)。编译过程确实需要一些内存,但不要太多。反编译是从字节码到java源代码的反向转换。根据 java 代码的编译方式,反编译或多或少是精确的(例如,变量名可以被混淆)。但是,有些信息会永久丢失。例如,字节码没有boolean、char、byte和short的类型。它们都表示为int。 -
如果你想对一些代码进行逆向工程,你应该阅读大量书籍。祝你好运。
-
@Turing85 所有字段、参数和返回类型的原始类型都被记录下来,如果可以的话,反编译必须推断出的只是局部变量(除非它是 long.float 或 double)
标签: java compilation decompiling