阅读 516

golang 程序启动流程学习笔记

随便编写一个main文件,编译。

go build -gcflags "-N -l" main.go -o main     ##为了找到程序入口,需要禁止内联、优化复制代码


找到程序入口地址

gdb main
b *0x1054b20
info b复制代码



找到对应入口代码




rt0_go中几个比较重要的call调用,可以在runtime包下其他文件找到对应的go代码

CALL   runtime·args(SB)                    #初始化参数,argc、argv - runtime1.go
CALL   runtime·osinit(SB)                  #初始化os,cpu核数,内存分页数 - os_darwin.go
CALL   runtime·schedinit(SB)               #goroutine调度器初始化 - proc.go
// create a new goroutine to start program
MOVQ $runtime·mainPC(SB), AX               #执行runtime.main
PUSHQ  AXPUSHQ  $0       
CALL   runtime·newproc(SB)                 #开启新的携程,执行main函数复制代码




文章分类
阅读
文章标签