2015-07-13 286 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