美文网首页
fishhook执行逻辑

fishhook执行逻辑

作者: 重案组之虎曹达华_ | 来源:发表于2020-06-06 09:35 被阅读0次

    先清楚fishhook的最终目的是替换函数实现,也就是下面这个地方


    image.png

    通过找LoadCommand

    获取几张表的偏移量,计算得到最终的起始地址。

    1.分别是符号表地址Symbol Table(以下标存着每个方法):

    image.png

    2.字符串表String Table(存放着所有字符串)

    image.png

    3.动态符号表地址indirect Symbols(将来要进行符号绑定)

    image.png

    找到LoadCommand里的Data段,遍历里面的section片段,找到 _got和 _la_symbol_ptr,因为这两张表分别对应了懒加载和非懒加载的符号表

    image.png image.png

    通过uint32_t *indirect_symbol_indices = indirect_symtab + section->reserved1(reserved1意为offset or index,该偏移后的地址由懒加载表和间接符号表一一对应) (间接符号表起始基址 + 偏移)

    (loadcommand当中有指明,reserved1偏移是间接符号表)


    image.png

    获取indirectSymbols

    image.png

    通过data算出索引值

    image.png

    通过uint32_t strtab_offset = symtab[symtab_index].n_un.n_strx; 拿到偏移值

    image.png

    string table寻找字符串

    image.png

    判断最开始传进来的字符串是否相等匹配,如果匹配替换方法地址。如果想要保留之前的实现而传进来一个匿名方法,假如有,会把原方法赋给匿名方法方便开发者调用。
    所以fishhook是扫全表遍历你想替换的方法。

    相关文章

      网友评论

          本文标题:fishhook执行逻辑

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