是时候发布新版本了,本次在 Gum 和我们的动态链接器集成中带来了一些令人兴奋的改进:

  • gumjs:添加 Process.getThreadById() 和 Process.findThreadById(),底层由新的原生 find_thread_by_id() API 支持,可按 ID 查找单个线程,无需枚举所有线程。
  • gumjs:添加 Process.getFunctionRange(),这是一个便捷包装器,与现有 findFunctionRange() 匹配,它会抛出异常而不是返回 null。
  • gumjs:修复附加线程观察器时的线程枚举死锁。现在我们会在执行原生枚举时释放 JS 运行时锁,并在之后构建 JS 对象。
  • gumjs:将剩余通过字符串拼接生成的查找错误现代化为模板字符串。
  • darwin:重做现代 dyld 的模块观察。近期 dyld 会在受保护栈上持有加载器写锁时调用其映像加载通知器,这意味着观察器无法安全地回调 dyld。我们现在为 FULL teardown 使用常驻的 _dyld_register_func_for_add_image() trampoline,在脱离写锁的普通栈上交付,并挂钩 RuntimeState::decDlRefCount 以处理移除。
  • darwin:无需 dlopen() 即可解析模块导出。这避免在 dyld 仍在加载映像时强制运行模块初始化器,包括 Objective-C +load。
  • linux:修复 musl RTLD 通知器挂钩。我们不再内联挂钩只有一条指令的 _dl_debug_state stub 并破坏后续的 __dl_seterr,而是挂钩链接器的调用点。
  • ci:将 GitHub Actions 的使用从已弃用的 Node.js 20 运行时上迁移。
  • barebone, compiler:将 @types/frida-gum 升级到 19.7.0。