-
-
[求助]unidbg模拟执行JNI_OnLoad完成后,如何等待JNI_OnLoad中创建的子线程执行完成?
-
-
[求助]unidbg模拟执行JNI_OnLoad完成后,如何等待JNI_OnLoad中创建的子线程执行完成?
1.已经启用多线程
1 | emulator.getSyscallHandler().setEnableThreadDispatcher(true);
|
2.通过hook_add_new进行执行跟踪
1 | emulator.getBackend().hook_add_new(new CodeHook() {...});
|
a.如果只是模拟调用onload,
1 | dm.callJNI_OnLoad(emulator);
|
执行完后整个流程就结束了,并不会切换到子线程去执行。
b.在onload后面,再加一个模拟调用
1 2 3 | dm.callJNI_OnLoad(emulator);
ret = Native.callStaticJniMethodInt(emulator, "c()I");
System.out.printf("Native.c() = %d\n", ret);
|
这个时候,onload中创建的子线程就可以执行到。
难道是由于这个c函数代码比较多?这样子线程就有时间片切换过去?
如果说框架是根据cpu调度的话,如何在onload执行完后,如何等待这个子线程执行?或者有其他方法去触发未完成的子线程继续执行?还是说这个目前不可控?
另外:在onload后面sleep是没有用的,这样休眠的是框架自己的线程,没有用的
1 2 | dm.callJNI_OnLoad(emulator);
Thread.sleep(5000);
|
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-9-23 18:36
被阿耿编辑
,原因: