• Mad Mark
    2019-04-04
    关于Mike Ash的那篇objc_msgSend文章,我写过一篇译文 http://madmark.cc/2017/08/01/ARM64_objc-msgSend/

    作者回复: 赞

    
     8
  • 绝影
    2019-04-04
    可以分享多一些您关注的博客或博主吗?

    作者回复: 在后面学习资料推荐篇里我会统一整理好推荐给大家哈

    
     7
  • 时间都去哪了
    2019-04-07
    请问一个新项目在这个时间点用OC还是swift呢?能说说两者应该如何选择呢?

    作者回复: 新项目用 Swift。不用犹豫

    
     3
  • melody
    2019-04-10
    想问下您平时都利用什么途径去获取一些优质苹果的官方文档和博客内容呢?

    作者回复: 官方文档直接就在官网搜索。发现好的博客文章会订阅博主的博客了,通过 RSS 阅读器看。

    
     2
  • 贰叁
    2019-04-20
    垠神是coder的三大浪漫之一编译原理世界顶级的大神
    
     1
  • 沧海行舟
    2019-04-16
    看完第二篇就在动手写hook objc_msg_send的代码,这是学习汇编中记录的一些arm64汇编知识https://github.com/wzpziyi1/Arm64-
    有需要的童鞋可以看看。
    在学习过程中,发现一个问题(或者说我以为的bug)。
    在戴老师的代码中,hook objc_msgSend之前保存个寄存器的状态时,并未保存向量寄存器的状态:
    "stp q6, q7, [sp, #-32]!\n" \
    "stp q4, q5, [sp, #-32]!\n" \
    "stp q2, q3, [sp, #-32]!\n" \
    "stp q0, q1, [sp, #-32]!\n" \
    "stp x8, x9, [sp, #-16]!\n" \
    "stp x6, x7, [sp, #-16]!\n" \
    "stp x4, x5, [sp, #-16]!\n" \
    "stp x2, x3, [sp, #-16]!\n" \
    "stp x0, x1, [sp, #-16]!\n" \

    只是保存了通用寄存器x0--x9寄存器的值,在调试代码时,发现这样的c代码:
    struct TestOne {
        double a;
        double b;
        double number;
        double type;
    }TestOne;

    void test(struct TestOne x) {
        x.a = 10;
        x.b = 20;
        x.number = 2;
        x.type = 11;
    }

    void call() {
        struct TestOne x = {0,0,0,0};
        test(x);
    }

    转成arm64汇编时,结构体的值是保存在向量寄存器d0--d4中的:
    _test: ; @test
        fmov    d4, #11.00000000
        fmov    d5, #2.00000000
        fmov    d6, #20.00000000
        fmov    d7, #10.00000000
        str    d0, [sp]
        str    d1, [sp, #8]
        str    d2, [sp, #16]
        str    d3, [sp, #24]
        str    d7, [sp]
        str    d6, [sp, #8]
        str    d5, [sp, #16]
        str    d4, [sp, #24]
        add    sp, sp, #32 ; =32
        ret


    _call: ; @call
        sub    sp, sp, #48 ; =48
        stp    x29, x30, [sp, #32] ; 8-byte Folded Spill
        add    x29, sp, #32 ; =32
        mov    x8, #0
        str    x8, [sp, #24]
        str    x8, [sp, #16]
        str    x8, [sp, #8]
        str    x8, [sp]
        ldr    d3, [sp, #24]
        ldr    d2, [sp, #16]
        ldr    d1, [sp, #8]
        ldr    d0, [sp]
        bl    _test
        ldp    x29, x30, [sp, #32] ; 8-byte Folded Reload
        add    sp, sp, #48 ; =48
        ret

    如果在项目中,有开发童鞋直接这么写:
    - (void)doSomething:(struct TestOne)test;
    那么hook objc_msgSend时没保存的向量寄存器的状态,会出现问题的吧?
    展开
    
     1
  • 陈阿票
    2019-04-10
    将代码编写成动态库,可不可以减少启动时间?
    
     1
  • Geek_e1d503
    2019-04-04
    老师您好,我想问下并发量大、日活量大的app该注意哪些啊,它的架构和性能上该注意哪些?有没有相关资料可以推荐看下的?
    
     1
  • IAMCJ
    2019-07-23
    “一种是,在程序开始运行时通过 dyld 动态加载。通过 dyld 加载的动态库需要在编译时进行链接,链接时会做标记,绑定的地址在加载后再决定”

    所以大部分动态库是会在编译的时候链接是吗?这个时候的“链接”是并没有绑定地址吗?那这个“链接”主要做了什么内容呢?

    作者回复: 做标记

     1
    
  • 安达
    2019-05-28
    老师,我想问下 vm_read_overwrite 获取到的是不是函数返回的虚拟地址,我在研究打印栈和符号解析代码,很困惑的是各种 Slide 偏移,一会儿加一会儿减,对于整个流程,获取函数返回地址->找到 Image -> 找到 Segment -> 找到符号表 -> 找到符号,这其中是不是根本不需要知道函数在物理内存真实的地址,从头到尾就用的虚拟地址?
    
    
  • 雍鹏亮
    2019-04-09
    我现在在基于clang开发,目标是是让oc支持Annotation注解功能,但是开源的clang版本要低于Xcode中默认的clang两个版本,而且Xcode10还使用New Build System,有些编译参数也不兼容,蛋疼…
    
    
  • 贰零壹玖
    2019-04-05
    提出这些问题的有个比较大的原因是计算机编程的基础问题没打好,或者不是科班出身且没有系统学习过的。
    
    
  • Xcode
    2019-04-05
    谢谢戴老师奉上精彩的课程,太需要这种原创,深度广度并存的干货,正在学习中
    
    
  • 熊
    2019-04-04
    可以分享多一些您的学习方法么?以及能否分享下您关注的一些大神的博客,github大神么?非常感谢
    
    
  • addSubview工程师
    2019-04-04
    能介绍下iOS设计架构嘛MVVM啥的最近面试被问的多了
    
    
  • FR
    2019-04-04
    建议多发一些相关的资料链接
    
    
  • HeminWon
    2019-04-04
    戴铭老师👊🏼北国之恋我正好全部看完

    作者回复: 赞

    
    
  • 张蒙
    2019-04-04
    学习了,谢谢
    
    
  • 元元
    2019-04-04
    扫了一眼我大脑告诉我危险我就点了back
    
    
我们在线,来聊聊吧