随便编写一个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函数复制代码