fishHook是Facebook提供的一个动态修改连接Mach-O文件的工具。利用Mach-O文件的加载原理,通过修改懒加载和非懒加载两个表(通过MachOView查看Mach-O文件)的指针达到C函数HOOK的目的。 fishHook地址:https://github.com/facebook/fishhook
rebind_symbols 函数和 rebind_symbols_image 函数是用来 HOOK 函数的两个方法,只不过参数不同而已,后者多了一个mach-O的header和slide偏移量,开发中经常使用第一个方法。
回到第一个方法,struct rebinding rebindings[]:需要传递一个rebinding结构体类型的数组,第二个参数是这个数组的个数。
我们再来看看rebinding结构体的定义
看完方法的介绍,我们再来实际运用一下
使用facehook去Hook一个懒加载或非懒加载表中的函数需要三个步骤,举例我们要hook系统的NSLog函数
1.创建一个指针保存原始函数的地址
2.创建一个新函数,用来hook原始函数
3.使用fishhook进行交换,需要一个rebinding的数组和数组的长度
之后点击屏幕,在touchesBegan:withEvent: 打印"点击屏幕",控制台的输出