Я новичок в bytebuddy. Я попытался перейти по ссылке здесь, чтобы использовать системный класс java, java.lang.String, но безуспешно. Ниже приведен код,
AgentBuilder agentBuilder = new AgentBuilder.Default()
.ignore(ElementMatchers.nameStartsWith("net.bytebuddy."))
.enableBootstrapInjection(instrumentation, temp);
agentBuilder
.type(ElementMatchers.nameEndsWith(".String"))
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule) {
return builder.method(ElementMatchers.nameContains("toString")).intercept(MethodDelegation.to(MyInterceptor.class));
}
}).installOn(instrumentation);
public static class MyInterceptor {
public static String intercept(@SuperCall Callable<String> zuper) throws Exception {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!! Hacking!!!!!!!!!!!!!!!!!!!!!!!!!");
return zuper.call();
}
}
из журнала ByteBuddy, похоже, класс был преобразован.
[Byte Buddy] DISCOVERY java.lang.String [null, null, loaded=true]
[Byte Buddy] TRANSFORM java.lang.String [null, null, loaded=true]
[Byte Buddy] COMPLETE java.lang.String [null, null, loaded=true]
После инструментария, когда я вызываю toString, например,
system.out.println ("testString".toString());
Я ожидаю увидеть,
"!!!!!!!!!!!!!!!!!!!!!!!!!! Hacking!!!!!!!!!!!!!!!!!!!!!!!!!"
"testString"
Однако я видел только
"testString"
Пожалуйста, дайте мне знать, в чем проблема. Спасибо вперед.