这次带来了一些令人兴奋的稳定性改进:
- 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 报告!
oleavr