美文网首页
Swift编译流程、查看汇编语言的方式❤️1

Swift编译流程、查看汇编语言的方式❤️1

作者: 黄成瑞 | 来源:发表于2020-09-03 11:59 被阅读0次

    一、一些基本概念

    • API:Application Programming Interface 应用程序编程接口(源代码和库之间的接口)

    • ABI:Application Binary Interface 应用程序二进制接口 (应用程序与操作系统之间的底层接口,这个稳定了,也就说明Swift版本语言也就稳定了)

    • Object-C:开发语言

    • Swift:开发语言

    • Clang:作为编译器的前端(说白了就是编译器)

    • SwiftC:作为编译器的前端(说白了就是编译器)

    • LLVM:作为编译器的后端

    • x86:架构

    • ARM:架构

    扩展:ABI的稳定,也就意味着Swift语法基本不会有太大的变化了

    二、Swift编译流程

    • 1.编译器
      a.前端:OC的编译器是Clang,Swift的编译器是SwiftC(主要执行词法分析、生成语法树等等)
      b.后端:LLVM(主要执行生成对应平台的二进制代码)
    • 2.编译流程
      a.OC:将OC转化为C,然后通过编译器前端Clang进行处理,处理后交给LLVM,最终生成对应架构的二进制代码,就是ARM
      b.Swift:Swift代码通过编译器前端SwiftC进行处理,处理后交给LLVM,最终生成对应架构的二进制代码,就是ARM
    Swift编译流程详细:
      SwiftCode代码 -> Swift AST语法树 -> Raw Swift IL特有中间代码 -> Canonical Swift IL特有简洁中间代码 -> LLVM IR中间代码  -> Assembly汇编代码 -> Executable二进制
    

    三、查看汇编语言

    • SwiftC是编译器的前端,那么这个编译器在我们的电脑哪里呢?
      XCode/Contents/Developer/Toolchains/XCodeDefault.xctoolchain/user/bin(一层一层找一下吧,可能直接输入这个路径找不到哦)

    • 利用SwiftC的一些操作

    1.新建一个Swift命令行项目
    2.终端cd到项目文件路径中
    3.1.生成语法树:swiftc -dump-ast xxx.swift
    3.2.生成SIL最简洁代码:swiftc -emit-sil xxx.swift
    3.3.生成LLVM IR代码:swiftc -emit-ir xxx.swift -o xxx.ll
    3.4.生成汇编代码:swiftc -emit -assembly main.swift -o main.s(这个很重要,可以看底层它都做了什么事情)
    3.5.*** XCode下断点、工具栏选择Debug、Debug Workflow、Always Show Disassembly
    
    • 简单分析汇编语言
    1.源码:(OC项目举例,Swift同理哦)
    int c = sizeof(int);
    
    2.生成汇编代码:(如何生成,参考上面👆3.5的操作噢~)
    0x100000f3b <+27>: movl    $0x4,  -0x14(%rbp)
    
    3.开始分析:
     -0x14(%rbp):这个是变量c的内存空间
    $0x4:立即数,4,说白了就是将4赋值给c
    
    4.浅层扩展:
    int c = sizeof(int); 等价与 int c = 4;
    
    5.深度扩展:
    callq:这代表的是函数调用
    movl:mov long - 字长传送 - 32位
    movw:mov word:字传送 - 16位
    movb:mov byte:字节传送 - 8位
    addq:加法指令
    

    相关文章

      网友评论

          本文标题:Swift编译流程、查看汇编语言的方式❤️1

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