是时候发布新版本了,本次在 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_statestub 并破坏后续的__dl_seterr,而是挂钩链接器的调用点。 - ci:将 GitHub Actions 的使用从已弃用的 Node.js 20 运行时上迁移。
- barebone, compiler:将
@types/frida-gum升级到 19.7.0。
oleavr