Method Swizzle
利用OC的Runtime特性,动态改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的。主要用于OC方法。
例如,处理url 中的中文
需要创建NSURL 的分类,在load方法中进行方法的交换即可,外部不需要导入头文件,直接调用原始方法就可以
不需要导入头文件,是因为 分类在加载的时候,load就会执行了。
方法的调用底层走的是 消息机制, msg_send, 调用类的方法是给类的对象发送消息,类方法也是给类对象那个发送消息,类也属于一个对象。
方法实现就是方法的地址(IMP),method_exchangeImplementations 方法的实质就是交换了SEL 和 IMP 的指向。
po : 指令,p是执行,o是object,po就是执行对象的description 方法
查看头文件
使用class-dump 生成headers, $ ./class-dump -H xxx -o ./headers/
然后用sublime 查看 ,command + shift + F ,搜索全部 @interface WCAccountLoginControlLogic
如下,重签名、加入framework、跑脚本、即可 Hook 注册的代码
动态调试 LLDB ,静态分析(头文件)
根据view debug 来寻找控件,找到它的类,如果在本类中没有找到想要的东西,可以去它的父类中寻找,以此类推。
网友评论