OC底层原理01:查找源码有三种方式

张建 lol

前言

本文主要介绍下源码探索的三种方法:

  • 1、符号断点直接跟流程

  • 2、通过按住 control+step into

  • 3、汇编跟流程

下符号断点的形式直接跟流程

  • 切换到Show the breakpoing navigator栏,打击左下角“+”create a breakpoint创建一个断点

  • 添加要查看的符号alloc

  • 设置地址断点,并取消之前设置的符号断点4,以便执行目标行,因为系统调用alloc的方法有很多,你不知道什么时候能执行到目标位置


  • command + R编译并运行工程,当代码执行到3时,将符号断点4选中,查看执行的底层源码

通过摁住control - step into

  • command + R编译并运行工程,代码执行到目标行,按住control + step into单步运行箭头

  • 按上面的方式,进入汇编可得下图:

注:jmpq是设么意思?
jmpq 就是jmp 指令。q是gnu汇编的用法。q表示跳转到64位地址。l表示32位地址。

  • 然后打一个objc_alloc的符号断点,跳转到汇编代码可得下图:

由上图可知objc_alloc是在libobjc.A.dylib这个动态链接库上
注:.dylib是OSX上的动态库扩展

查看运行时的汇编代码

  • Xcode点击Debug->Debug Workflow->Alway Show Disassembly查看运行时的汇编代码

  • 运行成功后的汇编代码如下

可知底层调用的方法是objc_alloc

注:callq:调用函数的意思,即调用函数时的压栈出栈

  • 在下一个符号断点objc_alloc,继续执行和上面的就一样了

总结

由上面的方法我们可知 alloc 底层调用的是 objc_alloc,所在的位置是libobjc.A.dylib 这个动态链接库,用一张流程图总结:

  • Post title:OC底层原理01:查找源码有三种方式
  • Post author:张建
  • Create time:2020-09-03 01:35:35
  • Post link:https://redefine.ohevan.com/2020/09/03/OC底层原理/OC底层原理01:查找源码有三种方式/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.