#import "ViewController.h"
#import "fishhook.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//指定交换的函数
struct rebinding nslog;
nslog.name = "NSLog";
nslog.replacement = myNSLog;
//fishhook 运行的时刻,动态的获取到NSLog的地址。
nslog.replaced = (void *)&sys_nslog;
//结构体数组
struct rebinding rebs[1] = {nslog};
/** 用于交换C函数
* arg1:存放rebinding结构体的数组
* arg2:
*/
rebind_symbols(rebs, 1);
}
//函数指针,用来保存原始的函数地址
static void(*sys_nslog)(NSString * format,...);
//C函数的名称,就是函数的指针!
//定义一个新的函数
void myNSLog(NSString * format,...) {
format = [format stringByAppendingFormat:@"------钩上了!!!!"];
//调用系统的函数
sys_nslog(format);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"点击了屏幕!");
}
@end
- 可以HOOK系统的C函数,但无法HOOK自定义的函数
- fishHook 无法交换自定义函数!!!,这个函数肯定是C函数,因为fishHook只能交换C函数
#import "ViewController.h"
#import "fishhook.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//结构体
struct rebinding funcd;
funcd.name = "func";
funcd.replacement = newFunc;
//fishhook 运行的时刻,动态的获取到NSLog的地址。
funcd.replaced = (void *)&funcP;
//结构体数组
struct rebinding rebs[1] = {funcd};
rebind_symbols(rebs, 1);
}
//函数的实现地址在MachO本地文件。
void func(const char * str) {
NSLog(@"%s",str);
}
//原始的函数指针
static void(*funcP)(const char *);
//新函数
void newFunc(const char * str) {
NSLog(@"勾住了");//指向的符号!!
funcP(str);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"点击了屏幕!");
}
@end
网友评论