美文网首页
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

    之前说了通过stub_helper绑定真实函数地址,在调用stub_helper的时候传入了一个参数,如下图。调用...

  • MachO的动态链接

    对于存在别的动态库的函数,程序在运行的时候需要通过动态链接来获取函数的调用地址,在iOS上是通过dyld来实现的,...

  • MachO与动态链接

    前置知识 符号 静态链接 汇编基础 虚拟内存 跳转指令的编码:PC相对地址与绝对地址 汇编跳转指令:直接跳转与间接...

  • MachO的动态链接——2

    这次说一下懒加载符号表的查找。先回忆起上次讲的这张图,这里去#0x100050228这个地址取值,然后跳转,第一次...

  • MachO的动态链接——1

    对于存在于别的动态库的函数,程序在运行的时候需要通过动态链接来获取函数的调用地址。在iOS上是通过dyld来实现的...

  • fishHook原理

    fishHook fishHook是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO文...

  • iOS逆向工程 - fishhook原理

    fishhook是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO文件加载原理,通过修...

  • fishHook原理分析

    fishHook是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO文件加载原理,通过修...

  • 从 MachO 加载到对象创建!

    MachO MachO -- Mach Object, 是一种用于可执行文件/目标文件(.o)/动态库的文件格式....

  • iOS逆向之fishHook原理探究

    HOOK原理 1、MachO是被谁加载的? DYLD动态加载 2、ASLR技术(地址空间布局随机化):MachO文...

网友评论

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

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