# hookClass **Repository Path**: iosrev/hookClass ## Basic Information - **Project Name**: hookClass - **Description**: hookClassLog 打印类的执行方法 - **Primary Language**: Objective-C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-30 - **Last Updated**: 2021-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KNHook 性能损耗 | 状态        | 平均耗时       | 次数 | | ------------- |:-------------:| -----:| | 不加之前 | 0.000213s | 20000次 | | 函数副本方法     | 0.000579s     | 20000次 | | 存IMP指针方法    | 0.000587s     | 20000次 | 不同设备之间会存在差异 函数副本方法: 所有方法都加上 KNHook_前缀 副本方法IMP指针使用原方法的 存IMP指针方法 将IMP指针转成long 存入字典中 ```objc        //缓存        _IMP imp = method_getImplementation(method); NSNumber *pNumber = [NSNumber numberWithLong:(long)imp]; [impDict setObject:pNumber forKey:NSStringFromSelector(methodSel)];        //使用        NSNumber *pNumber = [impDict objectForKey:NSStringFromSelector(invocation.selector)]; long *p = (long *)[pNumber longValue]; _IMP imp = (_IMP)p; [invocation invokeUsingIMP:imp]; ``` 勾某个类的所有方法的,查看所有方法的执行顺序 使用方法 [KNHook hookClass:@"TenpayPasswordCtrl"]; 常规使用: 放在只执行一次的函数里,防止多次勾一个函数 如 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions hook: __attribute__((constructor)) static void entry() 放这里面 打日志的printf 改成 nslog 在终端那个应用里面就能看到日志 Nov 2 15:08:36 iPhone WeChat[2499] : KNHooklog :-(void)appendPsw:(have 1 value) return:(null) value1:__NSCFString-->7 object:; layer = > ########################################## Nov 2 15:08:36 iPhone WeChat[2499] : [RedRobert] Tweak.xm:350 DEBUG: -[ appendPsw:7] Nov 2 15:08:36 iPhone WeChat[2499] : KNHooklog :-(void)onChange(have 0 value) return:(null) object:; layer = > ########################################## Nov 2 15:08:36 iPhone WeChat[2499] : [RedRobert] Tweak.xm:356 DEBUG: -[ onChange] Nov 2 15:08:36 iPhone WeChat[2499] : KNHooklog :-(id)ctrlDelegate(have 0 value) return:(null) object:; layer = > ########################################## 微信 [KNHook hookClass:@"WCPayLogicMgr"]; [KNHook hookClass:@"WCRedEnvelopesLogicMgr"]; [KNHook hookClass:@"ContactUpdateHelper"]; [KNHook hookClass:@"WCRedEnvelopesNetworkHelper"]; [KNHook hookClass:@"WCRedEnvelopesReceiveHomeView"] #ANYMethodLog 《追踪方法调用顺序:》 [ANYMethodLog logMethodWithClass:@"ViewController"]; ov 23 10:27:46 iPhone WeChat[7309] : 《before》方法调用deep: [target: 《selector》: initWithFrame:{{0, 0}, {246, 42}} AndImage: ] Nov 23 10:27:46 iPhone WeChat[7309] : 《before》方法调用deep:- [target:> 《selector》: setSaltVal:unknown ] Nov 23 10:27:46 iPhone WeChat[7309] : 《after》方法调用deep:- [target:> 《selector》: setSaltVal:unknown ] 返回值:void interval:0.000018 Nov 23 10:27:46 iPhone WeChat[7309] : 《after》方法调用deep: [target:> 《selector》: initWithFrame:{{0, 0}, {246, 42}} AndImage: ] 返回值:> interval:0.005786 # Meow