Я хочу изменить указанную библиотеку c с помощью ASM для регистрации или изменения содержимого. Просто я создаю пример выше по двум методам, например.
Я хочу преобразовать realMethod в iWantAsLikeThis метод с ASM.
Обычно добавляется как INVOKESTATIC asmTest/Testt.logGet (Ljava/net/URL;)Ljava/net/URL;
достаточно кода, но иногда его недостаточно, так как внизу я выделяю ______ , и это похоже на DUP
и POP
и, возможно, другие вещи для разных кодов.
Так что я могу сделать для обертки generi c для изменения классов указанных библиотек c.
Примечание: я не хочу изменять метод constructer (<init>
), я хочу изменить использование его.
public class Testt {
public void realMethod() throws Exception {
URL u1 = new URL("http://1.1.1.1");
URL u2 = new URL("http://2.2.2.2");
System.out.println(u1);
}
public void iWantAsLikeThis() throws Exception {
URL u1 = logGet(new URL("http://1.1.1.1"));
URL u2 = logGet(new URL("http://2.2.2.2"));
System.out.println(u1);
}
public static URL logGet(URL u) {
System.out.println(u.getHost());
return u;
}
/**
* NEW java/net/URL
* DUP
* LDC "http://1.1.1.1"
* INVOKESPECIAL java/net/URL.<init> (Ljava/lang/String;)V
* _________INVOKESTATIC asmTest/Testt.logGet (Ljava/net/URL;)Ljava/net/URL;
* ASTORE 1
* NEW java/net/URL
* _________DUP
* LDC "http://2.2.2.2"
* INVOKESPECIAL java/net/URL.<init> (Ljava/lang/String;)V
* _________INVOKESTATIC asmTest/Testt.logGet (Ljava/net/URL;)Ljava/net/URL;
* _________POP
* GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
* ALOAD 1
* INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/Object;)V
* RETURN
* MAXSTACK = 3
* MAXLOCALS = 2
*/
}