(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 (auth_flag)位于堆栈框架中的0x00000000 (第二行第五列)。
password_buffer和auth_flag值存储在哪里?它们是否存储在堆栈帧中?
char password_buffer[16];
int auth_flag = 0;发布于 2015-07-13 15:22:18
是的,他们是。局部变量是函数stack frame的一部分。
关于GDB中堆栈上的语句:
最左边的一列描述地址,而其他列保存这些地址的值(+ offset)。因此,password_buffer不是“位于”0xb7fd6ff4,而是在索引0处包含0xf4,在索引1处包含0x6f,依此类推(相反,因为gdb以低字节顺序显示值)。类似地,auth_flag的值是0x00000000。
https://stackoverflow.com/questions/31375171
复制相似问题