我可以使用bytebuddy用自己的参数调用类的现有函数吗?

时间:2019-06-22 02:55:35

标签: java byte-buddy

在我正在玩的游戏中,我缩小了范围,当我用鼠标选择敌人后会发生功能AttackEnemy(int var)。

此事件发生时,我与几个字节预算代理一起工作,以查看函数名称和参数值。

但是我在用代理修改类时遇到问题,我无法与它的对象进行交互。最多我可以调用自己创建的静态函数。

例如,在这里我添加一个方法:

public static void myMethod() throws Exception {

   System.out.println("My generated method");
}

我可以在类上附加一个代理

public class Agent {

public static void premain(String arguments, Instrumentation instrumentation) {

    System.out.println("Agent for add a method ");

    new AgentBuilder.Default()
            .with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())

            .type((ElementMatchers.nameContains("myC")))
            .transform((builder, typeDescription, classLoader, module) -> builder
                    .defineMethod("myMethod", void.class, Visibility.PUBLIC)
                    .intercept(MethodDelegation.to(AddMethod.class))
                    .method(ElementMatchers.nameContains("method1"))
                    .intercept(SuperMethodCall.INSTANCE
                            .andThen(MethodCall.invoke(ElementMatchers.nameContains("myMethod"))))

            ).installOn(instrumentation);



}


}

但是就我对代理程序功能的了解而言。

如果我将MethodDelegation.to更改为(新的AddMethod())

我可以调用一个非静态方法,但是我仍然只能访问我创建的新类及其方法。

所以我在概念上确实失败了。

我要寻找的最终结果是我创建的类能够调用AttackEnemy(int var)函数或完全重新创建该函数,但是我当前的代理似乎只能在其自己的类中创建方法所以我不确定从哪里开始。

1 个答案:

答案 0 :(得分:0)

您可能正在寻找MethodDelegation,该方法允许您定义一个新类,该新类通过带注释的参数调度方法。您可以在类javadoc中找到详细信息。