`
lobin
  • 浏览: 437567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

golang

 
阅读更多

 

main

 

init

 

package main

import "fmt"

func main() {
	fmt.Printf("greet!\n")
}

 

>go tool compile -N -l Sample.go

>go tool objdump Sample.o

 

TEXT %22%22.main(SB) gofile..D:/home/admin/workstation/go/src/golearning/sample1/Sample.go

  Sample.go:16          0x33a                   648b0d14000000          MOVL FS:0x14, CX

  Sample.go:16          0x341                   8b8900000000            MOVL 0(CX), CX          [2:6]R_TLS_LE

  Sample.go:16          0x347                   3b6108                  CMPL 0x8(CX), SP

  Sample.go:16          0x34a                   7635                    JBE 0x381

  Sample.go:16          0x34c                   83ec20                  SUBL $0x20, SP

  Sample.go:17          0x34f                   8d0500000000            LEAL 0, AX              [2:6]R_ADDR:go.string."greet!\n"

  Sample.go:17          0x355                   890424                  MOVL AX, 0(SP)

  Sample.go:17          0x358                   c744240407000000        MOVL $0x7, 0x4(SP)

  Sample.go:17          0x360                   c744240800000000        MOVL $0x0, 0x8(SP)

  Sample.go:17          0x368                   c744240c00000000        MOVL $0x0, 0xc(SP)

  Sample.go:17          0x370                   c744241000000000        MOVL $0x0, 0x10(SP)

  Sample.go:17          0x378                   e800000000              CALL 0x37d              [1:5]R_CALL:fmt.Printf

  Sample.go:18          0x37d                   83c420                  ADDL $0x20, SP

  Sample.go:18          0x380                   c3                      RET

  Sample.go:16          0x381                   e800000000              CALL 0x386              [1:5]R_CALL:runtime.morestack_noctxt

  Sample.go:16          0x386                   ebb2                    JMP %22%22.main(SB)

 

TEXT %22%22.init(SB) gofile..<autogenerated>

  gofile..<autogenerated>:1     0x3ae                   648b0d14000000          MOVL FS:0x14, CX

  gofile..<autogenerated>:1     0x3b5                   8b8900000000            MOVL 0(CX), CX      [2:6]R_TLS_LE

  gofile..<autogenerated>:1     0x3bb                   3b6108                  CMPL 0x8(CX), SP

  gofile..<autogenerated>:1     0x3be                   7638                    JBE 0x3f8

  gofile..<autogenerated>:1     0x3c0                   0fb60500000000          MOVZX 0, AX         [3:7]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x3c7                   80f801                  CMPL $0x1, AL

  gofile..<autogenerated>:1     0x3ca                   7702                    JA 0x3ce

  gofile..<autogenerated>:1     0x3cc                   eb01                    JMP 0x3cf

  gofile..<autogenerated>:1     0x3ce                   c3                      RET

  gofile..<autogenerated>:1     0x3cf                   0fb60500000000          MOVZX 0, AX         [3:7]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x3d6                   80f801                  CMPL $0x1, AL

  gofile..<autogenerated>:1     0x3d9                   7402                    JE 0x3dd

  gofile..<autogenerated>:1     0x3db                   eb07                    JMP 0x3e4

  gofile..<autogenerated>:1     0x3dd                   e800000000              CALL 0x3e2          [1:5]R_CALL:runtime.throwinit

  gofile..<autogenerated>:1     0x3e2                   0f0b                    UD2

  gofile..<autogenerated>:1     0x3e4                   c6050000000001          MOVB $0x1, 0        [2:6]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x3eb                   e800000000              CALL 0x3f0          [1:5]R_CALL:fmt.init

  gofile..<autogenerated>:1     0x3f0                   c6050000000002          MOVB $0x2, 0        [2:6]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x3f7                   c3                      RET

  gofile..<autogenerated>:1     0x3f8                   e800000000              CALL 0x3fd          [1:5]R_CALL:runtime.morestack_noctxt

  gofile..<autogenerated>:1     0x3fd                   ebaf                    JMP %22%22.init(SB)

 

package main

import "fmt"

func init() {
	fmt.Printf("@author:", "adam")
}

func main() {
	fmt.Printf("greet!\n")
}

 

>go tool compile -N -l Sample_with_init.go

>go tool objdump Sample_with_init.o

TEXT %22%22.init.0(SB) gofile..D:/home/admin/workstation/go/src/golearning/sample1/Sample_with_init.go

  Sample_with_init.go:16        0x5be                   648b0d14000000          MOVL FS:0x14, CX

  Sample_with_init.go:16        0x5c5                   8b8900000000            MOVL 0(CX), CX      [2:6]R_TLS_LE

  Sample_with_init.go:16        0x5cb                   3b6108                  CMPL 0x8(CX), SP

  Sample_with_init.go:16        0x5ce                   767b                    JBE 0x64b

  Sample_with_init.go:16        0x5d0                   83ec38                  SUBL $0x38, SP

  Sample_with_init.go:17        0x5d3                   c744242400000000        MOVL $0x0, 0x24(SP)

  Sample_with_init.go:17        0x5db                   c744242800000000        MOVL $0x0, 0x28(SP)

  Sample_with_init.go:17        0x5e3                   8d442424                LEAL 0x24(SP), AX

  Sample_with_init.go:17        0x5e7                   89442420                MOVL AX, 0x20(SP)

  Sample_with_init.go:17        0x5eb                   8400                    TESTB AL, 0(AX)

  Sample_with_init.go:17        0x5ed                   8d0d00000000            LEAL 0, CX          [2:6]R_ADDR:type.string

  Sample_with_init.go:17        0x5f3                   894c2424                MOVL CX, 0x24(SP)

  Sample_with_init.go:17        0x5f7                   8d0d00000000            LEAL 0, CX          [2:6]R_ADDR:%22%22.statictmp_0

  Sample_with_init.go:17        0x5fd                   894c2428                MOVL CX, 0x28(SP)

  Sample_with_init.go:17        0x601                   8400                    TESTB AL, 0(AX)

  Sample_with_init.go:17        0x603                   eb00                    JMP 0x605

  Sample_with_init.go:17        0x605                   8944242c                MOVL AX, 0x2c(SP)

  Sample_with_init.go:17        0x609                   c744243001000000        MOVL $0x1, 0x30(SP)

  Sample_with_init.go:17        0x611                   c744243401000000        MOVL $0x1, 0x34(SP)

  Sample_with_init.go:17        0x619                   8d0500000000            LEAL 0, AX          [2:6]R_ADDR:go.string."@author:"

  Sample_with_init.go:17        0x61f                   890424                  MOVL AX, 0(SP)

  Sample_with_init.go:17        0x622                   c744240408000000        MOVL $0x8, 0x4(SP)

  Sample_with_init.go:17        0x62a                   8b44242c                MOVL 0x2c(SP), AX

  Sample_with_init.go:17        0x62e                   89442408                MOVL AX, 0x8(SP)

  Sample_with_init.go:17        0x632                   c744240c01000000        MOVL $0x1, 0xc(SP)

  Sample_with_init.go:17        0x63a                   c744241001000000        MOVL $0x1, 0x10(SP)

  Sample_with_init.go:17        0x642                   e800000000              CALL 0x647          [1:5]R_CALL:fmt.Printf

  Sample_with_init.go:18        0x647                   83c438                  ADDL $0x38, SP

  Sample_with_init.go:18        0x64a                   c3                      RET

  Sample_with_init.go:16        0x64b                   e800000000              CALL 0x650          [1:5]R_CALL:runtime.morestack_noctxt

  Sample_with_init.go:16        0x650                   e969ffffff              JMP %22%22.init.0(SB)

 

TEXT %22%22.main(SB) gofile..D:/home/admin/workstation/go/src/golearning/sample1/Sample_with_init.go

  Sample_with_init.go:20        0x695                   648b0d14000000          MOVL FS:0x14, CX

  Sample_with_init.go:20        0x69c                   8b8900000000            MOVL 0(CX), CX      [2:6]R_TLS_LE

  Sample_with_init.go:20        0x6a2                   3b6108                  CMPL 0x8(CX), SP

  Sample_with_init.go:20        0x6a5                   7635                    JBE 0x6dc

  Sample_with_init.go:20        0x6a7                   83ec20                  SUBL $0x20, SP

  Sample_with_init.go:21        0x6aa                   8d0500000000            LEAL 0, AX          [2:6]R_ADDR:go.string."greet!\n"

  Sample_with_init.go:21        0x6b0                   890424                  MOVL AX, 0(SP)

  Sample_with_init.go:21        0x6b3                   c744240407000000        MOVL $0x7, 0x4(SP)

  Sample_with_init.go:21        0x6bb                   c744240800000000        MOVL $0x0, 0x8(SP)

  Sample_with_init.go:21        0x6c3                   c744240c00000000        MOVL $0x0, 0xc(SP)

  Sample_with_init.go:21        0x6cb                   c744241000000000        MOVL $0x0, 0x10(SP)

  Sample_with_init.go:21        0x6d3                   e800000000              CALL 0x6d8          [1:5]R_CALL:fmt.Printf

  Sample_with_init.go:22        0x6d8                   83c420                  ADDL $0x20, SP

  Sample_with_init.go:22        0x6db                   c3                      RET

  Sample_with_init.go:20        0x6dc                   e800000000              CALL 0x6e1          [1:5]R_CALL:runtime.morestack_noctxt

  Sample_with_init.go:20        0x6e1                   ebb2                    JMP %22%22.main(SB)

 

TEXT %22%22.init(SB) gofile..<autogenerated>

  gofile..<autogenerated>:1     0x709                   648b0d14000000          MOVL FS:0x14, CX

  gofile..<autogenerated>:1     0x710                   8b8900000000            MOVL 0(CX), CX      [2:6]R_TLS_LE

  gofile..<autogenerated>:1     0x716                   3b6108                  CMPL 0x8(CX), SP

  gofile..<autogenerated>:1     0x719                   763d                    JBE 0x758

  gofile..<autogenerated>:1     0x71b                   0fb60500000000          MOVZX 0, AX         [3:7]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x722                   80f801                  CMPL $0x1, AL

  gofile..<autogenerated>:1     0x725                   7702                    JA 0x729

  gofile..<autogenerated>:1     0x727                   eb01                    JMP 0x72a

  gofile..<autogenerated>:1     0x729                   c3                      RET

  gofile..<autogenerated>:1     0x72a                   0fb60500000000          MOVZX 0, AX         [3:7]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x731                   80f801                  CMPL $0x1, AL

  gofile..<autogenerated>:1     0x734                   7402                    JE 0x738

  gofile..<autogenerated>:1     0x736                   eb07                    JMP 0x73f

  gofile..<autogenerated>:1     0x738                   e800000000              CALL 0x73d          [1:5]R_CALL:runtime.throwinit

  gofile..<autogenerated>:1     0x73d                   0f0b                    UD2

  gofile..<autogenerated>:1     0x73f                   c6050000000001          MOVB $0x1, 0        [2:6]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x746                   e800000000              CALL 0x74b          [1:5]R_CALL:fmt.init

  gofile..<autogenerated>:1     0x74b                   e800000000              CALL 0x750          [1:5]R_CALL:%22%22.init.0

  gofile..<autogenerated>:1     0x750                   c6050000000002          MOVB $0x2, 0        [2:6]R_ADDR:%22%22.initdone·

  gofile..<autogenerated>:1     0x757                   c3                      RET

  gofile..<autogenerated>:1     0x758                   e800000000              CALL 0x75d          [1:5]R_CALL:runtime.morestack_noctxt

  gofile..<autogenerated>:1     0x75d                   ebaa                    JMP %22%22.init(SB)

 

查看指定方法的反编译汇编代码

以上面的例子,查看main方法的汇编代码:

>go tool objdump -s main Sample.o

TEXT %22%22.main(SB) gofile..D:/home/admin/workstation/go/src/golearning/sample1/Sample.go

  Sample.go:16          0x33a                   648b0d14000000          MOVL FS:0x14, CX

  Sample.go:16          0x341                   8b8900000000            MOVL 0(CX), CX          [2:6]R_TLS_LE

  Sample.go:16          0x347                   3b6108                  CMPL 0x8(CX), SP

  Sample.go:16          0x34a                   7635                    JBE 0x381

  Sample.go:16          0x34c                   83ec20                  SUBL $0x20, SP

  Sample.go:17          0x34f                   8d0500000000            LEAL 0, AX              [2:6]R_ADDR:go.string."greet!\n"

  Sample.go:17          0x355                   890424                  MOVL AX, 0(SP)

  Sample.go:17          0x358                   c744240407000000        MOVL $0x7, 0x4(SP)

  Sample.go:17          0x360                   c744240800000000        MOVL $0x0, 0x8(SP)

  Sample.go:17          0x368                   c744240c00000000        MOVL $0x0, 0xc(SP)

  Sample.go:17          0x370                   c744241000000000        MOVL $0x0, 0x10(SP)

  Sample.go:17          0x378                   e800000000              CALL 0x37d              [1:5]R_CALL:fmt.Printf

  Sample.go:18          0x37d                   83c420                  ADDL $0x20, SP

  Sample.go:18          0x380                   c3                      RET

  Sample.go:16          0x381                   e800000000              CALL 0x386              [1:5]R_CALL:runtime.morestack_noctxt

  Sample.go:16          0x386                   ebb2                    JMP %22%22.main(SB)

分享到:
| 386
评论

相关推荐

    golang.org/x包

    在Golang生态系统中,`golang.org/x`是一个非常重要的包集合,它包含了大量由Go官方维护和贡献的扩展库。这些包覆盖了各种功能,从网络编程到文本处理,为Go开发者提供了丰富的工具和解决方案。`golang.org/x`包系列...

    循环鼠标自动点击功能- Golang实现

    Golang,作为一种现代且高效的编程语言,因其强大的系统级编程能力和并发特性而受到广泛欢迎。在本文中,我们将深入探讨如何利用Golang实现这个功能,并了解相关的核心知识点。 首先,我们需要了解的是Golang的图形...

    golang环境配置及对接s3对象存储demo手册及源代码

    在本文中,我们将深入探讨如何配置Golang环境以及如何使用Golang对接Amazon S3对象存储。首先,让我们从安装Golang环境开始。 1. **安装Go环境** - **Windows**:在Windows操作系统上,你可以从Go的官方网站下载...

    golang语言,window系统下安装go语言包安装包

    golang语言,window系统下安装go语言包安装包 在 Windows 系统下安装 Go 语言包,可以按照以下步骤进行: 下载 Go 语言包 在官网 https://golang.org/dl/ 中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 ...

    Pycharm Golang插件 jar

    标题中的"Pycharm Golang插件 jar"指的是在PyCharm这款流行的Python集成开发环境中安装Golang编程语言的扩展插件。PyCharm是由JetBrains公司开发的一款强大的IDE,它支持多种编程语言,包括Python、Go等。由于Golang...

    golang实现高性能IM单聊系统,UDP分发

    Golang,由于其并发模型、内存管理以及高效的网络库,成为了构建此类系统的热门选择。本篇将深入探讨如何利用Golang实现一个高性能的IM单聊系统,特别关注UDP(用户数据报协议)在其中的作用和分发策略。 首先,...

Global site tag (gtag.js) - Google Analytics