在Objective-C Automatic Reference Counting (ARC)最后一个章节描述了runtime支持ARC的18个函数。我想跟踪这些函数的时候,发现有的是可以被fishhook有的是无法被fishhook的,因此现在把这18个函数列举出来并依次尝试是否可以fishhook。
测试代码:
// .m 文件
static id (*origin_objc_autorelease)(id);
id my_objc_autorelease(id value) {
printf("my_objc_autorelease\n");
return origin_objc_autorelease(value);
}
// 一个方法
+ (void)hook {
struct rebinding binds[1];
binds[0] = (struct rebinding){"objc_autorelease", my_objc_autorelease, (void*)&origin_objc_autorelease};
rebind_symbols(binds, 1);
}
剩余的17个函数都是类似的这种去测试。
测试的结果如下:
arc-fishhook.jpg
其中第18行(objc_storeStrong
)是无法进入这个函数,但是在那个进入的那一块出现了递归调用(也就是说无法printf中的字符串)
那些无法被调用的还没有研究明白如果有人知道了,欢迎留言讨论。
网友评论