美文网首页
MachO的动态链接——3

MachO的动态链接——3

作者: 政在coding | 来源:发表于2019-01-18 19:25 被阅读0次

    之前说了通过stub_helper绑定真实函数地址,在调用stub_helper的时候传入了一个参数,如下图。调用之前向w16寄存器压入了32位的参数,这个参数就在下面,它是0x00000330。这个参数看起来像是偏移,那是在哪的偏移呢?下面的仅仅是猜想了,要验证估计要去看源码。如果有知道的大佬请纠正下我。

    准备调用stub_helper

    找到MachOView的下面位置


    Lazy Binding Info

    然后用开始的偏移0x61430加上我们刚刚的偏移0x00000330,结果是0x61760。找到这个偏移位置,刚好值就是“ r..@_NSLog..."。这里的r..我猜是起始符号...是结束符号。然后stub_helper就根据这个符号去找对应函数的真实地址。

    image.png

    然后找到了函数的真实地址之后,怎么把它写回Lazy Symbol Pointers?这里继续是猜测哈,之前不是说过stub表也对应着Indirect Symbols,另外,通过Indirect Symbols是也是可以找到字符串的。那么只要遍历Indirect Symbols里面stub表所对应的项,就可以找到stub_helper所找到函数名字的一样的项,然后可以知道这一项的是第几项,假设是第X项。此外留意一下,在Indirect Symbols里面,stub表和Lazy Symbol Pointers表对应的项排序都是一样的,举个例子:如果Lazy Symbol Pointers表对应的Indirect Symbols里面的第三项是_CFRetain,那么stub表对应的Indirect Symbols里面的第三项也是_CFRetain。另外一点,以前说过Lazy Symbol Pointers表和Indirect Symbols的项的顺序也是一一对应的。那么就可以在Lazy Symbol Pointers表找到第X项,这个项就是需要将函数真实地址写回去的项。
    再重复一下,这都是猜想哈。其实我也想是不是可以直接就拿Lazy Symbol Pointers表在Indirect Symbols的对应项去遍历就好。那stub表在Indirect Symbols的对应项拿来干嘛的就不得而知了。

    相关文章

      网友评论

          本文标题:MachO的动态链接——3

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