鱒身(Masu_mi)のブログ

知った事をメモする場所。

Goバイナリのエントリポイント

goでは_startではなく_rt0_amd64_linuxがエントリポイントになっていた。

詳細

試しに下のHelloworld(sample.go)を準備する。

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}

以下を実行して確認した。

$ go build ./sample.go

$ readelf -e ./sample| grep 'Entry point address'
  Entry point address:               0x456130

$ objdump -f ./sample
./sample:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000456130

$ nm ./sample| grep 0456130
0000000000456130 T _rt0_amd64_linux