Assembly 当我只输入';步骤i';?

Assembly 当我只输入';步骤i';?,assembly,x86,gdb,Assembly,X86,Gdb,我正在做CSAPP的buflab 4级,无法正确获取我的漏洞代码。当我使用gdb调试它时,我发现: (gdb) si 0x08048d0a in getbufn () (gdb) si 0x55683648 in _reserved () (gdb) si 0x5568364a in _reserved () (gdb) si 0x5568364c in _reserved () (gdb) x /x 0x5568364a 0x5568364a <_reserved+1037898>

我正在做CSAPP的buflab 4级,无法正确获取我的漏洞代码。当我使用gdb调试它时,我发现:

(gdb) si
0x08048d0a in getbufn ()
(gdb) si
0x55683648 in _reserved ()
(gdb) si
0x5568364a in _reserved ()
(gdb) si
0x5568364c in _reserved ()
(gdb) x /x 0x5568364a
0x5568364a <_reserved+1037898>: 0x09090909
(gdb) si
0x5568364e in _reserved ()
(gdb) 
(gdb)si
getbufn()中的0x08048d0a
(gdb)si
0x55683648英寸保留()
(gdb)si
0x5568364a英寸保留()
(gdb)si
0x5568364c英寸保留()
(gdb)x/x 0x5568364a
0x5568364a:0x0909
(gdb)si
0x5568364e in_保留()
(gdb)

nop的操作码是1字节0x09,所以gdb通常应该逐字节执行,但实际上不是这样:地址在每一步中递增0x02。为什么会发生这种情况?

NOP是
0x90
而不是
0x09
0x09 0x09
是一条双字节指令
或[ecx],ecx
。您可以在gdb中使用
x/i
进行反汇编。@Jester哦,我已经调试程序两天了,但没有找到它!非常感谢你,我已经通过了4级!!!使用
layout asm
和/或
layout reg
让gdb向您展示正在进行的反汇编!您不必
x/x
指令字节并自己理解机器代码!如果您不喜欢拆分窗口,在另一个选项的底部会有更多的信息:
display/3i$eip
(或64位的
$rip