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

时间:2015-02-27 23:41:30

标签: java .class-file

我正在寻找可以将.cl​​ass文件解析为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语言,对我来说会更好。
  4. 当然我可以做一些编码,所以例如如果输出是xml就可以了。

    所以这是我到目前为止找到的选项 - 没有一个令人满意:

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

2 个答案:

答案 0 :(得分:2)

我推荐ASM。从我所看到的,它是迄今为止最流行的Java字节码库,是的,它仍然保持着。在撰写本文时,它似乎是the most recent change 41天前。所以它并不是一直在搅拌,但它也不会被抛弃。有了这样一个常用的库,就很容易找到支持。

答案 1 :(得分:0)

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