逆向学习笔记6——MachO文件
2018-05-04 本文已影响131人
危险地带_浅笑
官方介绍总共有11种格式! 是 Mach Object的缩写,是Mac/iOS 上用于存储程序,库的标准格式!
常见的格式:
- 1.可执行文件
- 2.objcet
- .o 文件(目标文件)
- .a 静态库文件.其实就是N个.o文件的集合
- 3.DYLIB: 动态库文件
- dylib
- framework
- 4.动态连接器
- 5.DSYM(存放崩溃信息)
.o文件
1,首先自己创建一个test.c文件,并写一些自己需要的代码
image.png
在终端执行
clang -c test.c,获得test.o文件,通过file test.o查看文件类型Mach-O 64-bit object x86_64
image.png
从他的文件类型,我们知道
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文件
image.png
注:.dylib查看方式也和.a文件的方式一样,这里就不在赘述了
动态库共享缓存
为了提高性能,系统的动态库文件都存在了动态库共享缓存里面!
image.png
动态加载器(dyld)
- dynamic linker
- dynamic loadel
image.png
选择MachO文件的类型
image.png
app包的架构
image.png
拆分/整合二进制文件
瘦身/拆分
$ 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:文件格式分析