Mach-O
- Mach-O是Mach object的縮寫,是Mac\iOS上用于存儲程序、庫的標(biāo)準(zhǔn)格式.常見的Mach-O文件比如iOS開發(fā)好的代碼打包好后就是Mach-O格式的文件.
-
Apple中定義的Mach-O文件包含圖一中幾種:
可以在xnu源碼中你画,查看到Mach-O格式的詳細(xì)定義:https://opensource.apple.com/tarballs/xnu/
常見的幾種Mach-O文件
目標(biāo)文件(.o)
靜態(tài)庫文件(.a)抬闷,靜態(tài)庫其實就是N個.o合并在一起
MH_EXECUTE:可執(zhí)行文件
.app/xx
MH_DYLIB:動態(tài)庫文件
.dylib
.framework/xx
MH_DYLINKER:動態(tài)鏈接編輯器
/usr/lib/dyld
MH_DSYM:存儲著二進(jìn)制文件符號信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)
Mach-O的基本結(jié)構(gòu)
- 點擊查看官方描述
- 主要包含三個部分如圖二
1.Header
文件類型、目標(biāo)架構(gòu)類型等
2.Load commands
描述文件在虛擬內(nèi)存中的邏輯結(jié)構(gòu)主届、布局
3.Raw segment data
在Load commands中定義的Segment的原始數(shù)據(jù)
命令查看Mach-O信息
1.查看Mach-O的文件類型
$ file Mach-O文件路徑
-
例如查看APP支持的架構(gòu)(arm64或者32)如圖三
2.查看Mach-O的特定部分如圖四(頭信息或者段信息)
$ otool -h Mach-O文件路徑 //查看頭信息
$ otool -l Mach-O文件路徑 | grep cryptid//查看Mach-O文件路徑文件是否加密
3.多架構(gòu)Mach-O文件的處理,可以將arm64和32分開,合并
$ lipo -info 文件路徑//看架構(gòu)信息
$ lipo 文件路徑 -thin 架構(gòu)類型 -output 輸出文件路徑//導(dǎo)出某種特定架構(gòu)
$ lipo 文件路徑1 文件路徑2 -output 輸出文件路徑//合并多種架構(gòu)
Mach-OGUI查看工具M(jìn)ach-OView
MachOView下載編譯即可.
編譯出來有問題的話,可以直接百度下載.