Skip to content

Instantly share code, notes, and snippets.

@inaz2
Last active October 14, 2015 04:04
Show Gist options
  • Save inaz2/672da97f01081ccd02b6 to your computer and use it in GitHub Desktop.
Save inaz2/672da97f01081ccd02b6 to your computer and use it in GitHub Desktop.
using socket in golang
package main
import (
"fmt"
"log"
"net"
)
func main() {
conn, err := net.Dial("tcp", "www.google.com:80")
if err != nil {
log.Fatal(err)
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
buf := make([]byte, 8192)
status, err := conn.Read(buf)
if status > 0 {
fmt.Println(string(buf))
}
}
$ nm -n hello
0000000000400c00 T main.main
0000000000400c00 T text
0000000000400ef0 T main.init
0000000000400f40 T type..hash.[1]interface {}
0000000000400ff0 T type..eq.[1]interface {}
00000000004010c0 T runtime.(*TypeAssertionError).RuntimeError
00000000004010d0 T runtime.(*TypeAssertionError).Error
00000000004012f0 T runtime.newTypeAssertionError
0000000000401440 T runtime.errorString.RuntimeError
0000000000401450 T runtime.errorString.Error
00000000004014c0 T runtime.newErrorString
0000000000401520 T runtime.errorCString.RuntimeError
0000000000401530 T runtime.errorCString.Error
00000000004015b0 T runtime.newErrorCString
00000000004015d0 T runtime.printany
0000000000401820 T runtime.panicwrap
0000000000401960 T runtime.(*Func).Name
00000000004019a0 T runtime.(*Func).Entry
00000000004019e0 T runtime.(*Func).FileLine
0000000000401a50 T runtime.GOROOT
0000000000401ab0 T runtime.init·1
0000000000401b40 T runtime.gc_m_ptr
0000000000401b60 T runtime.gc_itab_ptr
0000000000401b80 T runtime.init
0000000000401bd0 T type..hash.runtime.TypeAssertionError
0000000000401ce0 T type..eq.runtime.TypeAssertionError
0000000000401e50 T runtime.(*errorString).RuntimeError
0000000000401ef0 T runtime.(*errorString).Error
0000000000401fd0 T runtime.(*errorCString).RuntimeError
0000000000402060 T runtime.(*errorCString).Error
0000000000402110 T type..hash.runtime._defer
00000000004021e0 T type..eq.runtime._defer
00000000004022f0 T type..hash.runtime._panic
0000000000402340 T type..eq.runtime._panic
00000000004023d0 T type..hash.runtime.g
0000000000402530 T type..eq.runtime.g
00000000004026e0 T type..hash.runtime.mcachelist
0000000000402730 T type..eq.runtime.mcachelist
0000000000402760 T type..hash.[61]runtime.mcachelist
0000000000402810 T type..eq.[61]runtime.mcachelist
0000000000402890 T type..hash.runtime.mcache
00000000004029a0 T type..eq.runtime.mcache
0000000000402ab0 T type..hash.runtime.p
0000000000402b80 T type..eq.runtime.p
0000000000402c90 T type..hash.struct { Size uint32; Mallocs uint64; Frees uint64 }
0000000000402d60 T type..eq.struct { Size uint32; Mallocs uint64; Frees uint64 }
0000000000402db0 T type..hash.[61]struct { Size uint32; Mallocs uint64; Frees uint64 }
0000000000402e60 T type..eq.[61]struct { Size uint32; Mallocs uint64; Frees uint64 }
0000000000402ef0 T type..hash.runtime.MemStats
0000000000402f80 T type..eq.runtime.MemStats
0000000000403080 T runtime.memhash
0000000000403120 T runtime.memequal
0000000000403180 T runtime.memprint
(snip)
$ objdump -d hello
hello: file format elf64-x86-64
Disassembly of section .text:
0000000000400c00 <main.main>:
400c00: 64 48 8b 0c 25 f0 ff mov rcx,QWORD PTR fs:0xfffffffffffffff0
400c07: ff ff
400c09: 48 8d 44 24 c8 lea rax,[rsp-0x38]
400c0e: 48 3b 01 cmp rax,QWORD PTR [rcx]
400c11: 77 07 ja 400c1a <main.main+0x1a>
400c13: e8 48 35 02 00 call 424160 <runtime.morestack00>
400c18: eb e6 jmp 400c00 <main.main>
400c1a: 48 81 ec b8 00 00 00 sub rsp,0xb8
400c21: 48 8d 1c 25 50 e2 50 lea rbx,ds:0x50e250
400c28: 00
400c29: 48 8d 2c 24 lea rbp,[rsp]
400c2d: 48 89 ef mov rdi,rbp
400c30: 48 89 de mov rsi,rbx
400c33: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400c35: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400c37: 48 8d 1c 25 c0 eb 51 lea rbx,ds:0x51ebc0
400c3e: 00
400c3f: 48 8d 6c 24 10 lea rbp,[rsp+0x10]
400c44: 48 89 ef mov rdi,rbp
400c47: 48 89 de mov rsi,rbx
400c4a: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400c4c: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400c4e: e8 dd 9d 03 00 call 43aa30 <net.Dial>
400c53: 48 8b 5c 24 20 mov rbx,QWORD PTR [rsp+0x20]
400c58: 48 89 5c 24 68 mov QWORD PTR [rsp+0x68],rbx
400c5d: 48 8b 5c 24 28 mov rbx,QWORD PTR [rsp+0x28]
400c62: 48 89 5c 24 70 mov QWORD PTR [rsp+0x70],rbx
400c67: 48 8b 4c 24 30 mov rcx,QWORD PTR [rsp+0x30]
400c6c: 48 8b 54 24 38 mov rdx,QWORD PTR [rsp+0x38]
400c71: 48 83 f9 00 cmp rcx,0x0
400c75: 0f 84 97 00 00 00 je 400d12 <main.main+0x112>
400c7b: 48 8d 7c 24 58 lea rdi,[rsp+0x58]
400c80: 48 31 c0 xor rax,rax
400c83: 48 ab stos QWORD PTR es:[rdi],rax
400c85: 48 ab stos QWORD PTR es:[rdi],rax
400c87: 48 8d 5c 24 58 lea rbx,[rsp+0x58]
400c8c: 48 89 5c 24 50 mov QWORD PTR [rsp+0x50],rbx
400c91: 48 c7 84 24 a8 00 00 mov QWORD PTR [rsp+0xa8],0x1
400c98: 00 01 00 00 00
400c9d: 48 c7 84 24 b0 00 00 mov QWORD PTR [rsp+0xb0],0x1
400ca4: 00 01 00 00 00
400ca9: 48 8b 5c 24 50 mov rbx,QWORD PTR [rsp+0x50]
400cae: 48 89 9c 24 a0 00 00 mov QWORD PTR [rsp+0xa0],rbx
400cb5: 00
400cb6: 48 83 bc 24 a0 00 00 cmp QWORD PTR [rsp+0xa0],0x0
400cbd: 00 00
400cbf: 0f 84 16 02 00 00 je 400edb <main.main+0x2db>
400cc5: 48 89 0c 24 mov QWORD PTR [rsp],rcx
400cc9: 48 89 54 24 08 mov QWORD PTR [rsp+0x8],rdx
400cce: e8 fd 8c 00 00 call 4099d0 <runtime.convI2E>
400cd3: 48 8d 5c 24 10 lea rbx,[rsp+0x10]
400cd8: 48 8b bc 24 a0 00 00 mov rdi,QWORD PTR [rsp+0xa0]
400cdf: 00
400ce0: 48 89 de mov rsi,rbx
400ce3: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400ce5: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400ce7: 48 8b 9c 24 a0 00 00 mov rbx,QWORD PTR [rsp+0xa0]
400cee: 00
400cef: 48 89 1c 24 mov QWORD PTR [rsp],rbx
400cf3: 48 8b 9c 24 a8 00 00 mov rbx,QWORD PTR [rsp+0xa8]
400cfa: 00
400cfb: 48 89 5c 24 08 mov QWORD PTR [rsp+0x8],rbx
400d00: 48 8b 9c 24 b0 00 00 mov rbx,QWORD PTR [rsp+0xb0]
400d07: 00
400d08: 48 89 5c 24 10 mov QWORD PTR [rsp+0x10],rbx
400d0d: e8 7e 8f 03 00 call 439c90 <log.Fatal>
400d12: 48 c7 04 24 c0 40 4e mov QWORD PTR [rsp],0x4e40c0
400d19: 00
400d1a: 48 8b 5c 24 68 mov rbx,QWORD PTR [rsp+0x68]
400d1f: 48 89 5c 24 08 mov QWORD PTR [rsp+0x8],rbx
400d24: 48 8b 5c 24 70 mov rbx,QWORD PTR [rsp+0x70]
400d29: 48 89 5c 24 10 mov QWORD PTR [rsp+0x10],rbx
400d2e: e8 dd 8c 00 00 call 409a10 <runtime.convI2I>
400d33: 48 8d 5c 24 18 lea rbx,[rsp+0x18]
400d38: 48 8d 2c 24 lea rbp,[rsp]
400d3c: 48 89 ef mov rdi,rbp
400d3f: 48 89 de mov rsi,rbx
400d42: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400d44: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400d46: 48 8d 1c 25 40 82 51 lea rbx,ds:0x518240
400d4d: 00
400d4e: 48 8d 6c 24 10 lea rbp,[rsp+0x10]
400d53: 48 89 ef mov rdi,rbp
400d56: 48 89 de mov rsi,rbx
400d59: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400d5b: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400d5d: 48 8d 7c 24 20 lea rdi,[rsp+0x20]
400d62: 48 31 c0 xor rax,rax
400d65: 48 ab stos QWORD PTR es:[rdi],rax
400d67: 48 ab stos QWORD PTR es:[rdi],rax
400d69: 48 ab stos QWORD PTR es:[rdi],rax
400d6b: e8 f0 79 02 00 call 428760 <fmt.Fprintf>
400d70: 48 c7 04 24 80 fe 4b mov QWORD PTR [rsp],0x4bfe80
400d77: 00
400d78: 48 c7 44 24 08 00 20 mov QWORD PTR [rsp+0x8],0x2000
400d7f: 00 00
400d81: 48 c7 44 24 10 00 20 mov QWORD PTR [rsp+0x10],0x2000
400d88: 00 00
400d8a: e8 e1 a4 01 00 call 41b270 <runtime.makeslice>
400d8f: 48 8b 54 24 18 mov rdx,QWORD PTR [rsp+0x18]
400d94: 48 8b 4c 24 20 mov rcx,QWORD PTR [rsp+0x20]
400d99: 48 8b 44 24 28 mov rax,QWORD PTR [rsp+0x28]
400d9e: 48 89 94 24 88 00 00 mov QWORD PTR [rsp+0x88],rdx
400da5: 00
400da6: 48 89 54 24 08 mov QWORD PTR [rsp+0x8],rdx
400dab: 48 89 8c 24 90 00 00 mov QWORD PTR [rsp+0x90],rcx
400db2: 00
400db3: 48 89 4c 24 10 mov QWORD PTR [rsp+0x10],rcx
400db8: 48 89 84 24 98 00 00 mov QWORD PTR [rsp+0x98],rax
400dbf: 00
400dc0: 48 89 44 24 18 mov QWORD PTR [rsp+0x18],rax
400dc5: 48 8b 5c 24 70 mov rbx,QWORD PTR [rsp+0x70]
400dca: 48 89 1c 24 mov QWORD PTR [rsp],rbx
400dce: 48 8b 5c 24 68 mov rbx,QWORD PTR [rsp+0x68]
400dd3: 48 8b 5b 30 mov rbx,QWORD PTR [rbx+0x30]
400dd7: ff d3 call rbx
400dd9: 48 8b 44 24 20 mov rax,QWORD PTR [rsp+0x20]
400dde: 48 8b 5c 24 28 mov rbx,QWORD PTR [rsp+0x28]
400de3: 48 8b 5c 24 30 mov rbx,QWORD PTR [rsp+0x30]
400de8: 48 83 f8 00 cmp rax,0x0
400dec: 0f 8e d5 00 00 00 jle 400ec7 <main.main+0x2c7>
400df2: 48 8d 7c 24 78 lea rdi,[rsp+0x78]
400df7: 48 31 c0 xor rax,rax
400dfa: 48 ab stos QWORD PTR es:[rdi],rax
400dfc: 48 ab stos QWORD PTR es:[rdi],rax
400dfe: 48 8d 5c 24 78 lea rbx,[rsp+0x78]
400e03: 48 89 5c 24 50 mov QWORD PTR [rsp+0x50],rbx
400e08: 48 c7 84 24 a8 00 00 mov QWORD PTR [rsp+0xa8],0x1
400e0f: 00 01 00 00 00
400e14: 48 c7 84 24 b0 00 00 mov QWORD PTR [rsp+0xb0],0x1
400e1b: 00 01 00 00 00
400e20: 48 8b 5c 24 50 mov rbx,QWORD PTR [rsp+0x50]
400e25: 48 89 9c 24 a0 00 00 mov QWORD PTR [rsp+0xa0],rbx
400e2c: 00
400e2d: 48 83 bc 24 a0 00 00 cmp QWORD PTR [rsp+0xa0],0x0
400e34: 00 00
400e36: 0f 84 93 00 00 00 je 400ecf <main.main+0x2cf>
400e3c: 48 8b 9c 24 88 00 00 mov rbx,QWORD PTR [rsp+0x88]
400e43: 00
400e44: 48 89 1c 24 mov QWORD PTR [rsp],rbx
400e48: 48 8b 9c 24 90 00 00 mov rbx,QWORD PTR [rsp+0x90]
400e4f: 00
400e50: 48 89 5c 24 08 mov QWORD PTR [rsp+0x8],rbx
400e55: 48 8b 9c 24 98 00 00 mov rbx,QWORD PTR [rsp+0x98]
400e5c: 00
400e5d: 48 89 5c 24 10 mov QWORD PTR [rsp+0x10],rbx
400e62: e8 19 13 02 00 call 422180 <runtime.slicebytetostring>
400e67: 48 8d 5c 24 18 lea rbx,[rsp+0x18]
400e6c: 48 8d 6c 24 08 lea rbp,[rsp+0x8]
400e71: 48 89 ef mov rdi,rbp
400e74: 48 89 de mov rsi,rbx
400e77: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400e79: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400e7b: 48 c7 04 24 20 43 4c mov QWORD PTR [rsp],0x4c4320
400e82: 00
400e83: e8 48 87 00 00 call 4095d0 <runtime.convT2E>
400e88: 48 8d 5c 24 18 lea rbx,[rsp+0x18]
400e8d: 48 8b bc 24 a0 00 00 mov rdi,QWORD PTR [rsp+0xa0]
400e94: 00
400e95: 48 89 de mov rsi,rbx
400e98: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400e9a: 48 a5 movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi]
400e9c: 48 8b 9c 24 a0 00 00 mov rbx,QWORD PTR [rsp+0xa0]
400ea3: 00
400ea4: 48 89 1c 24 mov QWORD PTR [rsp],rbx
400ea8: 48 8b 9c 24 a8 00 00 mov rbx,QWORD PTR [rsp+0xa8]
400eaf: 00
400eb0: 48 89 5c 24 08 mov QWORD PTR [rsp+0x8],rbx
400eb5: 48 8b 9c 24 b0 00 00 mov rbx,QWORD PTR [rsp+0xb0]
400ebc: 00
400ebd: 48 89 5c 24 10 mov QWORD PTR [rsp+0x10],rbx
400ec2: e8 f9 7b 02 00 call 428ac0 <fmt.Println>
400ec7: 48 81 c4 b8 00 00 00 add rsp,0xb8
400ece: c3 ret
400ecf: 89 04 25 00 00 00 00 mov DWORD PTR ds:0x0,eax
400ed6: e9 61 ff ff ff jmp 400e3c <main.main+0x23c>
400edb: 89 04 25 00 00 00 00 mov DWORD PTR ds:0x0,eax
400ee2: e9 de fd ff ff jmp 400cc5 <main.main+0xc5>
...
(snip)
$ go version
go version go1.2.1 linux/amd64
$ go run hello.go
HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: http://www.google.co.jp/?gfe_rd=cr&ei=BccdVt6QNqiT8QeegIGQDw
Content-Length: 261
Date: Wed, 14 Oct 2015 03:07:49 GMT
Server: GFE/2.0
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=BccdVt6QNqiT8QeegIGQDw">here</A>.
</BODY></HTML>
$ go build hello.go
$ ./hello
HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: http://www.google.co.jp/?gfe_rd=cr&ei=DccdVvL6OKKT8QengIGgDw
Content-Length: 261
Date: Wed, 14 Oct 2015 03:07:57 GMT
Server: GFE/2.0
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=DccdVvL6OKKT8QengIGgDw">here</A>.
</BODY></HTML>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment