版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rznice/article/details/82052815
在GDB环境下可以通过如下设置让汇编语言按照inter格式或者是AT&T的格式显示
set disassembly-flavor intel 转换为intel格式的汇编
set disassembly-flavor att 转换为AT&T格式的汇编
也可以把这个配置到文件里面:
sudo echo “set disassembly-flavor intel”> ~/.gdbinit
可以使用 info line 命令来映射一个源码行到程序地址,然后使用命令disassemble/disass显示一个地址范围的机器指令
info line main.main
Line 49 of "/datainfo/work/golang/gotest/src/main.go" starts at address 0x4726e0 <main.main> and ends at 0x4726ef <main.main+15>.
通过disassemble add1 add2 来显示add1到2之间的汇编代码
disass 0x4726e0,0x4726ef
Dump of assembler code from 0x4726e0 to 0x4726ef:
0x00000000004726e0 <main.main+0>: mov %fs:0xfffffffffffffff8,%rcx
0x00000000004726e9 <main.main+9>: cmp 0x10(%rcx),%rsp
0x00000000004726ed <main.main+13>: jbe 0x47276c <main.main+140>
End of assembler dump.
也可以显示指定地址后面的汇编代码:
disass 0x4726e0
Dump of assembler code for function main.main:
0x00000000004726e0 <+0>: mov %fs:0xfffffffffffffff8,%rcx
0x00000000004726e9 <+9>: cmp 0x10(%rcx),%rsp
0x00000000004726ed <+13>: jbe 0x47276c <main.main+140>
0x00000000004726ef <+15>: sub $0x38,%rsp
0x00000000004726f3 <+19>: mov %rbp,0x30(%rsp)
0x00000000004726f8 <+24>: lea 0x30(%rsp),%rbp
0x00000000004726fd <+29>: movq $0x1,0x10(%rsp)
0x0000000000472706 <+38>: lea 0x10(%rsp),%rax
0x000000000047270b <+43>: mov %rax,0x18(%rsp)
0x0000000000472710 <+48>: lea 0x3ea09(%rip),%rcx # 0x4b1120 <go.itab.*types.Integer,types.LessAdder>
0x0000000000472717 <+55>: mov %rcx,0x20(%rsp)
0x000000000047271c <+60>: mov %rax,0x28(%rsp)
0x0000000000472721 <+65>: callq 0x427330 <runtime.printlock>
0x0000000000472726 <+70>: mov 0x20(%rsp),%rax
0x000000000047272b <+75>: mov 0x28(%rsp),%rcx
0x0000000000472730 <+80>: mov %rax,(%rsp)
0x0000000000472734 <+84>: mov %rcx,0x8(%rsp)
0x0000000000472739 <+89>: callq 0x427e60 <runtime.printiface>
0x000000000047273e <+94>: callq 0x4275b0 <runtime.printnl>
0x0000000000472743 <+99>: callq 0x4273b0 <runtime.printunlock>
0x0000000000472748 <+104>: movq $0x6,(%rsp)
0x0000000000472750 <+112>: callq 0x472680 <main.t1>
0x0000000000472755 <+117>: movq $0x7,(%rsp)
0x000000000047275d <+125>: callq 0x4726c0 <main.t2>
0x0000000000472762 <+130>: mov 0x30(%rsp),%rbp
0x0000000000472767 <+135>: add $0x38,%rsp
0x000000000047276b <+139>: retq
0x000000000047276c <+140>: callq 0x44e480 <runtime.morestack_noctxt>
0x0000000000472771 <+145>: jmpq 0x4726e0 <main.main>
End of assembler dump.
disassemble :
1,不带参数:默认的反汇编范围是所选择地址附近的汇编代码;
2,单个参数:当然也可以是函数名,因为函数名也是一个 地址;
3,两个参数:就是内存地址范围;