`
lobin
  • 浏览: 417673 次
  • 性别: 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实现

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

    golang中文手册_golang中文手册_goapiCHM_golang中文手册.chm_

    Go语言,又称Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它设计的目标是提高开发者的生产效率,同时保持系统级编程的性能。Go语言的设计受到了C、 Pascal、 Miranda和...

    Golang如何调用Python代码详解

    Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 go 中的 cgo 模块...

    web无插件播放rtsp流和配套golang 的rtsp转码服务

    Golang程序(可能就是goRtsp.exe)作为一个中间层,它接收RTSP流,对视频流进行处理(例如,转码、切片),然后提供一个Web友好的格式,如HLS,使Web前端可以轻松地通过AJAX或Fetch API请求并播放这些流。...

    golang.org/x

    `golang.org/x` 是 Go 语言生态系统中的一个特殊仓库,包含了由 Go 语言官方维护但并未包含在标准库中的各种模块和工具。这个仓库包含了众多实用的第三方组件,如网络编程库、数据库驱动、文本处理工具等。由于 `...

    Pycharm Golang插件 jar

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

    golang.org/x包

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

    golang使用bass库播放mp3文件

    在Golang中,如果你想要实现音频播放功能,特别是在处理MP3文件时,可以利用外部库,比如BASS库。BASS是一个广泛使用的音频处理库,它提供了强大的音频播放、流处理和格式转换功能。在Golang中使用BASS库通常需要...

    zinx —— golang —— MMO游戏服务器开发对应客户端

    《Zinx:Golang构建MMO游戏服务器及客户端解析》 在现代网络游戏开发中,后端服务器扮演着至关重要的角色,它们负责处理玩家交互、游戏逻辑、数据存储等一系列任务。Zinx是一个用Golang编写的轻量级网络框架,特别...

    用Golang语言实现LoRa数据传输,并对收集信息进行处理

    在本项目中,我们将探讨如何使用Golang(Go语言)来实现LoRa数据的发送与接收,并对收集到的数据进行处理。 首先,理解Golang的基础是必要的。Golang是一种静态类型、编译型、并发型、垃圾回收的编程语言,以其简洁...

    Golang实现的HTTP客户端下载限速功能包.rar

    最近在学习Golang语言,中间遇到一个前辈指点,有一个学习原则:Learning By Doing。跟我之前学习Java的经验高度契合。在前一段时间学习洼坑中挣扎了好几天,差点就忘记这个重要的成功经验。 那么那什么来做练习呢...

    钉钉企业应用Demo(golang版)

    【钉钉企业应用Demo(golang版)】是一个官方提供的示例项目,旨在帮助开发者了解如何使用Golang语言来构建钉钉企业微应用。这个Demo包含了完整的源代码,为二次开发提供了便利,使得开发者能够快速上手,理解并利用...

    GOLANG语言实现SOCKET通讯粘包问题解决示例

    在GOLANG中,解决这个问题需要对网络编程原理和GOLANG的网络库有深入理解。本文将详细介绍如何使用GOLANG来解决SOCKET通信中的粘包问题。 首先,理解粘包产生的原因。TCP协议是基于流的,没有明确的数据边界。它会...

    golang 中文离线文档 go文档中文

    Go语言,又称Golang,是Google在2009年发布的一种开源编程语言,它旨在提高开发者的生产力和代码的可维护性。Go语言的设计灵感来源于C语言,但同时引入了垃圾回收、类型安全和并发编程等现代特性,使其成为构建高效...

    Golang实现字符串倒序的几种解决方案

    本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World –&gt; dlroW olleH 解决方案1: length := len(str) ...

    基于Golang语言结合领域驱动设计(DDD) 实现o2o业务模型项目源码

    本项目是采用Golang编程语言实现的一个基于领域驱动设计(Domain-Driven Design,简称DDD)的O2O(Online To Offline)业务模型。这个模型旨在为线上商店与线下门店提供全面的服务,包括但不限于多渠道管理、多门店...

    国密加密 sm4 sm2 java python golang

    国密加密解密 sm4 sm2 的java python golang实现,java和python,golang的有一定区别,需要修改点东西才可以实现。 SM4Key = ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) ...

    golang语言实现的文件上传与文件下载功能示例

    本文实例讲述了golang实现的文件上传与文件下载功能。分享给大家供大家参考,具体如下: upload.go 复制代码 代码如下:package common import (  “io/ioutil”  “os”  “path”  “github.com/gin-gonic/gin...

    pycharm2018.3之golang插件

    在`pycharm2018.3之golang插件`这个主题中,我们将探讨如何在PyCharm 2018.3版本上安装和配置Golang插件,以便在这款强大的Python IDE中编写和调试Go代码。 首先,我们需要了解为什么在PyCharm 2018.3这个特定版本...

    Golang中文API.rar

    《Golang中文API详解》 在编程领域,API(Application Programming Interface)是开发者与软件库、框架或操作系统交互的关键工具。对于Go语言,一个由Google开发的高效、简洁且并发性能出色的编程语言,其官方提供...

Global site tag (gtag.js) - Google Analytics