Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(二)

在这里插入图片描述

概览

我们在第一篇博文:

  • 《Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)》

中讨论了 Swift 语言中的钩子(Hook)机制,以及如何用它来“勾”住 NSObject 的 init 构造器方法。

在这里插入图片描述

不过,目前“疑云重重”的实现显然“虐”的你在一直“怀疑人生”。而在本篇的讨论中我们来看看第三方 SwiftHook 库是如何“化腐朽为神奇”来完成这个“不可能任务”的。

在本篇博文中,您将学到如下内容:

  • 概览
  • 3. 第三方解决之道 SwiftHook 凭什么可以?
  • 4. 为什么尝试 print 会崩溃?
  • 5. 迂回战术:让 print 成为可能!
  • 总结

在下一篇中我们将讨论如果不用 SwiftHook 库,自己撸码实现相似的功能会经历怎样的“磨难”。

那么,让我们马上开始本篇的 Hook 大冒险吧!Let’s go!!!????


3. 第三方解决之道 SwiftHook 凭什么可以?

SwiftHook 库是一个 Swift 语言中通用 Hook 功能的解决方案。它在 github 中的地址为:

  • GitHub:SwiftHook 包

在这里插入图片描述


想要了解更多 SwiftHook 库使用案例的小伙伴们,请移步我下面的博文一探究竟:

  • SwiftUI 如何在运行时从底层动态获取任何 NSObject 对象实例

好奇的我们迫不及待的想知道:如果用 SwiftHook 库实现之前的代码也会“死得很惨”吗?

class func tryHookNSObjectInit2() {
   
    let oldInitSel = #selector(NSObject.init)
    
    _ = try! hookAfter(targetClass: NSObject.self, selector: oldInitSel) {
    obj, sel in
        let address = Unmanaged.passRetained(obj).toOpaque()
        print
上一篇:VScode中C++里Compile&Debug(win&linux)


下一篇:MySOL数据库管理