美文网首页逆向+反编译
iOS 探索 Mach-O 文件

iOS 探索 Mach-O 文件

作者: qinghan | 来源:发表于2021-01-21 16:09 被阅读0次

    什么是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 文件

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