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();
我的约束是:
- 目的是解析项目的所有 classes,包括 jar,因此性能 很重要。
- 解析器必须解析 Java 8 .class 个文件
- Java 是我的主要语言,所以如果它在 Java.
中对我来说更好
当然我可以做一些编码,例如,如果输出是 xml 没关系。
这是我目前找到的选项 - none 令人满意:
- BCEL 或 ASM 看起来像是首选武器,但它们看起来也不再被维护了。此外,它们对我来说有点矫枉过正。
- Elipse AST 可以,但据我所知,它仅适用于源文件,我需要解析二进制文件(罐子...)
- 像antlr, yacc, bison这样的解析引擎的语法...可以,但是我还没有找到.class文件的参考语法!此外,antlr 用于文本文件,我不知道另一个参考 Java 解析器引擎(正如我所说,我想要一个更好的 Java 工具)。
- 我首先想到 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
我正在寻找可以将 .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();
我的约束是:
- 目的是解析项目的所有 classes,包括 jar,因此性能 很重要。
- 解析器必须解析 Java 8 .class 个文件
- Java 是我的主要语言,所以如果它在 Java. 中对我来说更好
当然我可以做一些编码,例如,如果输出是 xml 没关系。
这是我目前找到的选项 - none 令人满意:
- BCEL 或 ASM 看起来像是首选武器,但它们看起来也不再被维护了。此外,它们对我来说有点矫枉过正。
- Elipse AST 可以,但据我所知,它仅适用于源文件,我需要解析二进制文件(罐子...)
- 像antlr, yacc, bison这样的解析引擎的语法...可以,但是我还没有找到.class文件的参考语法!此外,antlr 用于文本文件,我不知道另一个参考 Java 解析器引擎(正如我所说,我想要一个更好的 Java 工具)。
- 我首先想到 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