堆栈框架和堆栈指针

时间:2015-07-13 03:52:11

标签: assembly gdb

(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

1 个答案:

答案 0 :(得分:0)

是的,他们是。局部变量是函数stack frame的一部分。

关于GDB中堆栈的语句:

最左边的列描述地址,而其他列保存这些地址的值(+偏移量)。因此,password_buffer未定位0xb7fd6ff4,但它包含0xf4索引00x6f索引1,依此类推(因为gdb显示的是具有少量结尾的值)。同样,auth_flag的值为0x00000000