fishhook 支持ARC的18个函数初步探究

在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中的字符串)

那些无法被调用的还没有研究明白如果有人知道了,欢迎留言讨论。

你可能感兴趣的:(fishhook 支持ARC的18个函数初步探究)