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



我正在寻找一种可以将.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. 目的是解析项目的所有类,包括jar,因此性能确实很重要
  2. 解析器必须解析Java 8.class文件
  3. Java是我的主要语言,所以如果是Java对我来说更好

当然,我可以做一些编码,所以例如,如果输出是xml,那就可以了

因此,以下是我迄今为止发现的选项——没有一个是令人满意的:

  1. BCEL或ASM看起来是首选武器,但它们看起来也不再维护。此外,它们对我来说有点过头了
  2. Elipse AST可以工作,但据我所见,它只适用于源文件,我需要解析二进制文件(jar…)
  3. 解析引擎(如antlr、yacc、bison)的语法。。。可以,但我还没有找到.class文件的参考语法!此外,antlr用于文本文件,我不知道还有其他参考Java解析器引擎(正如我所说,我更喜欢Java工具)
  4. 我最初认为类加载器可以完成这项工作,我可以加载类,然后使用反射。但事实上,我意识到我需要Java反射api没有提供的东西,比如从特定方法获得调用

所以我现在就在这里!提前感谢您的帮助!

我推荐ASM。据我所见,它是迄今为止最流行的Java字节码库,是的,它仍然得到维护。在撰写本文时,最近的变化似乎发生在41天前。所以它并没有不断地翻腾,但也不像是被抛弃了。有了这样一个常用的库,支持应该很容易找到。

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

最新更新