如何反编译 java class 文件?

How do I decompile a java class file?

我知道有人问过类似的问题,但没有人回答如何用 java 反编译 java class。我想在 java 中制作一个 java 反编译器,但我不知道如何获取 class 文件的内容并将其转换为 java 文件。

我很确定我能够打开一个 jar 文件并查看它的内容,但我的问题是如何反编译 jar 中的 class 文件?我不需要反编译器;我想自己做。

我假设 java 的每个编译器都以相同的方式加密代码,我只想知道那是什么或如何反转它。我不太了解 java 代码是如何编译的,但我很确定它与 jdk 开发人员工具包有关。

假设我将整个 class 加载到一个字节数组中。我如何将字节数组转换为可读代码。

我现在有一个 java 反编译器,但它是一个可执行文件,所以我不能反编译它,看看它是如何完成的。

我知道回答这个问题需要很多信息,而且我对 Java 如何编译 java 文件知之甚少,所以如果你能指出我正确的地方学习 java 如何编译东西的方向。 您能否简单地 post 链接到教程或我应该阅读的内容以了解如何反编译 class 或 java 如何首先编译 classes ?

我将从调查 class file format 开始。构建一些东西来解析它的结构并从那里跳进去。

当你最终编写处理code attributes in the class file, all of the bytecode for a given method will be in an array. From there you'd start applying the JVM specification如何反编译特定指令的代码时。

也有 libraries 已经提供了很多这样的功能,并且可以帮助您 bootstrap 自己。