AOP的本质是HOOK;
HOOK的本质是:新函数包含原函数或新函数替换原函数;
需要解决的问题:
1、新函数的生成;
2、新函数的调用机制;
3、原函数的调用机制;
新函数的生成:
1、将已有的动态派发机制函数直接替换;
2、伪造签名后生成新函数,新函数的核心处理逻辑使用通用函数;
总之:重定位到通用函数进行处理;
新函数的调用机制:
1、修改动态派发的结构(动态代理);
2、修改类结构中的函数(函数hook);
3、修改二进制代码;
原函数的调用机制:
1、将函数参量打包封装调用;
[invocation invoke];
2、函数指针直接调用;
ffi_call(cif, (void (*)(void))hookedClassInfoPool->_originalIMP, ret, args);。