美文网首页
iOS OC反汇编

iOS OC反汇编

作者: 为了自由的白菜 | 来源:发表于2021-04-12 10:10 被阅读0次

    OC的反汇编

    笔记暂时提交, 日后修正

    1. OC方法本质

    objc_msgSend(id , sel), 汇编打印x0, x1来获取 id ,以及 sel -> objc_msgSend
    iOS9 [[对象 alloc] init] -> 两次objc_msgSend
    iOS11 对象alloc -> objc_alloc + objc_msgSend (init)
    iOS11 以后 (iOS 13.5测试情况) 对象alloc -> objc_alloc_init (不再走objc_msgSend)

    创建对象后 (局部变量) -> objc_storeStrong (id * (对象指针) , id ) -> objc_storeStrong (&p, nil) -> objc_release

    2. 工具反汇编

    hopper, 烂苹果, IDA

    block的反汇编 -> 找到invoke代码 (实现代码)
    objc_retainBlock

    hopper (汇编,流程图, 伪代码)

    总结:

    汇编: 函数那一块
    1024 = 1k 数量单位
    1024B (byte) = 1KB 容量单位

    64位 -> 32个寄存器
    w寄存器 x寄存器
    pc寄存器 sp -> 栈顶 fp -> 栈底
    sub sp 拉伸 -> 16字节对齐 !!
    ldr (load register) -> 读 str (store register) -> 写
    bl -> lr x30 (回家的路) -> ret读lr去返回上个函数
    函数调用栈 -> 拉伸栈 (sub sp) -> 栈平衡 (add sp)
    nzcv (32位) 状态寄存器 -> 最高四位
    adrp 寻址 (adress page) -> pc寄存器 低12位清零 + offset

    adrp x2 2 0x104dda060 + 2 = 0x104dda000 + 2
    add x2 x2 #070 0x104ddc070

    循环选择判断
    cmp 比较 -> nzcv 状态寄存器 -> b
    无符号判断 -> switch 两头掐

    相关文章

      网友评论

          本文标题:iOS OC反汇编

          本文链接:https://www.haomeiwen.com/subject/lnitlltx.html