- fishhook是facebook维护的一个开源的可以替换方法的库
fishhook的原理是:
当app加载进内存调用系统方法的时候,dyld 告诉app调用系统方法的地址,这个时候将调用方法的方法函数地址换成我们自己的方法就可以达到交换方法的目的。
hook的用法如下:
int (*p_strlen)(char *s);
int mystrlen(char *s){
// NSLog(@"1111");
return 999;
}
- (IBAction)fishHook:(id)sender {
NSLog(@"测试fishhook");
char *hookString = "good good study";
NSLog(@"%lu",strlen(hookString));
struct rebinding rebd;
rebd.name = "strlen";
rebd.replaced = (void*)&p_strlen;
rebd.replacement = mystrlen;
struct rebinding rebs[]= {rebd};
rebind_symbols(rebs, 1);
NSLog(@"%lu",strlen(hookString));
}
结果如下
2018-06-13 17:20:39.217093+0800 test[53965:923791] 测试fishhook
2018-06-13 17:20:39.217884+0800 test[53965:923791] 15
2018-06-13 17:20:42.360519+0800 test[53965:923791] 999