网站规划的基本内容有哪些,wordpress手机版 403,美轮美奂的网站建设,广州教育网站设计公司OC类如果通过runtime被hook了#xff0c;可以通过逆序遍历方法列表的方式调用原方法。 那系统库的C函数被fish hook了该怎么办呢#xff1f;
原理和OC类异曲同工#xff0c;即通过系统函数dlopen()获取动态库#xff0c;以动态库为参数通过系统函数dlsym()即可获取目标系统…OC类如果通过runtime被hook了可以通过逆序遍历方法列表的方式调用原方法。 那系统库的C函数被fish hook了该怎么办呢
原理和OC类异曲同工即通过系统函数dlopen()获取动态库以动态库为参数通过系统函数dlsym()即可获取目标系统C函数的原始地址。
可以对比获取到的函数地址与当前函数地址即可判断该函数是否被hook了也可以直接调用获取到的函数。
#import fishhook.h
#include dlfcn.h
#include mach-o/dyld.h//原函数指针变量
static void (*ori_dyld_image_count)(void);//hook新函数
void hook_dyld_image_count() {NSLog(hook func called);return ori_dyld_image_count();
}// struct rebinding rebs[] {{_dyld_image_count, hook_dyld_image_count, (void *)ori_dyld_image_count}};
// rebind_symbols(rebs, 1);void *handler dlopen(/usr/lib/system/libdyld.dylib, RTLD_DEFAULT);
void *ori dlsym(handler, _dyld_image_count);if (ori _dyld_image_count) {NSLog(is same);
} else {NSLog(is no same);
}// 通过如下方式打印所有动态库路径
uint32_t count _dyld_image_count();
for (int i 0; i count; i) {const char* name _dyld_get_image_name(i);NSLog(%s, name);
}