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

app启动分析+猜测

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

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 开始追踪源码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

dyld::_main 返回result,尝试分析找result的赋值部分

在这里插入图片描述

MachOView俗称烂苹果打开 app可执行文件

在这里插入图片描述

发现Executable 关键字

结合上下文跟注释,sMainExecutable --- find entry point for main executable
找 sMainExecutable的赋值

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

下图参考MachOView查看对照一些符号相关的内容

在这里插入图片描述

在这里插入图片描述

link main executable

在这里插入图片描述

绑定若引用符号表

在这里插入图片描述

run all initializers 程序跑起来了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

跟libobjc联系了起来

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

libdispatch search

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

  • 寄存器查看 - 注意 控制台打印的 rbx寄存器的内容 (libObjc)

在这里插入图片描述

  • 参数情况 (libDyld)

在这里插入图片描述

在这里插入图片描述

  • invoke (libSystem)

在这里插入图片描述

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

在这里插入图片描述

上图一出错误修正 - 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;

在这里插入图片描述

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值