美文网首页
Mach-O符号懒加载

Mach-O符号懒加载

作者: 答案不止一个 | 来源:发表于2020-10-09 13:16 被阅读0次

iOS 的非懒加载符号会在dyld加载时就绑定真实的值。而懒加载符号不会。只在第一次调用它是才会绑定真实的地址。

通过一个例子 根据 Mach-O文件去了解。
lazy symbol pre .png

第一次调用这个printf函数


lazy symbol 1.jpeg

会找到在Section64(Text,__stub)上的地址。找到对应的符号,printf。


lazy symbol 2 stubs.jpeg

然后通过 si 命令继续执行。看到跳转到 0x10003eb2的地址,就是 上述 stub中的偏移地址加上基地址。然后跳转到0x100003efa的地址。根据stub 从 la_symbol_ptr 中找到对应的指针。


lazy symbol 3 printf.jpeg
lazy symbol 4 la_symbol_ptr.jpeg

带上偏移地址,跳转到 stub_helper 的头部


lazy symbol 4 stub jump .png
进入执行,会跳转到 0x3eb8 。在 Section64(Text, __stub_helper) 对应的方法执行。
lazy_symbol 5 stub_helper run.png

然后继续执行,会跳转到 libdyld.dylib`dyld_stub_binder: 的方法。去进行方法绑定


lazy symbol 6 dyld stub binder.png

在dyld_stub_binder 中会找到并跳转执行 libsystem_c.dylib`printf


lazy symbol 7 jupq printf .png

当第二次执行 printf 方法时。就会直接找到 printf的地址


lazy symbol 8. printf .png
总结

第一次调用

  1. 通过 __stubs 找到 __la_symbol_prt 中的指针
  2. 带上偏移地址执行 _stub_helper 头部
  3. 调用 dyld_stub_binder 然后再调用 _dyld_fast_stub_entry 执行绑定。(通过 debug -> debug workflow -> allways show disassemblys 断点查看)
  4. 从lazy Bindding info 定位真实符号模块并写会 _la_symbol_ptr

第二次调用

  1. 直接根据 _la_symbol_ptr 已绑定的符号跳转

相关文章

  • Mach-O符号懒加载

    iOS 的非懒加载符号会在dyld加载时就绑定真实的值。而懒加载符号不会。只在第一次调用它是才会绑定真实的地址。 ...

  • FishHook-初识

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

  • iOS逆向实战--021:fishHook源码解析

    fishHook是Facebook提供的开源库,利用MachO文件的加载原理,动态修改懒加载和非懒加载两张符号表,...

  • 启动优化

    App启动过程 解析Info.plist沙箱建立、权限检查 Mach-O 加载 加载所有依赖的Mach-O文件(递...

  • fishhook的注意点

    有关fishhook的原理如果看过之前的MachO链接过程,那其实就应该很简单了,他就是讲懒加载符号表和非懒加载符...

  • iOS:懒加载符号绑定流程

    1. 桩函数的出现 首先在 main 函数中打断点: 开启汇编调试,运行代码,结果如下: 上图可知调用 NSLog...

  • Mach-O格式文件(用户态下的进程加载)

    Mach-O二进制文件 Mach-O的文件头包含的内容: 魔数 CPU类型及其子类型 文件类型 用于加载器的“加载...

  • Mach-O的符号与链接

    Mach-O符号表 点击了解更多关于Mach-O[https://www.jianshu.com/p/2dbf81...

  • Mach-o文件结构

    Mach-o文件结构 Mach-o包含三个基本区域: 头部(header structure)加载命令(load ...

  • iOS逆向-16:Fishhook原理

    fishhook fishhook是如何通过字符串找到符号表的呢?先来看看如何通过符号找到字符串: 可以看到懒加载...

网友评论

      本文标题:Mach-O符号懒加载

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