libojc小记

clang, libojc, dyld 的关系

clang 可以 -rewrite-objc

libobjc.A.dylib 是一个动态库,向上是OC的运行时环境,

MachO 编译完成时,会看到 _objc_classname, _objc_methodname, _objc_methtype section

IDA查看libojc.A.dylib , 发现道出了大量 __objc_* 的接口和少量的数据,所以肯定确定 clang 在编译 oc文件的时候,会把oc转换成c/c++接口进行编译。

OC类,可以视为带方法的结构体,并且结构体里存储的是方法的指针,以保证运行时可以rebind的特性。
所以在MachO里可以存储类的结构,在OC运行时环境加载时,runtime环境会初始化程序内部的oc类。

一些好文章:
https://juejin.im/post/6874391520334577677 Clang Rewrite视角OC类结构分析与部分常见考点
https://juejin.im/post/6846687597478019079 WWDC20 iOS14 Runtime优化
https://developer.apple.com/videos/play/wwdc2020/10163/ wwdc2020
https://github.com/draveness/analyze/blob/master/contents/objc/%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90%20ObjC%20%E4%B8%AD%E6%96%B9%E6%B3%95%E7%9A%84%E7%BB%93%E6%9E%84.md#%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90-objc-%E4%B8%AD%E6%96%B9%E6%B3%95%E7%9A%84%E7%BB%93%E6%9E%84 深入解析-objc-中方法的结构

objc4源码: https://opensource.apple.com/source/objc4/
编译 libobjc: https://www.jianshu.com/p/28150fa0c085

TODO:
OC了解runtime版本间的代码差异 diff
看 深入解析-objc-中方法的结构
找一下Mach-o文件结构的资料
了解dyld
fishhook

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值