(gdb) i r esp
esp 0xbffff7a0 0xbffff7a0
(gdb) x/32xw $esp
0xbffff7a0: 0x00000000 0x08049744 0xbffff7b8 0x080482d9
0xbffff7b0: 0xb7f9f729 0xb7fd6ff4 0xbffff7e8 0x00000000
0xbffff7c0: 0xb7fd6ff4 0xbffff880 0xbffff7e8 0xb7fd6ff4
0xbffff7d0: 0xb7ff47b0 0x08048510 0xbffff7e8 0x080484bb
0xbffff7e0: 0xbffff9b7 0x08048510 0xbffff848 0xb7eafebc
0xbffff7f0: 0x00000002 0xbffff874 0xbffff880 0xb8001898
0xbffff800: 0x00000000 0x00000001 0x00000001 0x00000000
0xbffff810: 0xb7fd6ff4 0xb8000ce0 0x00000000 0xbffff848
(gdb) p 0xbffff7e0 - 0xbffff7a0
$1 = 64
(gdb) x/s password_buffer
0xbffff7c0: "?o??\200????????o???G??\020\205\004\b?????\204\004\b????\020\205\004\bH???????\002"
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
我想详细了解我们如何知道0xbffff7c0(password_buffer
)位于堆栈帧中的0xb7fd6ff4(第三行,第二列),以及我们如何知道0xbffff7bc({{1} })位于堆栈帧中的0x00000000(第二行,第五列)
{1}}和auth_flag
值存储在哪里?它们是否存储在堆栈框架中?
password_buffer
答案 0 :(得分:0)
是的,他们是。局部变量是函数stack frame的一部分。
关于GDB中堆栈的语句:
最左边的列描述地址,而其他列保存这些地址的值(+偏移量)。因此,password_buffer
未定位0xb7fd6ff4
,但它包含0xf4
索引0
,0x6f
索引1
,依此类推(因为gdb显示的是具有少量结尾的值)。同样,auth_flag
的值为0x00000000
。