Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何获得短程程序的程序集输出?_Assembly_Go - Fatal编程技术网

Assembly 如何获得短程程序的程序集输出?

Assembly 如何获得短程程序的程序集输出?,assembly,go,Assembly,Go,我用围棋写了这个程序: package main func add(a, b int) int { return a + b } func main () { add(1,2) } 出于好奇,我想看看这个程序在汇编中是什么样子的 我找到了从Go程序输出汇编指令的两种方法,主要是: go tool compile -S file.go > file.S 或 但这两种方法似乎产生了完全不同的结果 如何打印出构成Go程序的可读汇编指令 这两个工具都提供了可读的汇编,只是G

我用围棋写了这个程序:

package main

func add(a, b int) int {
    return a + b
}

func main () {
    add(1,2)
}
出于好奇,我想看看这个程序在汇编中是什么样子的

我找到了从Go程序输出汇编指令的两种方法,主要是:

go tool compile -S file.go > file.S

但这两种方法似乎产生了完全不同的结果


如何打印出构成Go程序的可读汇编指令

这两个工具都提供了可读的汇编,只是Go工具链使用了Plan 9汇编语法,这对于未经培训的人来说有点奇怪。使用GNU binutils中的
objdump
这样的工具来获得更熟悉的语法。

接下来,您知道一种将用户代码与运行时包分开查看的简单方法吗?请参阅:和@olivia您是指当您使用
objdump
这样的工具时吗?只转储与用户代码相对应的对象文件,而不是整个二进制文件。@CodyGray这在Go中不容易实现,因为Go对象文件实际上不包含机器代码。他们使用Plan 9方法,其中目标文件包含一些伪指令的汇编代码,这些伪指令在链接过程中没有得到优化。谢谢你的回答,但我觉得你有点忽略了这个问题。我的困惑主要是由于我从两个命令得到的输出不同。正如我后来了解到的,当使用
objdump
时,生成的文件似乎不仅包含程序,还包含编译的每个库和内置函数。最后,我设法使用
go build-gcflags-S file.go
打印出程序的汇编代码。
go tool objdump executable > disassembly