iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

11 | 热点问题答疑(一):基础模块问题答疑

留给读者思考题
建立知识体系
帮助搞明白困惑的知识点
甄选重要核心问题巩固所学知识
投入精力掌握Clang的重要性
Clang的知识应用
汇编代码的学习
实现方法耗时检查工具
Time Profiler工具检查方法耗时的原理
监控和优化动态库加载
运行时动态库加载在App启动速度优化上的应用场景
挑战和不断进步
根据工作需要选择深入研究的内容
动手改造或者造新轮子提升技术水平
希望了解InjectionIII的工作原理
使用CocoaPods开发组件遇到问题
加载动态库的两种方式
动态库参与链接问题
通过私信收到学习专栏遇到的问题反馈
通过评论区收到问题、建议、心得和经验
小结
关于Clang的相关问题
App启动速度的相关问题
App启动时通过dyld加载动态库
选择深入研究的内容
InjectionIII的工作原理
动态库加载方式的相关问题
戴铭
热点问题答疑(一):基础模块问题答疑

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。
专栏上线以来,我通过评论区收到了很多同学提出的问题、建议、心得和经验,当然提的问题居多。虽然我未在评论区对每条留言做出回复,但是我对大家提出的问题却都一一记录了下来,等待这次答疑文章的到来。其实,不光是在留言区,也有一些朋友通过私信跟我反馈了学习专栏遇到的问题。
所以,今天我就借此机会,汇总并整理了几个典型并重要的问题,和你详细说一说,希望可以解答你在学习前面 10 篇文章时的一些困惑。

动态库加载方式的相关问题

@五子棋在看完第 5 篇文章“链接器:符号是怎么绑定到地址上的?”后,关于动态库是否参与链接的问题,通过私信和我反馈了他的观点。他指出:动态库也是要参与链接的,不然就没法知道函数的标记在哪儿。
为了帮助大家理解这个问题,我把与这个问题相关的内容,再和你展开一下。
我在文章中,是这么阐述这部分内容的:
Mach-O 文件是编译后的产物,而动态库在运行时才会被链接,并没参与 Mach-O 文件的编译和链接,所以 Mach-O 文件中并没有包含动态库里的符号定义。也就是说,这些符号会显示为“未定义”,但它们的名字和对应的库的路径会被记录下来。运行时通过 dlopen 和 dlsym 导入动态库时,先根据记录的库路径找到对应的库,再通过记录的名字符号找到绑定的地址。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇技术答疑文章涵盖了动态库加载方式、App启动速度优化等技术内容。作者通过回复读者提出的问题,详细解答了关于动态库加载方式、App启动速度优化等技术问题。文章首先对动态库加载方式进行了深入讨论,解释了动态库参与链接的问题,并补充了加载动态库的两种方式。此外,作者还提到了关于InjectionIII的工作原理和对运行时动态库加载原理的理解。在回答读者关于App启动速度优化的问题时,作者推荐了苹果公司的WWDC 2016 Session 406 视频和一篇博客作为进一步阅读资料。文章还涉及了关于汇编代码的学习和Clang的相关问题。总的来说,这篇文章对读者解决相关技术问题具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

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

    作者回复: 赞

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

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

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

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

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

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

    2019-04-10
    2
  • IAMCJ
    “一种是,在程序开始运行时通过 dyld 动态加载。通过 dyld 加载的动态库需要在编译时进行链接,链接时会做标记,绑定的地址在加载后再决定” 所以大部分动态库是会在编译的时候链接是吗?这个时候的“链接”是并没有绑定地址吗?那这个“链接”主要做了什么内容呢?

    作者回复: 做标记

    2019-07-23
    2
  • HeminWon
    戴铭老师👊🏼北国之恋我正好全部看完

    作者回复: 赞

    2019-04-04
  • 贰叁
    垠神是coder的三大浪漫之一编译原理世界顶级的大神
    2019-04-20
    2
  • 沧海行舟
    看完第二篇就在动手写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时没保存的向量寄存器的状态,会出现问题的吧?
    2019-04-16
    2
  • addSubview工程师
    能介绍下iOS设计架构嘛MVVM啥的最近面试被问的多了
    2019-04-04
    2
  • 陈阿票
    将代码编写成动态库,可不可以减少启动时间?
    2019-04-10
    2
    1
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部