go程序启动过程

go程序编译过程

当使用go build main.go时进行编译,将go源码文件转化成可执行目标文件,主要经历了以下几个过程:

  1. 将.go后缀的源文件,通过编译器,编译成以.s为后缀的汇编程序
  2. 将汇编程序,通过汇编器,编译成以.o为后缀的二进制可重定向目标文件
  3. 将.o文件,通过链接器进行链接,最终胜出可执行目标文件。

在编译过程中,go编译器主要进行了一下几个过程:

  1. 词法分析,通过设定的关键字,将字符序列转换成token序列
  2. 词法分析,对token序列进行分析,确定其语法结构(语法树)的过程
  3. 语义分析,遍历语法树,对语法树的节点进行校验,确定其含义
  4. 中间代码生成,将语法树转换成中间代码(类似于java里的.class)
  5. 目标代码生成与优化,根据不同的平台、架构将中间代码转换成平台适配的代码

go程序启动过程分析

// 编译main.go
go build -gcflags "-N -l" -o main.o main.go

// 1. 通过gdb程序分析
gdb main.o

// 2. 通过objdump反编译分析
go tool objdump -S main.o > main.S

reference

  • go程序是怎样跑起来的
  • go语言设计与实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值