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

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

詳細

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

1
2
3
4
5
6
7
package main

import "fmt"

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ 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