+ (void)load {
struct rebinding exchange;
exchange.name = "method_exchangeImplementations";
exchange.replacement = my_exchange;
exchange.replaced = (void *)&sysExchangePoint;
struct rebinding get;
get.name = "method_getImplementation";
get.replacement = my_get;
get.replaced = (void *)&sysExchangePoint;
struct rebinding set;
set.name = "method_setImplementation";
set.replacement = my_set;
set.replaced = (void *)&sysExchangePoint;
struct rebinding bds[] = { exchange, get, set };
rebind_symbols(bds, 3);
}
// 保存原函数的指针,这个可以暴露给自己使用
void (*sysExchangePoint)(Method _Nonnull methA, Method _Nonnull methB);
void my_exchange(Method _Nonnull methA, Method _Nonnull methB) {
NSLog(@"⚠️检测到了Hook!-method_exchangeImplementations");
}
void my_get(Method _Nonnull methA, Method _Nonnull methB) {
NSLog(@"⚠️检测到了Hook!-method_getImplementation");
}
void my_set(Method _Nonnull methA, Method _Nonnull methB) {
NSLog(@"⚠️检测到了Hook!-method_setImplementation");
}