fishhook简介
C 语言往往会给我们留下不可修改的这一印象,而 fishhook 是一个由 facebook 开源的第三方框架,其主要作用就是动态修改 C 语言函数实现。
这个框架的代码其实非常的简单,只包含两个文件:fishhook.c 以及 fishhook.h;两个文件所有的代码加起来也不超过 300 行。不过它的实现原理是非常有意思并且精妙的
fishhook 提供非常简单的两个接口以及一个结构体:1
2
3
4
5
6
7
8
9
10
11struct rebinding {
const char *name;
void *replacement;
void **replaced;
};
int rebind_symbols(struct rebinding rebindings[], size_t rebindings_nel);
int rebind_symbols_image(void *header,intptr_t slide,
struct rebinding rebindings[],
size_t rebindings_nel);
我们可以从 fishhook 提供的demo中上手实践一下,这里的demo对 close 进行修改:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45//main.m
#import
#import "AppDelegate.h"
#import "dlfcn.h"
#import "fish