这次带来了一些令人兴奋的稳定性改进:

  • darwin:让 spawn() 感知 iOS >= 15 使用的 prewarm 功能。具体情况是, dasd 会提前启动最常用的应用,并将其保持在暂停状态,直到用户尝试启动, 以节省一些启动时间。这会妨碍 Frida 的 spawn 机制,因为:
    • 以这种方式启动的应用不会在预期时间经过 launchd,导致“timeout was reached”错误, 或更复杂的竞态条件
    • Frida 需要启动全新进程,以确保能够进行早期插桩

    我们通过以下方式解决这些问题:

    • 忽略 launchd agent 中的 prewarm spawn(但如果启用了 spawn gating,它们仍会作为 spawn 发出)
    • 尝试启动应用前,先终止已存在的预热应用 感谢 @mrmacete!
  • glib:确保 {Input,Output}Stream 仅在可轮询时才调用 g_poll()。这对 Apple 操作系统和 BSD 至关重要,因为 GLib 在这些系统上使用 kqueue 实现 GMainContext;否则,当文件描述符代表普通文件时, 它可能永远等待下去。感谢 @hsorbo!
  • android:通过改进 libffi 以避免有问题的重定位,修复 x86 devkit。
  • gadget:修复 Windows 进程终止期间的死锁。感谢 @Palacee-hun 报告!