什么是mach-o文件
macos
、iOS
、iPadOS
存储程序和库的文件格式。对应系统通过应用的二进制接口(application binary interface
)简称ABI
来运行格式的文件
mach-o的文件类型有哪些
1.Executable:应用程序可执行文件,如.m/.h文件经过编译后会生成对应的Mach-O文件,如下图
mach-o-1.png
2.Dylib Library:动态链接库
3.Static Library:静态链接库
4.Bundle:不能被链接 Dylib,只能在运行使用dlopen()加载
5.Relocatable Object File:可重定向文件类型
mach-o文件结构
下面先来一张图大致了解一下mach-o
文件的结构
mach -header 头部
可以确定文件运行的框架,文件类型,cpu类型。所有指令的大小,从下面的结构体就可以看出
struct mach_header_64 {
uint32_t magic; /*确定Mach-O文件运行框架,如64位/32位*/
cpu_type_t cputype; /* cpu specifier */
cpu_subtype_t cpusubtype; /* machine specifier */
uint32_t filetype; /* type of file */
uint32_t ncmds; /* number of load commands */
uint32_t sizeofcmds; /* the size of all the load commands */
uint32_t flags; /* flags */
uint32_t reserved; /* reserved */
};
可以通过objdump --macho -private-header ${MACH_PATH}
在终端命令来查看头部信息
也可通过
MachOView
这个工具来查看mach-header1.png
Load Commands(加载命令)
告诉加载器如何处理mach-o文件。紧接这header后面,其通用的数据结构至少包含下面字段:
struct load_command {
uint32_t cmd; /* type of load command (指令类型)*/
uint32_t cmdsize; /* total size of command bytes (指令的大小)*/
};
通过下面的图可以大致了解有哪些指令,及指令的一些信息
LC_Commond.png
指令类型
下面一张图详细介绍了指令的类型,及作用
指令类型.png
Data区域
data段主要数据集中在Section区域,section主要包含TEXT和DATA,下面我们通过machoview看一下:
data区域.png
`
网友评论