返回
iOS 17.dyld 与 ObjC 关系探索
IOS
2023-09-18 20:38:04
iOS 程序启动与加载流程
当一个 iOS 程序启动时,dyld 会被内核加载到内存中。dyld 是一个动态链接器,负责加载和链接应用程序所需的动态链接库。在 iOS 17 中,dyld 的主要职责包括:
- 加载应用程序的可执行文件 。dyld 将应用程序的可执行文件从磁盘加载到内存中。
- 解析应用程序的可执行文件 。dyld 解析应用程序的可执行文件,以确定应用程序所需的动态链接库。
- 加载应用程序所需的动态链接库 。dyld 将应用程序所需的动态链接库从磁盘加载到内存中。
- 链接应用程序的可执行文件和动态链接库 。dyld 将应用程序的可执行文件和动态链接库链接在一起,以便应用程序能够调用动态链接库中的函数。
- 启动应用程序 。dyld 启动应用程序,使应用程序开始执行。
_objc_init 源代码分析
_objc_init 是 Objective-C 运行时初始化函数,负责初始化 Objective-C 运行时。在 iOS 17 中,_objc_init 函数的主要职责包括:
- 初始化 Objective-C 运行时的各种数据结构 。_objc_init 函数初始化 Objective-C 运行时的各种数据结构,包括类表、方法表、消息发送表等。
- 注册 Objective-C 运行时的各种回调函数 。_objc_init 函数注册 Objective-C 运行时的各种回调函数,包括类加载回调函数、消息发送回调函数等。
- 启动 Objective-C 运行时 。_objc_init 函数启动 Objective-C 运行时,使 Objective-C 运行时开始工作。
dyld 与 ObjC 的密切关系
dyld 和 ObjC 在 iOS 程序的启动和加载过程中有着密切的关系。dyld 负责加载和链接应用程序所需的动态链接库,而 Objective-C 运行时则负责管理和执行应用程序中的 Objective-C 代码。dyld 和 Objective-C 运行时协同工作,确保应用程序能够正确启动和运行。
map_images 分析:加载镜像文件
map_images 命令可以分析 iOS 程序的镜像文件,并显示这些镜像文件的加载地址、大小、权限等信息。我们可以利用 map_images 命令来分析应用程序的启动和加载过程,并了解应用程序所需的动态链接库。
利用 dyld 和 ObjC 进行逆向分析
我们可以利用 dyld 和 ObjC 的知识来进行 iOS 程序的逆向分析。例如,我们可以利用 dyld 加载应用程序的可执行文件和动态链接库,然后利用 Objective-C 运行时来执行应用程序中的 Objective-C 代码。这样,我们可以绕过应用程序的保护机制,并分析应用程序的内部实现。
结论
dyld 和 ObjC 是 iOS 程序启动和加载过程中两个重要的组件。它们协同工作,确保应用程序能够正确启动和运行。我们可以利用 dyld 和 ObjC 的知识来进行 iOS 程序的逆向分析,并了解应用程序的内部实现。