距离上一次大版本升级已经有一段时间了。这一次,我们解决了一个长期存在的 问题:64 位整数此前被表示为 JavaScript Number 值。由于底层表示形式是 双精度浮点数,这意味着超过 53 位的值会出现问题。

Memory、NativeFunction 和 NativeCallback API 中的 64 位类型 现在会由新引入的 Int64 和 UInt64 类型正确表示,它们的 API 与 NativePointer 几乎完全一致。

现在让我们祈祷 int64/uint64 能够进入 ES7。

最后,这里汇总一下各项变更:

7.0.0:

  • core:重新设计 64 位整数的处理方式
  • core:提高构造函数的严格程度
  • core:改进 QNX 支持
  • frida-repl:更新徽标

7.0.1:

  • core:修复 32 位架构上 Int64/UInt64 字段容量的问题

7.0.2:

  • core:允许将 Int64 和 UInt64 原样传给所有相关 API
  • core:修复 ObjC 实例上 $protocols 的处理

7.0.3:

  • core:修复监听器在调用途中被销毁的竞态条件
  • core:修复嵌套原生异常作用域的处理
  • core:改进 QNX 支持
  • frida-repl:微调启动消息

7.0.4:

  • core:大幅提高 32 位 ARM 上函数 Hook 的成功率
  • core:提高 64 位 ARM 上函数 Hook 的成功率
  • core:修复 Interceptor 在 32 位 ARM 上暴露的 sp 值

7.0.5:

  • core:生成 iOS 应用并等待 Device#resume() 时运行主 CFRunLoop, 从而可在主线程应用对线程敏感的早期插桩

7.0.6:

  • core:修复 32 位 ARM 上半字对齐函数的 Hook
  • core:修复 Linux 上的线程枚举
  • core:为 Script 运行时添加简单的 hexdump() API
  • core:使 Duktape 运行时的 CpuContext 可序列化为 JSON

7.0.7:

  • core:允许向 hexdump() 传入 NativePointer

7.0.8:

  • core:修复 retval.replace() 对包装对象的处理
  • core:修复指定大小时 Memory.readUtf8String() 的行为
  • core:支持 iOS 9.1 越狱中的新 task_for_pid(0) 方法
  • core:不再使用某些处理器的 ARM 模式中不可用的 cbnz
  • core:为 QNX 实现 enumerate_threads() 和 modify_thread()

7.0.9:

  • core:修复 FridaGadget.dylib 在 iOS 上配合 ios-deploy 以及其他 先于 CoreFoundation 加载我们的环境运行时发生的早期崩溃
  • core:在 Darwin 上 frida-helper 的主线程中运行 CFRunLoop, 使系统会话脚本能够使用更多 Apple API
  • core:添加用于处理 GIO 流的流式 API,目前仅通过 UnixInputStream 和 UnixOutputStream(UNIX),以及 Win32InputStream 和 Win32OutputStream(Windows)公开

7.0.10:

  • core:修复存在待处理 I/O 操作时卸载脚本导致的死锁

7.0.11:

  • core:FridaGadget.dylib 阻塞等待 Device#resume() 时运行主 CFRunLoop, 从而可在主线程应用对线程敏感的早期插桩
  • java:修复方法类型的健全性检查

祝你使用愉快!