这个系列主要是总结MachO文件的知识点。machO文件指的是苹果公司的可执行文件。一般在app里面使用右键->显示包内容的目录下面,有一个不带后缀名的可执行文件,这个就是这个app的macho文件来
可以使用 file的命令查看可执行文件的类型。下面表示这个macho是64位,arm64架构的。当然也存在多个架构的,这种有多个架构的通常称为FAT文件。
~> file `machoPath`
~> Mach-O 64-bit executable arm64
一般可以使用MachOView打开MachO文件,下载地址 https://github.com/gdbinit/MachOView . 下载后打开xcode工程编译好就可以用了。注意的是MachOView启动之后是没有任何界面的,只有顶部的工具栏。你也可以直接将machO拖到任务栏的machoView图标上就能打开。
macho一般由Header、Load Commands、Section、Other Data组成。
Header里的字段含义如下:
- Magic Number:MachO文件魔数:0xcafebabe是FAT、0xffeedface是ARMv7、0xfeedfacf是ARM64.
- CPU Type、CPU Subtype:CPU版本和子版本
- File Type:文件类型。一般的有MH_EXECUTE(可执行文件)、MH_OBJECT(目标文件)、MH_DYLIIB(动态库)
- Number of Load Commands: 加载命令的数量
- Size of Load Commands:加载名字的大小
- Flags:dyld加载需要的一些标记。其中MH_PIE表示启动地址空间布局随机化(ASLR)。可以在Xcode中搜索打开mach-o/loader.h进行查看
- Rever:保留字段