我正在寻找一种在 JVM 类文件和文本表示之间往返并再次返回的故障安全方法。
一个严格的要求是,只要文本表示保持不变,生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同。
此外,文本表示必须是人类可读和可编辑的。应该可以对文本表示进行小的更改(例如更改文本字符串或类名等),这些更改会反映在生成的类文件表示中。
最简单的解决方案是使用 Java 反编译器(例如 JAD)来生成文本表示,在这种情况下,它只是重新创建的 Java 源代码。然后使用 javac 生成字节码。但是,鉴于免费 Java 反编译器的状态,这种方法并非在所有情况下都有效。创建无法在完整的往返类文件/java-source/class-file 中存活的混淆字节码是相当容易的(部分原因是 JVM 字节码和Java 源代码)。
鉴于上述要求,是否有一种故障安全的方法来实现 JVM 类文件/文本表示/类文件往返?
更新:在回答之前 - 通过阅读上述所有要求来节省时间和精力,并特别注意:
- “JVM 字节码的文本表示”不一定意味着“Java 源代码”。