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

问题描述 投票:0回答:1

我试图通过在调用方法的地方替换每个方法调用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将无法正常工作

java bytecode java-bytecode-asm
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.