iOS逆向之旅(基础篇) — 汇编(五) — 汇编下的Block

嘿嘿老规矩先上OC源码:

- (void)viewDidLoad {
    [super viewDidLoad];
    void(^block)(void) = ^(){
        NSLog(@"111");
    };
    block();
}
复制代码

汇编:

03-汇编-Block`-[ViewController viewDidLoad]:
    ...
    0x1002a6764 <+68>:  adrp   x8, 2
    0x1002a6768 <+72>:  add    x8, x8, #0x88             ; =0x88 
    0x1002a676c <+76>:  mov    x0, x8
    0x1002a6770 <+80>:  bl     0x1002a6ba4               ; symbol stub for: objc_retainBlock
    0x1002a6774 <+84>:  str    x0, [sp, #0x8]
->  0x1002a6778 <+88>:  ldr    x8, [sp, #0x8]
    0x1002a677c <+92>:  mov    x0, x8
    0x1002a6780 <+96>:  ldr    x8, [x8, #0x10]
    0x1002a6784 <+100>: blr    x8
    .....
复制代码

首先分析通过adrp指令计算出 block的地址 block的地址 = 2 << 12 +  0x1002a6000 + 0x88 = 0x1002a8088 通过LLDB:查看该内存地址

(lldb) memory read --format x --size 8 0x1002a8088
0x1002a8088: 0x00000001b5791288 0x0000000050000000
0x1002a8098: 0x00000001002a67a8 0x00000001002a8068
0x1002a80a8: 0x00000001b5798610 0x00000000000007c8
0x1002a80b8: 0x00000001002a7685 0x0000000000000003
(lldb) po 0x00000001b5791288
__NSGlobalBlock__
复制代码

首先我们可以通过Block的isa指针知道这货是啥?就是个__NSGlobalBlock__ 然后我们还能从Block+0x10的位置获取到Block的入口看下图

使用IDA查看会更加方便,后面会用到

扩展:

LLDB指令的查看

资源代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值