Java 二进制 (.class) 文件格式解析器?

Java binary (.class) file format parser?

我正在寻找可以将 .class 文件解析为 Java 对象的工具(或工具链)。像 :

JavaClass parsed = myTool.parse("/some_folder/SomeClassFile.class");

解析后的对象会有如下方法:

List<JavaMethod> methods = parsed.getMethods();
List<JavaInterface> interfaces = parsed.getImplementedInterfaces();
List<JavaMethod> calls = someMethod.getCalls();

我的约束是:

  1. 目的是解析项目的所有 classes,包括 jar,因此性能 很重要。
  2. 解析器必须解析 Java 8 .class 个文件
  3. Java 是我的主要语言,所以如果它在 Java.
  4. 中对我来说更好

当然我可以做一些编码,例如,如果输出是 xml 没关系。

这是我目前找到的选项 - none 令人满意:

  1. BCEL 或 ASM 看起来像是首选武器,但它们看起来也不再被维护了。此外,它们对我来说有点矫枉过正。
  2. Elipse AST 可以,但据我所知,它仅适用于源文件,我需要解析二进制文件(罐子...)
  3. 像antlr, yacc, bison这样的解析引擎的语法...可以,但是我还没有找到.class文件的参考语法!此外,antlr 用于文本文件,我不知道另一个参考 Java 解析器引擎(正如我所说,我想要一个更好的 Java 工具)。
  4. 我首先想到 class 加载程序 可以完成这项工作,我可以只加载 class 然后使用反射。但实际上我意识到我需要 Java 反射 api 不提供的东西,比如从特定方法获取调用。

这就是我现在所在的位置!预先感谢您的帮助!

我推荐 ASM。据我所知,它是迄今为止最受欢迎的 Java 字节码库,是的,它仍在维护中。在撰写本文时,the most recent change 似乎是 41 天前。所以它不会一直搅动,但也不会被遗弃。而且有这么常用的库,应该很容易找到支持。

我为 JBBP 做了一些解析 java class 的测试,看看它,可能对你有用 https://github.com/raydac/java-binary-block-parser/blob/master/src/test/java/com/igormaznitsa/jbbp/it/ClassParsingTest.java