1.
.c -> .o ->可执行文件
2.
- MH_OBJECT
* 目标文件(.o)
* 静态库文件(.a),静态库其实就是n个.o合并在一起 - MH_EXECUTE:可执行文件
- MH_DYLIB:动态库文件
* .dylib
* .framework/xx - MH_DYLINKER:动态链接编辑器
* /usr/lib/dyld - MH_DSYM:存储着二进制符号信息的文件
* .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)
3.Universal Binary(通用二进制文件),也叫Fat Binary(胖二进制文件)
- 包含多种架构文件
- 查看文件类型:
lipo -info [文件]
- 拆分不同架构文件:
lipo [文件] -thin [armv7/armv64] -output [生成的文件名]
- 合并不同架构文件:
lipo -create [架构1文件] [架构2文件] -output [生成的文件]
4.Mach-O基本结构
一个Mach-O文件包含3个主要区域
1.Header
文件类型,目标架构类型等
2.Load commands
描述文件在虚拟内存中的逻辑结构、布局
3.Raw segment data
在Load commands中定义的Segment的原始数据
5.用otool
查看Mach-O文件信息
也可以用MachOView工具(https://github.com/gdbinit/MachOView)