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

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

詳細

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

1234567
package main

import "fmt"

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

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

 1 2 3 4 5 6 7 8 910111213
$ 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
comments powered by Disqus