GDB disassemble

版权声明:本文为博主原创文章,未经博主允许不得转载。 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,两个参数:就是内存地址范围;

猜你喜欢

转载自blog.csdn.net/rznice/article/details/82052815
GDB