在GDB指令的中间解体?

在GDB指令的中间解体?,gdb,Gdb,我相信这在以前工作得很好,但也许我只是忘记了正确的语法 (gdb) disas main Dump of assembler code for function main: 0x0000000000001125 <+0>: push rbp 0x0000000000001126 <+1>: mov rbp,rsp 0x0000000000001129 <+4>: mov DWORD PTR [rbp-0x4],edi 0

我相信这在以前工作得很好,但也许我只是忘记了正确的语法

(gdb) disas main
Dump of assembler code for function main:
   0x0000000000001125 <+0>: push   rbp
   0x0000000000001126 <+1>: mov    rbp,rsp
   0x0000000000001129 <+4>: mov    DWORD PTR [rbp-0x4],edi
   0x000000000000112c <+7>: mov    QWORD PTR [rbp-0x10],rsi
   0x0000000000001130 <+11>:    mov    eax,0x0
   0x0000000000001135 <+16>:    pop    rbp
   0x0000000000001136 <+17>:    ret    
(gdb)disas main
主功能的汇编程序代码转储:
0x0000000000001125:推送rbp
0x0000000000001126:mov rbp,rsp
0x0000000000001129:mov DWORD PTR[rbp-0x4],edi
0x000000000000112c:mov QWORD PTR[rbp-0x10],rsi
0x0000000000001130:mov-eax,0x0
0x0000000000001135:pop rbp
0x0000000000001136:ret
现在我想反汇编0x0000001127,它是第一条mov指令的1字节:

(gdb) disas 0x0000000000001127
Dump of assembler code for function main:
   0x0000000000001125 <+0>: push   rbp
   0x0000000000001126 <+1>: mov    rbp,rsp
   0x0000000000001129 <+4>: mov    DWORD PTR [rbp-0x4],edi
   0x000000000000112c <+7>: mov    QWORD PTR [rbp-0x10],rsi
   0x0000000000001130 <+11>:    mov    eax,0x0
   0x0000000000001135 <+16>:    pop    rbp
   0x0000000000001136 <+17>:    ret    
(gdb)disas 0x0000000000001127
主功能的汇编程序代码转储:
0x0000000000001125:推送rbp
0x0000000000001126:mov rbp,rsp
0x0000000000001129:mov DWORD PTR[rbp-0x4],edi
0x000000000000112c:mov QWORD PTR[rbp-0x10],rsi
0x0000000000001130:mov-eax,0x0
0x0000000000001135:pop rbp
0x0000000000001136:ret
它仍然在主泵顶部开始拆卸

我也尝试过main+1、disas/r等方法。gdb的行为有什么变化吗?我原以为这可能与PIE二进制文件有关,但当我重新编译它时,没有PIE,对于如此简单的东西,我仍然有这个问题

正确的语法是什么

它仍然在主泵顶部开始拆卸

当您给
disas
一个参数时,它会找到封闭函数,并反汇编整个函数。这是从永远以来的行为

如果您改为提供两个参数
disas
,则它将只反汇编给定的范围:

(gdb) disas &main
Dump of assembler code for function main:
   0x00000000000005fa <+0>: push   %rbp
   0x00000000000005fb <+1>: mov    %rsp,%rbp
   0x00000000000005fe <+4>: mov    $0x0,%eax
   0x0000000000000603 <+9>: pop    %rbp
   0x0000000000000604 <+10>:    retq   
End of assembler dump.

(gdb) disas &main+3,&main+11
Dump of assembler code from 0x5fd to 0x605:
   0x00000000000005fd <main+3>: in     $0xb8,%eax
   0x00000000000005ff <main+5>: add    %al,(%rax)
   0x0000000000000601 <main+7>: add    %al,(%rax)
   0x0000000000000603 <main+9>: pop    %rbp
   0x0000000000000604 <main+10>:    retq   
End of assembler dump.
(gdb) x/4i &main+3
   0x5fd <main+3>:  in     $0xb8,%eax
   0x5ff <main+5>:  add    %al,(%rax)
   0x601 <main+7>:  add    %al,(%rax)
   0x603 <main+9>:  pop    %rbp