如何使用ASM库将二进制指令映射回语句或表达式?

时间:2010-11-19 08:47:00

标签: java parsing bytecode java-bytecode-asm

我正在尝试将java字节码解析为中间数据结构供以后使用。我偶然发现了ASM。它强大而稳定。但是,我很难将二进制指令转换回正常的java表达式和语句。有人能指出我的方向吗?

交易数据结构可能如下所示:

ClassInfo
- FieldInfo
- MethodInfo
-- ForLoopStatement
-- WhileStatement
--- AssignmentExpression
--- FunctionCallExpression
...

基本上它只不过是java语言的抽象。

谢谢。

2 个答案:

答案 0 :(得分:2)

在db4o,我们使用具有讽刺意味的BLOAT library来从方法体中检索完全构造的AST。它对我们来说运作良好,但它不是基于ASM。

答案 1 :(得分:1)

为什么不保留Java字节码,如果你需要一个人类可读的形式,只需反汇编它?至少你的问题并不清楚为什么Java字节码本身不能成为用于存储的中间数据结构。

官方Java SDK发行版有一个名为 javap 的工具,可将字节码转换回Java源代码。同一工作的另一个选择是 javad