美文网首页
iOS - MachO文件

iOS - MachO文件

作者: 泽泽伐木类 | 来源:发表于2020-12-13 17:10 被阅读0次
定义

MachO是一种文件格式,内部包换:可执行文件,动态库静态库dyld,目标文件等。其中的可执行文件是一个通用二进制文件(多种架构),
可以通过lipo命令下的-thin拆分架构,-create合并架构。

lipo -thin xxx
lipo -create xxx
结构

MachO大致分为3个部分:

  • Header :用户快速确认该文件(描述信息),如CPU类型,文件类型等;
  • LoadCommands: 告诉加载器如何设置并加载二进制数据;
  • Data: 存放数据,如代码,字符串常量,类,方法等;
    MachO结构快照
DYLD

DYLD用于加载所有的库和可执行文件,在iOS中,APP启动时,libDyld开始介入,在之前的类的加载中有详细说过。这里再简单的说一下:
APP启动时,进入dyld::start->dyldbootstrap::start->dyld::main(),在dyld::main()中主要做了以下动作:

  1. 配置环境变量
  2. 加载共享缓存库 (系统库)
  3. 实例化主程序
  4. 加载动态库
  5. 链接主程序
  6. 初始化主程序(dyld::initializeMainExecutable()
  7. 执行main()

这里说一下比较核心的第6步:
内部会初始化libSystem,然后初始化libdispatch,之进入libObjc,并执行_objc_init(void),在这个函数内部有一个核心的回调注册:

libObjc内部:
_objc_init(){
  ........
   _dyld_objc_notify_register(&map_images,&load_images,&unmap_images);
  ........
}

map_images是对OC类的加载,load_Images是对OC中所有load方法的调用。该回调会在libDyld内部调用notifySingle()后触发。

之后会执行doModInitFunctions(),内部会调用项目内所有的全局C++对象的构造函数(带__attribute__((constructor))的函数)。

这里同时也说明了为什么APP启动之后是load()->C++->main()的执行顺序了。

相关文章

  • Mach-O文件(12)

    MachO文件(12) MachO文件 Mach-O其实是Mach Object文件格式的缩写,是mac以及iOS...

  • iOS:strip

    1.探索macho文件 1.1macho简介 Mach-O(Mach Object)是macOS、iOS、iPad...

  • DYLD 加载Mach-O的流程

    背景 大家都知道iOS在加载app的时候本质其实是加载app中的MachO文件,那么MachO文件又是谁来进行加载...

  • iOS - MachO文件

    定义 MachO是一种文件格式,内部包换:可执行文件,动态库,静态库,dyld,目标文件等。其中的可执行文件是一个...

  • iOS MachO文件

    一、MachO文件概述 Mach-O(Mach Object)是mac以及iOS上的格式, 类似于windows上...

  • 6.MachO

    MachO文件 MachO文件 MachO文件结构 DYLD Mach-O其实是Mach Object文件格式的缩...

  • MachO

    MachOView 一、MachO文件 Mach-O其实是Mach Object文件格式的缩写,是mac以及iOS...

  • iOS逆向工具篇&Cycript

    iOS逆向必备工具: IDAPro--逆向工程师的生命MachOView--查看MachO文件格式信息iOS-ap...

  • iOS逆向-砸壳(Clutch & dumpdecryp

    MachO文件 -> 苹果加密 -> 加壳文件加壳文件 -> 苹果解密 -> MachO文件(DYLD) 解密过程...

  • ios深入-MACHO文件解析

    ios深入-MACHO文件解析 发表于 2017-10-26 | 分类于 优化[https://dishibole...

网友评论

      本文标题:iOS - MachO文件

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