Замена вызова метода Class.forName в ASM (встроенный) - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь перехватить загружаемые классы, заменив каждый вызов метода на Class.forName в том месте, где вызывается метод (обратный вызов в методе не является опцией). * 1001 то есть *

...
Class.forName(className);
...

заменяется на

...
Class.forName(MyProxy.call(className));
...

Моя проблема заключается в попытке сделать то же самое с методом Class.forName (String, boolean, ClassLoader). Моя идея заключается в следующем:

Class.forName (MyProxy.call (className), логическийParameter, classLoaderParameter)

Однако я не нахожу способ сделать это. Использование и invokeStatic не является опцией, поскольку Class.forName не будет работать должным образом, если классы защищены, например

1 Ответ

0 голосов
/ 13 сентября 2018

Благодаря предложению @Holger мне удалось найти решение, и наконец мой код заменяет:

...
Class.forName(className, booleanParameter, loader);
...

на

...
__callClassForName(className, booleanParameter, loader);
...

private static Class __callClassForName(String className, boolean bParameter, ClassLoader loader) {
    MyProxy.call(className);
    return Class.forName(className, bParameter, loader);
}
...