gdb反汇编可用disassemble/disass命令。用法如下:
1、基本功能介绍
disassemble
disassemble [Function]
指定要反汇编的函数。如果指定,反汇编命令将产生整个函数的反汇编输出。
(gdb) disassemble main
disassemble [Address]
指定要反汇编的地址。请注意,当仅指定一个地址时,此命令将反汇编包含给定地址的整个函数,包括其上方的指令。
(gdb) disassemble 0x00000000004008fd
disassemble [Start],[End]
指定要反汇编的起始地址和结束地址。如果使用这种形式,该命令将不会反汇编整个函数,而只会反汇编起始地址和结束地址之间的指令。例如:
(gdb) disassemble 0x000000000040068a,0x00000000004006ac
disassemble [Function],+[Length]
disassemble [Address],+[Length]
指定从给定地址或函数开始反汇编的字节数,例如:
(gdb) disassemble main, +10
disassemble /m [...]
指定此选项后,反汇编命令将显示与反汇编指令相对应的源代码行。例如:
(gdb) disassemble /m main
Dump of assembler code for function main:
4 {
0x00000000004005d6 <+0>: push %rbp
0x00000000004005d7 <+1>: mov %rsp,%rbp
0x00000000004005da <+4>: sub $0xd0,%rsp
5 float vcs[16] = {0.931,0.928,0.925,0.922,0.920,0.917,0.914,0.911,0.904,0.896,0.889,0.881,0.874,0.866,0.859,0.851};
0x00000000004005e1 <+11>: movss 0x4a7(%rip),%xmm0 # 0x400a90
0x00000000004005e9 <+19>: movss %xmm0,-0x50(%rbp)
0x00000000004005ee <+24>: movss 0x49e(%rip),%xmm0 # 0x400a94
0x00000000004005f6 <+32>: movss %xmm0,-0x4c(%rbp)
disassemble /r [...]
当指定此选项时,反汇编命令将显示所有反汇编指令的原始字节值。
(gdb) disassemble /r main
Dump of assembler code for function main:
0x00000000004005d6 <+0>: 55 push %rbp
0x00000000004005d7 <+1>: 48 89 e5 mov %rsp,%rbp
0x00000000004005da <+4>: 48 81 ec d0 00 00 00 sub $0xd0,%rsp
0x00000000004005e1 <+11>: f3 0f 10 05 a7 04 00 00 movss 0x4a7(%rip),%xmm0 # 0x400a90
0x00000000004005e9 <+19>: f3 0f 11 45 b0 movss %xmm0,-0x50(%rbp)
0x00000000004005ee <+24>: f3 0f 10 05 9e 04 00 00 movss 0x49e(%rip),%xmm0 # 0x400a94
0x00000000004005f6 <+32>: f3 0f 11 45 b4 movss %xmm0,-0x4c(%rbp)
0x00000000004005fb <+37>: f3 0f 10 05 95 04 00 00 movss 0x495(%rip),%xmm0 # 0x400a98