15期_iOS_探究Mach-O

2023-08-17  本文已影响0人  萧修

Mach-O简介

Mach-O是Mach Object文件格式的缩写,是mac以及iOS上可执行文件的格式

除了可执行文件,还有其他文件也是使用mach-O格式

Mach-O格式的常见文件
目标文件.o
库文件:.a、.dylib、Framework
可执行文件
dyld(动态链接器)
.dsym(符号表)

Mach-O 并非一定是可执行文件 , 它是一种文件格式 , 分为 Mach-O Object 目标文件 、 Mach-O ececutable 可执行文件、 Mach-O dynamically 动态库文件、 Mach-O dynamic linker 动态链接器文件、 Mach-O dSYM companion 符号表文件 , 等等

架构

通用二进制架构

lipo create 命令合并架构

lipo -info命令可以查看.a所支持架构

Mach-O文件结构

Mach Header

struct mach_header_64 {
    uint32_t    magic;      /* 魔数,快速定位64位/32位 */
    cpu_type_t  cputype;    /* cpu 类型 比如 ARM */
    cpu_subtype_t   cpusubtype; /* cpu 具体类型 比如arm64 , armv7 */
    uint32_t    filetype;   /* 文件类型 例如可执行文件 .. */
    uint32_t    ncmds;      /* load commands 加载命令条数 */
    uint32_t    sizeofcmds; /* load commands 加载命令大小*/
    uint32_t    flags;      /* 标志位标识二进制文件支持的功能 , 主要是和系统加载、链接有关*/
    uint32_t    reserved;   /* reserved , 保留字段 */
};

Load commands

告诉链接器如何加载mach-o文件

LC_segment_64:将文件中(32为或64位)的映射到进程地址空间中。
...等等

_TEXT

主程序代码

_stubs、_stub_helper:动态链接
_objc_methodname:方法名称

_DATA

紧跟text段之后
_got:Non-lazy Symbol Pointer:非懒加载符号表

Mach-O

上一篇 下一篇

猜你喜欢

热点阅读