美文网首页
15期_iOS_探究Mach-O

15期_iOS_探究Mach-O

作者: 萧修 | 来源:发表于2023-08-17 01:00 被阅读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文件结构

  • Header:包含二进制文件的一般信息(字节顺序,架构类型,加载指令的数量)
  • Load conmands:包含很多内容的表(区域的位置,符号表,动态符号表)
  • Data:包含Segment信息

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

相关文章

网友评论

      本文标题:15期_iOS_探究Mach-O

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