任何高级字节码编辑器?

时间:2011-10-15 16:49:29

标签: java scala reflection bytecode

假设我在Scala中有以下内容

object Foo {
  var functions: List[String => String] = Nil // can be any type to any type.
  def addFunc(f:String => String) = functions = f :: functions
}

在运行时,我被赋予Foo并添加了一些功能。我现在想要构建一个新的.class文件,在Scala中实现类似跟随的内容:

object MyObject { 
  def process1(s:String) = // call Foo.functions(1)
}

然后我想将MyObject保存在字节码中,即使Foo不存在,也可以在以后执行。

上面只是一个展示我想要做的事情的例子。我被赋予了MyObjectprocess1的名称,我必须生成一个可执行文件MyObject.class。不需要MyObject的来源(它可能是Java源代码)。

因此,在高层次上,我们需要获取Foo.function(1)的内存“快照”,将该快照转换为字节码进行存储,并使用此生成MyObject的字节码。

我发现的所有字节码工程库都太低级了,所以我想知道是否有更高级别的库可以让我处理抽象对象,如函数等。

2 个答案:

答案 0 :(得分:6)

你看过ASM的树模型吗?我之前只使用过Event模型,但树听起来就像你正在寻找的那样。您可以在ASM user guide的1.2.2节中找到概述(PDF - 我认为没有HTML版本,或者我会将其链接)。

答案 1 :(得分:0)

我还会推荐ASM框架。 AOSD'07有一篇关于用ASM实施common bytecode transformation patterns的论文。 “将两个类合并为一个”和“内联方法”这一部分描述了非常接近你的字节码转换。