2015-07-13 226 views
0
(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_bufferauth_flag值存储在哪里?它们是否存储在堆栈框架中?堆栈帧和堆栈指针

char password_buffer[16]; 
int auth_flag = 0; 

回答

0

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

关于栈GDB在你的语句:

中,最左边的列描述的地址,而另一个则在这些地址保存值(+偏移)。因此password_buffer不是“位于”0xb7fd6ff4,但它包含0xf4位于索引0,0x6f位于索引1,依此类推(因为gdb显示的值很小)。同样,auth_flag的值是0x00000000