iOS Mach-o文件学习
2019-04-02 本文已影响0人
fordG
Mach Object mac和ios系统可执行文件的格式
分类
-
Executable应用程序的可执行文件
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文件的一些标志信息)具体参考这里
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<vmsize(动态链接申请的内存控件要大于文件大小)
image.png