Java委托调用BCEL / ASM

时间:2011-12-07 14:19:54

标签: java reverse-engineering code-injection bcel

你好亲爱的SOF成员!

我在寻找什么? 我一直在网上搜索和搜索如何在类上实现/注入接口(当然已经编译)并通过类上的接口添加所需的方法。我也一直在努力学习BCEL和ASM,但我的资源很少(即使和我亲爱的朋友谷歌),所以我希望我能在这里找到帮助!我不期待你用勺子喂我或其他任何东西,但我需要一些方向! :)我知道ASM网站上的那本伟大的书以及关于它们的一切的很多教程但是我无法弄明白我怎么可能像我之前所说的那样添加它的界面/方法。 我尝试了什么? 我找到了这个链接here,但它没有像我预期的那样成功。 我确切地知道我想做什么,但我不知道我怎么能实现它.. 继承人的例子!

public class Cat {
 public int age;
}

public interface Animal {
 public int getAge();
}

继承人实施该方法:

public int getAge(){
 return age;
}

亲爱的SOF成员,这将如何解决?

1 个答案:

答案 0 :(得分:0)

我对BCEL有一些经验,你想要的是从一个自定义类加载器开始,它检测你要重新定义的类;为每个这样的类获取BCEL JavaClass对象(使用f.e.ClassLoaderRepository),然后根据自己的喜好修改该类。完成后,从JavaClass获取类文件,并使用ClassLoader#defineClass将其传递给JVM进行定义。

现在,为了实现实际的方法,我建议编写一个包含代码的测试类,然后在生成的类文件上运行BCELifier,它将打印出生成该类文件所需的Java BCEL源代码。检查它并根据自己的喜好复制粘贴。