iOS逆向 - Mach-O

简介

Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式

属于Mach-O格式的文件类型有

可以在xnu源码中,查看到Mach-O格式的详细定义

xnu/EXTERNAL_HEADERS/mach-o/loader.h
#define MH_OBJECT   0x1     /* relocatable object file */
#define MH_EXECUTE  0x2     /* demand paged executable file */
#define MH_FVMLIB   0x3     /* fixed VM shared library file */
#define MH_CORE     0x4     /* core file */
#define MH_PRELOAD  0x5     /* preloaded executable file */
#define MH_DYLIB    0x6     /* dynamically bound shared library */
#define MH_DYLINKER 0x7     /* dynamic link editor */
#define MH_BUNDLE   0x8     /* dynamically bound bundle file */
#define MH_DYLIB_STUB   0x9     /* shared library stub for static */
                    /*  linking only, no section contents */
#define MH_DSYM     0xa     /* companion file with only debug */
                    /*  sections */
#define MH_KEXT_BUNDLE  0xb     /* x86_64 kexts */

常见的Mach-O文件类型

  • MH_OBJECT
    目标文件(.o)
    静态库文件(.a),静态库其实就是N个.o合并在一起
  • MH_EXECUTE:可执行文件
    .app/xx
  • MH_DYLIB:动态库文件
    .dylib
    .framework/xx
  • MH_DYLINKER:动态链接编辑器
    /usr/lib/dyld
  • MH_DSYM:存储着二进制文件符号信息的文件

Mach-O的基本结构

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

  • Header
    文件类型、目标架构类型等
  • Load commands
    描述文件在虚拟内存中的逻辑结构、布局
  • Raw segment data
    在Load commands中定义的Segment的原始数据

窥探Mach-O的结构

1、命令行工具

file:查看Mach-O的文件类型

file 文件目录

otool:查看Mach-O特定部分和段的内容

lipo:常用于多架构Mach-O文件的处理
查看架构信息:

lipo  -info  文件路径

导出某种特定架构:

lipo  文件路径  -thin  架构类型  -output  输出文件路径

合并多种架构:

lipo  文件路径1  文件路径2  -output  输出文件路径

2、GUI工具

MachOView

dyld和Mach-O

  • dyld也是Mach-O格式文件,属于MH_DYLINKER类型
  • dyld用于加载以下类型的Mach-O文件
    MH_EXECUTE
    MH_DYLIB
    MH_BUNDLE
  • APP的可执行文件、动态库都是由dyld负责加载的

其他

在Xcode中查看target的Mach-O类型

Build Settings->Mach-O Type


Xocde
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • UIKit的Mach-O文件在哪里?? 系统的动态库 从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都...
    Rathen阅读 5,353评论 0 2
  • Mach-O文件类型 Mach-O文件基本结构 通用二进制文件 Mach-O是Mach object的缩写,是Ma...
    当前明月阅读 7,124评论 0 4
  • Mach-O Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式.常见的Ma...
    程序猿_K阅读 4,617评论 0 3
  • 13. Hook原理介绍 13.1 Objective-C消息传递(Messaging) 对于C/C++这类静态语...
    Flonger阅读 5,323评论 0 3
  • 一. 先给出一个结构图,大致了解一下内部的结构: 主要结构分成三个部分: Header部分:保存了该文件的一些基本...
    ldzSpace阅读 7,235评论 1 2

友情链接更多精彩内容