Objective-C Mach-O文件格式深入理解
Mach-O(Mach Object),是一种基于Mach内核的文件格式,苹果很多文件都采用这种格式,最常见的就是可执行文件和动态库。
当然,还有.o的目标文件、.a和.framework的静态库以及动态连接器dyld等等。
利用MachOView可以查看Mach-O文件的内部结构,以Mac微信为例:

1、Mach64 Header(文件头)
包含模数、CPU类型、文件类型、加载指令的数量和大小以及文件状态信息。

1)模数:表示该二进制所支持的CPU位数,用于校验。
#define MH_MAGIC 0xfeedface // 32位
#define MH_MAGIC_64 0xfeedfacf // 64位
2)文件状态信息:即Flags,包含一些状态位。例如MH_DYLDLINK,表示该二进制不能再静态链接。
2、Load Commands(加载指令)


1)LC_SEGMENT_64:加载段
__TEXT:代码段
__DATA:数据段
2)LC_DYLD_INFO_ONLY:
3)LC_SYMTAB:加载符号表,
4)LC_DYSYMTAB:加载符号表
5)LC_LOAD_DYLINKER:加载动态链接器dyld,用于后续加载动态库。

6)LC_UUID:加载二进制的UUID,唯一标识,常用于解析crash堆栈。

7)LC_VERSION_MIN_MACOSX:加载该二进制支持的最小操作系统版本,对应于工程配置中的Deployment Target。

8)LC_SOURCE_VERSION:
9)LC_MAIN:加载main函数。
10)LC_DYLIB:加载动态库,外挂如WeChatPlugin,会增加一条这样的指令,用于加载自定义的动态库。

11)LC_RPATH:加载@rpath,对应于工程配置中的Runpath Search Paths。
12)LC_FUNCTION_STARTS:加载函数入口信息。
13)LC_DATA_IN_CODE:
14)LC_CODE_SIGNATURE:加载签名,用于校验,外挂如WeChatPlugin,会删掉这条指令。
3、Session64(节)

1)__objc_classlist:class-dump就是利用这节把应用的类和对应的方法导出来。
参考链接:
https://developer.apple.com/documentation/kernel/mach_header_64/1525810-flags?language=objc
https://opensource.apple.com/source/xnu/xnu-4570.1.46/EXTERNAL_HEADERS/mach-o/loader.h.auto.html
https://sourceforge.net/projects/machoview/
注:通常所说的XNU内核是Mach的封装。
Objective-C Mach-O文件格式深入理解的更多相关文章
- Android ELF文件格式
最近一直在学习elf相关信息.一个小总结,这里记录,也方便以后查阅. ELF是类Unix类系统,当然也包含Android系统上的可运行文件格式(也包含.so和.o类文件). 能够理解为Android系 ...
- 音视频入门-14-JPEG文件格式详解
* 音视频入门文章目录 * JPEG 文件格式解析 JPEG 文件使用的数据存储方式有多种.最常用的格式称为 JPEG 文件交换格式(JPEG File Interchange Format,JFIF ...
- 苹果ipa软件包破解笔记
苹果的验证机制: Appstore上的应用都採用了DRM(digital rights management)数字版权加密保护技术,直接的表现是A帐号购买的app,除A外的帐号无法使用,事实上就是有了 ...
- iOS 符号表恢复 & 逆向支付宝
推荐序 本文介绍了恢复符号表的技巧,并且利用该技巧实现了在 Xcode 中对目标程序下符号断点调试,该技巧可以显著地减少逆向分析时间.在文章的最后,作者以支付宝为例,展示出通过在 UIAlertVie ...
- iOS 静态库和动态库(库详解)
什么是库 ? 库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式.库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行. 库的分类 开源库:源代码是公开的,可以看到每个实现 ...
- MachO文件详解--逆向开发
今天是逆向开发的第5天内容--MachO文件(Mac 和 iOS 平台可执行的文件),在逆向开发中是比较重要的,下面我们着重讲解一下MachO文件的基本内容和使用. 一.MachO概述 1. 概述 M ...
- 减小ipa体积之删除frameWork中无用mach-O文件
最近项目末期, 我们团队为了ipa的大小使用不少的体积减小的方法, 除了一些常规的方法之外, 我分享一下自己研究出来的新思路. 首先我们来简单的介绍一下mach-O. 什么是mach-O? Mach- ...
- 解析 MACH_O 文件
现在做iOS开发的挺多,了解一下在苹果平台上程序运行的原理 解析 MACH_O 文件 这篇文章描述了如何解析 Mach-O 文件并稍微解释了一下它的格式.这不是一份权威指南,不过当你不知从何开始时,它 ...
- 为什么要使用Nginx?
这里做了些基准测试表明nginx打败了其它的轻量级的web服务器和代理服务器,同样也赢了相对不是那么轻量级的产品. 有人说这些基准测试是不准确的,因为在这样那样的环境下,做的比较不一致.我倾向同意基准 ...
随机推荐
- java_完数
题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序,读入两个正整数n和 ...
- 如何把SVG小图片转换为 html字体图表
自制作的简单字体图表使用案例:查看demo 制作步骤: 1:登录制作工具在线网站 https://icomoon.io/ 2:右上角红色 按钮进入到:https://icomoon.io/app/#/ ...
- HTML--SVG基础
一 SVG概述 SVG是Scalable Vector Graphics的缩写,即缩放式矢量图形; 优点: 1.使用编辑器即可编辑图形; 2.基于XML,SVG图形可以被很容易的搜索,脚本化和压缩; ...
- python之数据类型
1.整数(int)integer 直接写出数字就是整数例: a = 0#查看变量的数据类型 type() -> #<class 'int'> class类,类型,类别print(10 ...
- video 铺满父元素(object-fit: fill;)
遇到这个属性,是在给video 嵌入一个div时,导致video播放器上下有灰色.在控制台查看video默认样式的时候看到了这个属性. 播放器上下的灰色,不是我们想要的样式,如果能完全覆盖就更好了. ...
- 微软Azure AspNetCore微服务实战 第一期
微服务大家已经不在陌生了,相对传统单体架构其带来了更大的灵活性与多方位的效率提升. 2017官方发布了EshopOnContainers的微服务项目,其结合了.Net Core.Azure.Docke ...
- 微软 WPC 2014 合作伙伴keynote
本周一,2014 微软WPC (Worldwide Partner Conference) 合作者伙伴大会在美国华盛顿开幕,微软除了介绍了Azure.云端化的Office 365和Windows Ph ...
- JMeter 利用Jmeter批量数据库插入数据
利用Jmeter批量数据库插入数据 by:授客 QQ:1033553122 1. 启动Jmeter 2. 添加 DBC Connection Configuration 右键线程组-> ...
- mac下载的excel如果带有超链接,url被转义问题
注释的代码是file开头的,这种链接在mac系统进行跳转url会转义 hyperlink 还有一种就是http这种就可以正常跳转了. String sLink = basePath + "/ ...
- MySQL8的注意点
最近使用MySQL8,发现两个问题,略记如下: 1. 新建用户无法使用JDBC或者Navicat等登陆,报错信息为 认证失败 ,原因为 新版 MySQL 认证插件变化(变为caching_sha2_p ...