替换 ASM 中的 Class.forName 方法调用(内联)
Replacing Class.forName method call in ASM (inline)
我试图通过在调用方法的地方将每个方法调用替换为 Class.forName 来捕获正在加载的 类(方法中的回调不是一个选项)。即
...
Class.forName(className);
...
被
取代
...
Class.forName(MyProxy.call(className));
...
我的问题是尝试用 Class.forName(String, boolean, ClassLoader) 方法做同样的事情。我的想法是执行以下操作:
Class.forName(MyProxy.call(className), booleanParameter, classLoaderParameter)
但是,我找不到执行此操作的方法。使用和 invokeStatic 不是一个选项,因为如果 类 受到保护,Class.forName 将无法正常工作,例如
感谢@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);
}
我试图通过在调用方法的地方将每个方法调用替换为 Class.forName 来捕获正在加载的 类(方法中的回调不是一个选项)。即
...
Class.forName(className);
...
被
取代...
Class.forName(MyProxy.call(className));
...
我的问题是尝试用 Class.forName(String, boolean, ClassLoader) 方法做同样的事情。我的想法是执行以下操作:
Class.forName(MyProxy.call(className), booleanParameter, classLoaderParameter)
但是,我找不到执行此操作的方法。使用和 invokeStatic 不是一个选项,因为如果 类 受到保护,Class.forName 将无法正常工作,例如
感谢@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);
}