这个版本修复了影响 Apple 平台用户的两个稳定性问题:

  • interceptor:在 Darwin 上暂停与恢复之间保持线程端口存活。我们借用了 enumerate_threads() 返回的 Mach 线程端口权限名称,并假设存在另一个引用让每个端口保持存活。当事实并非如此时,最好的情况是把无效的 Mach 端口权限名称传给 thread_resume(),最坏的情况则是使用一个完全无关的端口。无论如何,我们都会让这些线程永久保持暂停。感谢 @mrmacete!
  • agent:在独立事务中释放 ThreadSuspendMonitor。由于 Interceptor 依赖 ThreadSuspendMonitor 直通,在独立事务中、并且在销毁时使用 Interceptor 的所有其他组件之后释放它,可以确保没有 Frida 线程会在销毁阶段尝试执行不可执行页面上的代码。感谢 @mrmacete!