hook

作者: 傲世泡泡 | 来源:发表于2021-06-10 14:53 被阅读0次

    理论:

    讲讲 main之前的 加载流程 你就知道为啥有机会改他们代码了

    1.配置相关环境的操作

    2.设置上下文信息

    3.配置进程是否受限

    4.检测环境变量

    5.直到getHostInfo

    第二步 加载共享缓存

    第三步:实例化主程序

    第四步:load any inserted libraries 加载插入动态库

    第五步:链接主程序(就是在做符号绑定)

    比如将UIKit、UIFoundation里面的方法的实际地址告诉主程序在哪个位置,会把所有的依赖库加载到内存、包括自己的framework

    weakBind()弱绑定

    项目中load方法的先后顺序跟Compile Sources中文件顺序有关

    framework的执行顺序和link Binary With Libraries 顺序有关

    简单理解:

    比如这个sdk是framework嘛 无外乎 动态库、静态库,

    也就是说只要我们的 写一个framework 在link Binary With Libraries 里面排在SDK的framework之前,或者 我们的framework属于插入动态库

    那么我们的代码就比SDK的代码先执行,所以就可以在我们的framework里面 修改SDK里面方法的IMP,这样 等到程序运行的时候 调用SDK的方法就会走到我们修改的IMP上来 就可以做些修改

    OC是运行时语言,方法的实现 也就是IMP实在运行时去找的,如果我在运行时 重新指定了一个方法的实现(IMP) 那么调用的时候 就会走到我们指定的位置来,刚刚说的main之前的加载流程 主要想说 framework的加载 也是有顺序的 既然有顺序 就有机会修改

    实践:

    hook这个方法

    这个的时候 就走到我的方法里 打印了我的代码,我已经都修改了SDK的方法调用了 然后我想修改他哪个方法就修改哪个方法调用了

    void new_registerMirrorView(id self,SEL _cmd,id view) {

        NSLog(@"set注入成功 🍺🍺🍺🍺");

        old_registerMirrorView(self, _cmd, view);

    }

    old_registerMirrorView 这个就是原来方法的IMP

    oc分类实现

    相关文章

      网友评论

          本文标题:hook

          本文链接:https://www.haomeiwen.com/subject/lagueltx.html