go tool objdump 反汇编使用说明

1、使用objdump查看可执行文件的汇编代码

go build -gcflags "-N -l" test.go

objdump -S --disassemble test > test.objdump

在输出的文件中拉到最下面就能看到。

2、使用go tool查看汇编

将 Go 的二进制文件反编译成汇编代码,同时可以打印出 Go 源码。

go tool objdump
usage: go tool objdump [-S] [-gnu] [-s symregexp] binary [start end]

  -S    print Go code alongside assembly
  -gnu
        print GNU assembly next to Go assembly (where supported)
  -s string
        only dump symbols matching this regexp

通常用法

go tool objdump -S -s "main.fun1" main

-S:在旁边打印出 Go 源码。

-s :可选,匹配具体要打印的片段,支持正则表达式。

main:编译后的可执行文件。

package main

func main() {
	example(make([]string, 2, 4), "hello", 10)
}

func example(slice []string, str string, i int) {
	panic("Want stack trace")
}
go build main64.go

go tool objdump -S -s "main.main" main64.exe

TEXT main.main(SB) D:/dev/php/magook/trunk/server/golang/project/demo1/main64.go
func main() {
  0x459ec0              493b6610                CMPQ 0x10(R14), SP
  0x459ec4              7622                    JBE 0x459ee8
  0x459ec6              4883ec18                SUBQ $0x18, SP
  0x459eca              48896c2410              MOVQ BP, 0x10(SP)
  0x459ecf              488d6c2410              LEAQ 0x10(SP), BP
        example(make([]string, 2, 4), "hello", 10)
  0x459ed4              488d0565460000          LEAQ type.*+17728(SB), AX
        panic("Want stack trace")
  0x459edb              488d1dae260200          LEAQ runtime.buildVersion.str+16(SB), BX
  0x459ee2              e8b943fdff              CALL runtime.gopanic(SB)
  0x459ee7              90                      NOPL
func main() {
  0x459ee8              e85387ffff              CALL runtime.morestack_noctxt.abi0(SB)
  0x459eed              ebd1                    JMP main.main(SB)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值