MSHook的原理是这样写的吗

void MyHookMessageEx(Class aClass ,SEL oldSEL ,IMP imp1 ,IMP* imp2)
{
Method oldMethod = class_getInstanceMethod(aClass, oldSEL);
*imp2 = method_getImplementation(oldMethod);
method_setImplementation(oldMethod, imp1);
}
为什么这样写的不起作用呢

那么完整代码呢

这个才是正确的姿势,看好了!!!

NSString *(*oldDescription)(id self, SEL _cmd);

// implicit self and _cmd are explicit with IMP ABI
NSString *newDescription(id self, SEL _cmd) {
NSString *description = (*oldDescription)(self, _cmd);
description = [description stringByAppendingString:@"!"];
return description;
}

MSHookMessageEx(
[NSObject class], @selector(description),
&newDescription, &oldDescription
);

不是怎么调用 而是它内部是怎么实现的