gpt4 book ai didi

java - 是否可以 Hook 线程创建?

转载 作者:行者123 更新时间:2023-12-04 07:19:43 24 4
gpt4 key购买 nike

我正在制作一个插件系统,我需要查看插件何时调用 Thread.start()
是否有类似于 Runtime.getRuntime().addShutdownHook 的方法,但用于在线程启动时进行 Hook ?

最佳答案

字节曼
您可以使用Byteman将您自己的代码注入(inject)到 thread.start() 方法中。
事实上,在他们的网站上使用 Byteman 和 JVM 类的第一个示例是展示如何在线程启动时打印到控制台。
他们教程中的 Byteman 脚本示例:

RULE trace thread start

CLASS java.lang.Thread

METHOD start()

IF true

DO traceln("*** start for thread: "+ $0.getName())

ENDRULE
https://developer.jboss.org/docs/DOC-17213#how_do_i_inject_code_into_jvm_classes进一步的实现细节。

字节好友
如果您不喜欢 Byteman,那么还有另一个名为 ByteBuddy 的库。可用于创建 Java Agent拦截 Thread 类中的方法。
public class ThreadMonitor {
@RuntimeType
public static Object intercept(@Origin Method method,
@SuperCall Callable<?> callable) {
System.out.println("A thread start method called");
return callable.call(); //Calling the original start method.
}
}

public class ThreadMonitorAgent {
public static void premain(String arguments,
Instrumentation instrumentation) {
new AgentBuilder.Default()
.type(ElementMatchers.nameEndsWith("start"))
.transform((builder, type, classLoader, module) ->
builder.method(ElementMatchers.any())
.intercept(MethodDelegation.to(ThreadMonitor.class))
).installOn(instrumentation);
}
}
示例代码改编自 ByteBuddy github readme .

关于java - 是否可以 Hook 线程创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68584037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com