iOS Mach-o文件学习

Mach Object mac和ios系统可执行文件的格式

分类
  • Executable应用程序的可执行文件


    image.png

    image.png

    image.png
image.png

通过解压ipa包获取了一个和应用同名的二进制文件通过machoview查看获取到的Fat Binary类型为MH_Exectute有两种格式,一种arm_v7真机32位 arm64_all真机64位, executable文件分成三部分 header loadCommand Data


image.png

Header文件参数含义

  • Magic Number: 魔数 设备cpu位数
  • cputype: cpusubtype cpu类型自类型
  • filetype: Mach-o文件类型
  • number of load commands 缩写ncmds 加载器加载的命令数量
  • Size of load commands 所有加载的命令的大小
  • Flags 动态链接器的标志(字段表示文件标志,它是一个含有一组位标志的整数,指明了Mach-O文件的一些标志信息)具体参考这里
image.png

Load Command(加载指令,告诉加载器如何处理二进制数据,处理对方分别为内核,动态链接器等。加载指令紧跟在Header后的加载命令区。Load Commands 加载指令个数及大小在Header中定义( commands 的大小总和即为 Header->sizeofcmds 字段,共有 Header->ncmds 条加载命令)

作者:龙猫六六
链接:https://www.jianshu.com/p/8f3d3f6b6af8
来源:
著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。) segment command(段加载命令,需要加载到对应的进程控件) 参数含义

  • cmd: 指令类型
  • cmdsize: 之类加载的大小
  • segname
    image.png
  • vm address: 段的虚拟内存地址起始位置
  • vm size: 段的虚拟内存大小
  • file offset 段在文件中的偏移量
  • file size 段在文件中的大小
  • maximun vm protection: 段页面所需要的最高内存保护
  • initial vm protection: 段初始化的内存保护
  • number of sections: 段中包含的section的数量

段数据加载并映射到内存过程:从fileo ff处加载file size大小到虚拟内存vmaddr处,并占用虚拟内存大小为vmsize,一般情况下段名_TEXT,_DATA的file size=vmsize;段名_LINKDIT的file size

image.png

iOS堆栈信息解析(Mach-O)
mach-o
mach-o文件结构

你可能感兴趣的:(iOS Mach-o文件学习)