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