Mach-O与Xcode编译环境配置

什么是Mach-O?

Mach-O(Mach Object)是macOS、iOS、iPadOS存储程序和库的文件格式。对应系统通过应用二进制接口(application binary interface,缩写为ABI)来运行该格式的文件。

Mach-O格式作为BSD系统的a.out格式的替代,它提供了更强的扩展性,并提升了符号表中信息的访问速度。Mach-O文件格式保存在编译过程和链接过程中产生的机器代码和数据,从而为静态链接及动态链接的代码提供单一文件格式。


可执行文件调用过程:
  • 调用fork函数,创建一个process
  • 调用execve或其衍生函数,在该进程上加载,执行Mach-O文件
    当我们调用execve,内核实际上在执行以下操作:
  • 将文件加载到内存
  • 开始分析Mach-O中的mach_header,以确保它是有效的Mach-O文件
    打开终端输入
$ objdump --macho --private-headers /Users/bepa/Library/Developer/Xcode/DerivedData/LoginApp-dmjlwlualsxjekeluddaletddbxm/Build/Products/Debug-iphonesimulator/LoginApp.app/LoginApp 

可以看到大量的Load command

image.png

$ objdump --macho --private-headers /Users/bepa/Library/Developer/Xcode/DerivedData/LoginApp-dmjlwlualsxjekeluddaletddbxm/Build/Products/Debug-iphonesimulator/LoginApp.app/LoginApp | grep 'LC_MAIN' -A 3

Mach-O = 文件配置 + 二进制代码(header+二进制)

image.png

链接的本质就是把多个目标文件组合成一个文件

你可能感兴趣的:(Mach-O与Xcode编译环境配置)