這個(gè)系列主要是總結(jié)MachO文件的知識點(diǎn)膜蛔。machO文件指的是蘋果公司的可執(zhí)行文件。一般在app里面使用右鍵->顯示包內(nèi)容的目錄下面轩拨,有一個(gè)不帶后綴名的可執(zhí)行文件扩氢,這個(gè)就是這個(gè)app的macho文件來
可以使用 file的命令查看可執(zhí)行文件的類型。下面表示這個(gè)macho是64位炸卑,arm64架構(gòu)的既鞠。當(dāng)然也存在多個(gè)架構(gòu)的,這種有多個(gè)架構(gòu)的通常稱為FAT文件盖文。
~> file `machoPath`
~> Mach-O 64-bit executable arm64
一般可以使用MachOView打開MachO文件嘱蛋,下載地址 https://github.com/gdbinit/MachOView . 下載后打開xcode工程編譯好就可以用了。注意的是MachOView啟動之后是沒有任何界面的五续,只有頂部的工具欄洒敏。你也可以直接將machO拖到任務(wù)欄的machoView圖標(biāo)上就能打開。
image.png
macho一般由Header返帕、Load Commands桐玻、Section、Other Data組成荆萤。
Header里的字段含義如下:
- Magic Number:MachO文件魔數(shù):0xcafebabe是FAT镊靴、0xffeedface是ARMv7铣卡、0xfeedfacf是ARM64.
- CPU Type、CPU Subtype:CPU版本和子版本
- File Type:文件類型偏竟。一般的有MH_EXECUTE(可執(zhí)行文件)煮落、MH_OBJECT(目標(biāo)文件)、MH_DYLIIB(動態(tài)庫)
- Number of Load Commands: 加載命令的數(shù)量
- Size of Load Commands:加載名字的大小
- Flags:dyld加載需要的一些標(biāo)記踊谋。其中MH_PIE表示啟動地址空間布局隨機(jī)化(ASLR)蝉仇。可以在Xcode中搜索打開mach-o/loader.h進(jìn)行查看
- Rever:保留字段