-
IPA包里的可執(zhí)行文件就是Mach-O文件
-
Mach-O文件壓縮一下就是IPA
-
Mach-O是Mach object的縮寫,是Mac\iOS上用于存儲程序、庫的標準格
-
屬于Mach-O格式的文件類型有
Mach-O格式的文件 可以在xnu(內核源碼)源碼中,查看到Mach-O格式的詳細定義(https://opensource.apple.com/tarballs/xnu/)
EXTERNAL_HEADERS/mach-o/fat.h
EXTERNAL_HEADERS/mach-o/loader.h
-
常見的Mach-O文件類型

注:可以通過 file 指令,查看文件的類型
MH_OBJECT
目標文件(.o)
靜態(tài)庫文件(.a),靜態(tài)庫其實就是N個.o合并在一起MH_EXECUTE:可執(zhí)行文件
.app/xxMH_DYLIB:動態(tài)庫文件
.dylib
.framework/xxMH_DYLINKER:動態(tài)鏈接編輯器
/usr/lib/dyldMH_DSYM:存儲著二進制文件符號信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)
擴展知識FreeBSD Unix Linux XNU Darwin MacOSX
Universal Binary 通用二進制文件
$(ARCHS_STANDARD)Xcode內置的環(huán)境變量,不同XCode的值不一樣,通用的一些架構值不一樣。
lipo -info XXX 查看二進制文件,有哪些架構。
lipo XX -thin armv7 -output file_name 廋身成為 armv7 文件。
lipo -create XX_arm64 XXX_armv7 -output file_name 把不同架構的同一二進制文件,合為一個通用二進制文件。
Mach-O的基本結構
一個Mach-O文件包含3個主要區(qū)域
Header
文件類型、目標架構類型等Load commands (像是一個指針一樣,指向它的原始段數(shù)據)
描述文件在虛擬內存中的邏輯結構、布局Raw segment data 原始段數(shù)據
在Load commands中定義的Segment的原始數(shù)據GUI工具
pMachOView(https://github.com/gdbinit/MachOView)
