-
IPA包里的可执行文件就是Mach-O文件
-
Mach-O文件压缩一下就是IPA
-
Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格
-
属于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)
静态库文件(.a),静态库其实就是N个.o合并在一起MH_EXECUTE
:可执行文件
.app/xxMH_DYLIB
:动态库文件
.dylib
.framework/xxMH_DYLINKER
:动态链接编辑器
/usr/lib/dyldMH_DSYM
:存储着二进制文件符号信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)
扩展知识FreeBSD Unix Linux XNU Darwin MacOSX
Universal Binary
通用二进制文件
$(ARCHS_STANDARD)
Xcode内置的环境变量,不同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个主要区域
Header
文件类型、目标架构类型等Load commands (像是一个指针一样,指向它的原始段数据)
描述文件在虚拟内存中的逻辑结构、布局Raw segment data 原始段数据
在Load commands中定义的Segment的原始数据GUI工具
pMachOView(https://github.com/gdbinit/MachOView)