fishhook原理
在 iOS 中 AOP 的实现是基于 Objective-C 的 Runtime 机制,实现 Hook 的三种方式分别为:Method Swizzling、NSProxy 和 Fishhook。前两者适用于 Objective-C 实现的库,如 NSURLConnection 和 NSURLSession ,Fishhook 则适用于 C 语言实现的库,如 CFNetwork。
它是 Facebook 提供的一个动态修改链接 Mach-O 文件的工具。利用 MachO 文件加载原理,通过修改懒加载和非懒加载两个表的指针达到 C 函数 Hook 的目的。
__la_symbol_ptr is an array of pointers to imported functions that is generally filled by a routine called dyld_stub_binder during the first call to that symbol
所以 Fishhook 的原理,也是篡改内存中 __la_symbol_ptr 中的内容。把原本应该存 printf() 地址的那块内存,内容改为 my_printf() 地址。
https://www.jianshu.com/p/7d8922dadef3
我思故我在