iOS逆向之OC反汇编(下)

本文深入探讨了OC对象的反汇编过程,包括静态和动态调试,以及Block的反汇编分析。通过实例展示了不同iOS版本下`[[self alloc] init]`的优化变化,并介绍了如何利用工具进行复杂OC代码的反汇编理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要理解OC对象反汇编,以及block常见类型的反汇编

OC反汇编

创建一个Person类,并在main函数中初始化一个Person对象

@interface Person : NSObject

@property(nonatomic, copy) NSString *name;
@property(nonatomic, assign) int age;

+ (instancetype)person;

@end

@implementation Person

+ (instancetype)person{
    return [[self alloc] init];
}

@end

<!--main.m中-->
int main(int argc, char * argv[]) {

    Person *p = [Person person];

    return 0;
}

  • 运行,查看其汇编代码

首先作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

1、静态调试

通过adrp+add获取地址,分别读取x0,x1

  • 读取x0,读出来是Person:x 0x100c68eb0 + po 0x0100c68f98

  • 读取x1,读取出来是person方法:x 0x100c68e88 + p (SEL)0x01c019aef5

2、动态调试
通过一步一步执行汇编,来验证x0、x1是否如静态调试的结果一致?

通过调试发现,是一致的,其实这里的x0、x1就是 objc_msgSend的隐藏参数(id self,SEL _cmd)

下面我们继续调试汇编

  • 点击step into,直接进入[Person person]方法(注意:这里不同iOS版本,多看到的汇编代码是有所区别的)

    • 从这里看到ios13.4系统的alloc、init并不会走objc_msgSend

    • ios11版本中,可以看到objc_msgSend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值