2010-09-06 24 views

回答

5

您可以使用GDB x/i命令,例如,

(gdb) x/4i 0x400390 
    0x400390: xor %ebp,%ebp 
    0x400392: mov %rdx,%r9 
    0x400395: pop %rsi 
    0x400396: mov %rsp,%rdx 

但你是什麼可能尋找的是objdump -d a.out

0

您也可以使用disassemble命令。它的工作原理與x /i類似,但它有可選的rm標誌,它們分別顯示指令的原始編碼和源代碼行號對應關係。

隨着disassemble /rm

(gdb) p free 
$1 = {void (void *)} 0x7ffff7df0980 <free> 
(gdb) disassemble /rm free,+13 
Dump of assembler code from 0x7ffff7df0980 to 0x7ffff7df098d: 
121 in dl-minimal.c 
    0x00007ffff7df0987 <free+7>: 53      push %rbx 
    0x00007ffff7df0988 <free+8>: 48 89 fb    mov %rdi,%rbx 

122 in dl-minimal.c 
123 in dl-minimal.c 
    0x00007ffff7df0980 <free+0>: 48 3b 3d 49 d8 20 00 cmp 0x20d849(%rip),%rdi  # 0x7ffff7ffe1d0 <alloc_last_block> 
    0x00007ffff7df098b <free+11>: 74 03    je  0x7ffff7df0990 <free+16> 

End of assembler dump 

隨着x /i

(gdb) p free 
$3 = {void (void *)} 0x7ffff7df0980 <free> 
(gdb) x /4i free 
    0x7ffff7df0980 <free>: cmp 0x20d849(%rip),%rdi  # 0x7ffff7ffe1d0 <alloc_last_block> 
    0x7ffff7df0987 <free+7>: push %rbx 
    0x7ffff7df0988 <free+8>: mov %rdi,%rbx 
    0x7ffff7df098b <free+11>: je  0x7ffff7df0990 <free+16> 

優勢的x /i超過disassemble(根據您的需要)雖然是x /i接受指令的大小,而disassemble需要大小以字節計。