美文网首页
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