首页
社区
课程
招聘
[求助]unidbg模拟执行JNI_OnLoad完成后,如何等待JNI_OnLoad中创建的子线程执行完成?
发表于: 2025-9-23 18:27 576

[求助]unidbg模拟执行JNI_OnLoad完成后,如何等待JNI_OnLoad中创建的子线程执行完成?

2025-9-23 18:27
576

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 被阿耿编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 6437
活跃值: (6027)
能力值: ( LV5,RANK:76 )
在线值:
发帖
回帖
粉丝
2
如果子线程没有死循环的话,可以让cpu执行尽可能多一些指令后再切换,这样子你后续执行了一些代码,再切换到子线程,就可以吧子线程的所有代码执行完毕了。如果执行的指令太少就切换,才会频繁的切换了。另外创建了子线程,还是需要需要一些指令的执行其他的模拟执行,他才回触发,毕竟会按照你设置的切换大小来进行cpu上下文的切换
2025-9-24 11:21
0
游客
登录 | 注册 方可回帖
返回