在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