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

 

 




posted @ 2021-04-08 15:10  zzfx  阅读(803)  评论(0编辑  收藏  举报