Java Asm wrap новый экземпляр специфика c класса init - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу изменить указанную библиотеку 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
     */


}
...