美文网首页
Mach-O与Xcode编译环境配置

Mach-O与Xcode编译环境配置

作者: Bepawbikvy | 来源:发表于2021-02-25 20:13 被阅读0次
    什么是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编译环境配置

          本文链接:https://www.haomeiwen.com/subject/bgrrfltx.html