go 程序入口

1.先找到不同系统,不同芯片架构,入口对应的汇编文件

在runtime包下有rt0_系统(linux/windows)_芯片架构(amd64/arm64)的汇编文件,这些汇编文件就是go语言在不同系统,不同架构下的入口文件。就拿我们最常用的linux服务器,芯片x86-64为例子,对应文件rt0_linux_amd64.s。对应的入口汇编程序就是TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8,执行的是跳转指令JMP _rt0_amd64

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "textflag.h"

TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8
    JMP    _rt0_amd64(SB)

TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0
    JMP    _rt0_amd64_lib(SB)

  1. _rt0_amd64程序 在汇编文件asm_amd64.s里面

跳转到当前文件的runtime·rt0_go(SB)汇编程序

TEXT _rt0_amd64(SB),NOSPLIT,$-8
    MOVQ    0(SP), DI    // argc,启动时,也就是运行打包后的go可执行文件后面的参数数量
    LEAQ    8(SP), SI    // argv,启动时,也就是运行打包后的go可执行文件后面的参数
    JMP    runtime·rt0_go(SB)

3.

你可能感兴趣的:(go,go)