Mach-O
- Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式.常见的Mach-O文件比如iOS开发好的代码打包好后就是Mach-O格式的文件.
-
Apple中定义的Mach-O文件包含图一中几种:
图一:Mach-O文件定义格式
可以在xnu源码中,查看到Mach-O格式的详细定义:https://opensource.apple.com/tarballs/xnu/
常见的几种Mach-O文件
目标文件(.o)
静态库文件(.a),静态库其实就是N个.o合并在一起
MH_EXECUTE:可执行文件
.app/xx
MH_DYLIB:动态库文件
.dylib
.framework/xx
MH_DYLINKER:动态链接编辑器
/usr/lib/dyld
MH_DSYM:存储着二进制文件符号信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)
Mach-O的基本结构
- 点击查看官方描述
- 主要包含三个部分如图二
1.Header
文件类型、目标架构类型等
2.Load commands
描述文件在虚拟内存中的逻辑结构、布局
3.Raw segment data
在Load commands中定义的Segment的原始数据
图二:Mach-O的三部分部分
命令查看Mach-O信息
1.查看Mach-O的文件类型
$ file Mach-O文件路径
-
例如查看APP支持的架构(arm64或者32)如图三
图三:file命令查看Mach-O结构
2.查看Mach-O的特定部分如图四(头信息或者段信息)
$ otool -h Mach-O文件路径 //查看头信息
$ otool -l Mach-O文件路径 | grep cryptid//查看Mach-O文件路径文件是否加密
图四:查看Mach-O头信息
3.多架构Mach-O文件的处理,可以将arm64和32分开,合并
$ lipo -info 文件路径//看架构信息
$ lipo 文件路径 -thin 架构类型 -output 输出文件路径//导出某种特定架构
$ lipo 文件路径1 文件路径2 -output 输出文件路径//合并多种架构
Mach-OGUI查看工具Mach-OView
MachOView下载编译即可.
编译出来有问题的话,可以直接百度下载.