iOS 探索 Mach-O 文件

什么是mach-o文件

macosiOSiPadOS存储程序和库的文件格式。对应系统通过应用的二进制接口(application binary interface)简称ABI来运行格式的文件

mach-o的文件类型有哪些

1.Executable:应用程序可执行文件,如.m/.h文件经过编译后会生成对应的Mach-O文件,如下图


mach-o-1.png

2.Dylib Library:动态链接库
3.Static Library:静态链接库
4.Bundle:不能被链接 Dylib,只能在运行使用dlopen()加载
5.Relocatable Object File:可重定向文件类型

mach-o文件结构

下面先来一张图大致了解一下mach-o文件的结构

mach-o.png

mach -header 头部

可以确定文件运行的框架,文件类型,cpu类型。所有指令的大小,从下面的结构体就可以看出

struct mach_header_64 {
    uint32_t    magic;      /*确定Mach-O文件运行框架,如64位/32位*/
    cpu_type_t  cputype;    /* cpu specifier */
    cpu_subtype_t   cpusubtype; /* machine specifier */
    uint32_t    filetype;   /* type of file */
    uint32_t    ncmds;      /* number of load commands */
    uint32_t    sizeofcmds; /* the size of all the load commands */
    uint32_t    flags;      /* flags */
    uint32_t    reserved;   /* reserved */
};

可以通过objdump --macho -private-header ${MACH_PATH} 在终端命令来查看头部信息

mach-header.png

也可通过MachOView这个工具来查看
mach-header1.png

Load Commands(加载命令)

告诉加载器如何处理mach-o文件。紧接这header后面,其通用的数据结构至少包含下面字段:

struct load_command {
    uint32_t cmd;       /* type of load command (指令类型)*/
    uint32_t cmdsize;   /* total size of command bytes (指令的大小)*/
};

通过下面的图可以大致了解有哪些指令,及指令的一些信息


LC_Commond.png

指令类型

下面一张图详细介绍了指令的类型,及作用


指令类型.png

Data区域

data段主要数据集中在Section区域,section主要包含TEXT和DATA,下面我们通过machoview看一下:


data区域.png

`

你可能感兴趣的:(iOS 探索 Mach-O 文件)