替换ASM中的Class.forName方法调用(内联)

时间:2018-09-12 04:23:52

标签: java bytecode java-bytecode-asm

我试图通过在调用方法的地方替换每个对Class.forName的方法调用来捕获正在加载的类(该方法中的回调不是一种选择)。即

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

替换为

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

我的问题是尝试使用Class.forName(String,boolean,ClassLoader)方法执行相同操作。我的想法是执行以下操作:

Class.forName(MyProxy.call(className),booleanParameter,classLoaderParameter)

但是,我找不到解决办法。不能使用using和invokeStatic,因为如果例如保护类,Class.forName将无法正常工作

1 个答案:

答案 0 :(得分:1)

由于@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);
}