关于 mach-o 的一些笔记

2018-01-22  本文已影响24人  JackYao

mach-o 格式文件

mach-o 的文件类型

image.png

可以在xnu源码中,查看到Mach-O格式的详细定义(https://opensource.apple.com/tarballs/xnu/
EXTERNAL_HEADERS/mach-o/fat.h
EXTERNAL_HEADERS/mach-o/loader.h

mach-o 的基本结构

image.png

一个Mach-O文件包含3个主要区域

官方描述: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/MachOTopics/0-Introduction/introduction.html

查看 mach-o 相关信息的工具

Universal Binary(通用二进制文件, 也叫胖二进制文件 也叫 Fat Binary)

同时适用于多种架构的二进制文件
包含了多种不同架构的独立的二进制文件

注意

如何查找系统动态库的可执行文件

从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)
缓存文件路径:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX

如何从动态库共享缓存抽取动态库

# 可以使用dyld源码中的launch-cache/dsc_extractor.cpp
# 将#if 0前面的代码删除(包括#if 0),把最后面的#endif也删掉

# 编译dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp

# 使用dsc_extractor
./dsc_extractor  动态库共享缓存文件的路径   用于存放抽取结果的文件夹

Mac/iOS 系统如何加载动态库

利用/usr/lib/dyld 程序加载动态库

注意
dyld 只能加载以下三种mach-o文件

dyld 属于 DILINKER 类型, 所以不能自己加载自己

APP 是从开发到安装到手机的过程

工程 -> 编译,链接,签名 生成.app (可执行文件由源代码生成) -> zip 压缩为 IPA 包

逆向的思路

其余的小技巧

上一篇 下一篇

猜你喜欢

热点阅读