Mach-O探索(一)

2021-08-15  本文已影响0人  沉淀纷飞

可执行文件

  什么是Mach-O呢?分析Mach-O对我们有什么帮助呢?
Mach-0其实是一种文件格式。Mach-O文件是Mach Object文件格式的缩写,它是用于可执行文件、动态库、目标代码的文件格式。作为a.out格式的替代,Mach-O格式提供了更强的扩展性,以及更快的符号表信息访问速度不同的操作系统,其可执行文件的格式也不同。系统内核将可执行文件读取到内存,然后根据可执行文件的头签名(magic魔术)判断二进制文件的格式,苹果系统可执行文件格式基本都是Mach-0文件。熟悉Mach-O文件格式,有助于更好的理解苹果底层的运行机制,更好的掌握dyld加载Mach-O的步骤。

通用二进制

  对于Apple而言不同CPU架构对应不同的指令集,如arm64x86_64,通用二进制格式就是将多种架构的Mach-O文件打包在一起,然后系统根据自己的CPU平台,选择合适的Mach-O,所以通用二进制格式也被称为胖二进制格式。例如我们在开发framework的时候,最后一步通常我们会将模拟器和真机的可执行文件合并在一起,生成一个通用二进制文件。
常用跟Mach-O相关指令:

**struct** fat_header {

uint32_t magic; /* FAT_MAGIC */

    // 可以让系统内核读取该文件时知道是通用二进制文件

uint32_t nfat_arch; /* number of structs that follow */

    // 说明下面有多个fat_arch结构体,即通用二进制文件包含多少个Mach-O

};
\
// 描述Mach-O

**struct** fat_arch {

    // 说明Mach-O适用的平台

cpu_type_t cputype; /* cpu specifier (int) */

cpu_subtype_t cpusubtype; /* machine specifier (int) */

    // 描述了Mach-O二进制位于通用二进制文件的位置

    // 偏移

uint32_t offset; /* file offset to this object file */

    // 大小

uint32_t size; /* size of this object file */

    // 页对齐

uint32_t align; /* alignment as a power of 2 */

};

  小结:

Mach-O文件的查看

上一篇 下一篇

猜你喜欢

热点阅读