美文网首页
共享缓存机制、PIC技术、符号绑定、符号查找

共享缓存机制、PIC技术、符号绑定、符号查找

作者: Code_人生 | 来源:发表于2019-10-24 09:49 被阅读0次

    一、共享缓存机制

    苹果为了节约内存以及提高加载速度,将系统的动态库放在内存的一块特殊位置,然后将这块内存共享给其他的应用。这块区域就是动态库共享缓存(dyld shared cache

    二、PIC技术(位置代码独立)

    编译的时候,符号地址。dyld加载的时候,将符号地址和真实地址绑定

    • 由于有了共享缓存,那么我们所调用的系统函数在编译时刻是没法确定其内存地址。
    • 所以苹果采用了PIC技术。在MachO文件DATA段建立两张表,懒加载和非懒加载表,利用存放指向外部函数的指针(符号)!
    • 当我们首次调用懒加载表内的函数时,DYLD会对该函数进行绑定。

    三、符号绑定过程分析

    • 符号表,分两种,一种非懒加载表、一种懒加载表
    • 获取 offset 0x00008010

    • image list 获取所有模块列表,然后找到 内存地址(MachO的首地址)0x0000000100754000

    • 获取符号地址:0x0000000100754000 + offset(0x00008010) = 0x10075C010
    • memory read 0x10075C010(内存地址) 读内存
    • iOS小端模式,从右往左读 0x010075a574

    • dis -s 0x010075a574 看汇编

    • 第二个断点重复操作
    • 第三个断点重复操作,已经执行了rebind_symbols

    四、通过符号找到字符串

    • Section64(_DATA,_la_symbol_ptr) -> Lazy Symbol PointersDynamic Symbol Table -> Indirect Symbols 是对应的
    • 000000B2 换成十进制 178,对应为Symbol Table -> Symbols中的角标
    • 000000D7 对应为String Table偏移值
    • 000000D7 + 0000D3D0 = 0xD4A7

    相关文章

      网友评论

          本文标题:共享缓存机制、PIC技术、符号绑定、符号查找

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