美文网首页ios底层原理
ios应用程序加载分析(一)

ios应用程序加载分析(一)

作者: erlich | 来源:发表于2022-07-05 22:04 被阅读0次

app启动分析+猜测

首先通过入口函数main断点查看

image.png image.png

nothing ... 通过load入口断点查看

image.png

得到大致的堆栈关键信息 (反向调用信息如下)

dyld - _dyld_start
dyld - dyldbootstrap::sart
dyld - dyld::_main
dyld - dyld::useSimulatorDyld
dyld_sim - start_sim
dyld_sim - dyld::_main
dyld_sim - dyld::initializeMainExecutable
dyld_sim - ImageLoader::runInitializers
dyld_sim - ImageLoader::processInitializers
dyld_sim - ImageLoader::recursiveInitialization
dyld_sim - dyld::notifySingle
libobjc - load_images
...... +(void)load

dyld - _dyld_start 开始追踪源码

image.png image.png image.png image.png image.png image.png image.png image.png

源码量大,头晕,迷失,回到 dyld::_main 1000行的代码里继续分析

dyld::_main 返回result,尝试分析找result的赋值部分
image.png
MachOView俗称烂苹果打开 app可执行文件
image.png
发现Executable 关键字

结合上下文跟注释,sMainExecutable --- find entry point for main executable
找 sMainExecutable的赋值
image.png image.png image.png
下图参考MachOView查看对照一些符号相关的内容
image.png image.png
link main executable
image.png
绑定若引用符号表
image.png
run all initializers 程序跑起来了
image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png

跟libobjc联系了起来

image.png image.png image.png
libdispatch search
image.png image.png image.png image.png image.png

至于libSystem_initializer 是如何调用的,通过汇编查看 -

  • 寄存器查看 - 注意 控制台打印的 rbx寄存器的内容 (libObjc)
image.png
  • 参数情况 (libDyld)
image.png image.png
  • invoke (libSystem)
image.png

结合之前的正向分析及堆栈反向递推,整个流程如下

image.png

上图一出错误修正 - recursiveInitialization 与 doInitialization 之间的序列线,请参阅[ios应用程序加载分析(二)]里会有分析断层的补充说明

  • 需要了解关键节点:

_dyld_start(dyld) -> doModInitFunctions(dyld) -> libSystem_initializer(libSystem) -> libdispatch_init(libdispatch) -> _objc_init(libobjc) -> registerObjCNotifiers(dyld) :::::: sNotifyObjCMapped = mapped; && sNotifyObjCInit = init; && sNotifyObjCUnmapped = unmapped;

image.png image.png

[ios应用程序加载分析(二)]

相关文章

  • 应用程序的加载分析

    应用程序的加载分析 作为一个开发者,对于iOS应用程序启动过程有很多疑问,本篇就应用程序是如何加载的,做相关分析 ...

  • ios应用程序加载分析(二)

    为了不至于分析链条发生断层,请参阅ios应用程序加载分析(一)[https://www.jianshu.com/p...

  • iOS内存分析上-图片加载内存分析

    iOS内存分析上-图片加载内存分析 iOS内存分析上-图片加载内存分析

  • ios应用程序加载分析(一)

    app启动分析+猜测 首先通过入口函数main断点查看 nothing ... 通过load入口断点查看 得到大致...

  • dyld & objc的关联

    抛出问题 上回说到iOS应用程序加载大致流程分析[https://www.jianshu.com/p/ba53fa...

  • iOS 应用程序加载流程分析

    本文的目的主要是分析dyld的加载流程 首先我们先运行个代码 来引入我们今天的主题~~ 运行结果: 运行程序,查看...

  • iOS 应用程序加载流程分析

    在我们的日常开发中我们都知道,应用程序的执行都会依赖一些底层的基础库,例如 UIKit , Foundation ...

  • OC底层原理10—应用程序加载

    之前分析了消息的发送、转发,那么消息是如何加载到类中的呢?研究类的加载,就要先研究下应用程序的加载。在应用程序加载...

  • iOS dyld

    一、应用程序加载原理 在分析dyld加载应用程序之前,先清楚以下基本概念。库:可执行的二进制文件,可以被系统加载到...

  • iOS引用程序加载流程-dyld

    一、应用程序加载原理 在分析dyld加载应用程序之前,先清楚以下基本概念。库:可执行的二进制文件,可以被系统加载到...

网友评论

    本文标题:ios应用程序加载分析(一)

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