OC底层

OC 探索底层原理

2020-09-11  本文已影响0人  H丶ym

OC底层原理学习

NSObjectalloc为列,我们只能跟到NSObject.h的头文件里


一般到这也就结束了,接下来介绍三种方法可以让我们继续往下探索和学习

符号断点

添加一个alloc的符号断点



我们可以看到 alloc 的源码在libobjc.A.dylib库中

使用Step into按钮+符号断点

Step into 按钮如图


长按control点击Step into 按钮,点击三次

再添加符号断点objc_alloc

汇编跟流程

xcode 工具栏 选择Debug --> Debug Workflow --> Always Show Disassembly,这个 选项表示 始终显示反汇编 ,即 通过汇编 跟流程



已经看到接下来要走objc_alloc,再去添加符号断点就可以了

编译libobjc.A.dylib

1、Apple 所有开源源码汇总地址,根据相应的版本查找对应的源码,以mac 10.15为例: macOS --> 10.15 --> 选择10.15 --> 搜索 objc
2、Apple 比较直接的源码下载地址,直接搜索想要下载的源码名称即可,例如objc直接搜索 objc --> objc4/ --> 选择相应的objc的版本

我们这里下载 objc4-781.tar.gz,解压缩、编译、报错 😆
底层的探索要不急不燥

依赖文件

image.png
launchd-106.10Mac OS X 10.4.4中下载
其它的在Mac OS X 10.15中下载

错误:unable to find sdk 'macosx.internal'


解决方法
截屏2020-09-11 下午2.15.32.png

错误:'***.*' file not found
解决方法

#define DYLD_MACOSX_VERSION_10_11 0x000A0B00
#define DYLD_MACOSX_VERSION_10_12 0x000A0C00
#define DYLD_MACOSX_VERSION_10_13 0x000A0D00
#define DYLD_MACOSX_VERSION_10_14 0x000A0E00

错误:can't open order file: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/AppleInternal/OrderFiles/libobjc.order
解决方法
修改Order File 改为 $(SRCROOT)/libobjc.order

image.png

错误/xcodebuild:1:1: SDK "macosx.internal" cannot be located.
解决方法
修改Run Script(markgc) 中的macosx.internal,改为macosx

接下来编译通过了 😭

调试libobjc.A.dylib

  1. 新建一个 target
  1. 绑定objclibobjc.A.dylib
  1. 设置Enable Hardened RuntimeNo

4.如果遇到断点断不住的情况,把main.m换个位置

上一篇下一篇

猜你喜欢

热点阅读