官方介绍总共有11种格式! 是 Mach Object的缩写,是Mac/iOS 上用于存储程序,库的标准格式!
常见的格式:
- 1.可执行文件
- 2.objcet
- .o 文件(目标文件)
- .a 静态库文件.其实就是N个.o文件的集合
- 3.DYLIB: 动态库文件
- dylib
- framework
- 4.动态连接器
- 5.DSYM(存放崩溃信息)
.o文件
1,首先自己创建一个test.c文件,并写一些自己需要的代码

在终端执行
clang -c test.c
,获得test.o文件,通过file test.o
查看文件类型Mach-O 64-bit object x86_64

从他的文件类型,我们知道
Object
不是可执行文件,执行clang -o test1 test.o
就可以获得一个test1
的可执行文件,在终端执行./test1
就直接打印出test
了。
.c,.o文件转成可执行文件,常用命令
- clang test.o //使用可执行文件的默认名称(这个不能双击打开,可以用在终端
./a.out
) - clang -o xxx test.o //给可执行文件命名
- clang -o xxx test.c //直接从.c文件生成 可执行文件
- clang -o xxx test1.c test2.c //将两个.c文件生成一个可执行文件
.a文件

注:.dylib查看方式也和.a文件的方式一样,这里就不在赘述了
动态库共享缓存
为了提高性能,系统的动态库文件都存在了动态库共享缓存里面!

动态加载器(dyld)
- dynamic linker
- dynamic loadel
image.png
选择MachO文件的类型

app包的架构

拆分/整合二进制文件
瘦身/拆分
$ lipo xxx -thin armv7 -output macho_armv7 //xxx是app包的可执行文件
$ lipo xxx -thin armv64 -output macho_armv64
整合
$ lipo -create macho_armv7 macho_arm64 -output machO_v7_64
class-dump
如果安装MonkeyDev
了,注意配置好环境变量,
vim ~/.zshrc
export MonkeyDevPath=/opt/MonkeyDev
export MonkeyDevDeviceIP=
export PATH=/opt/MonkeyDev/bin:$PATH
拿到所有可执行文件中.h文件
$ class-dump -H MachO文件Path -o 头文件路径
相关资源趣探 Mach-O:文件格式分析
网友评论