2013-08-17 75 views
0

這是命令信息框的GDB輸出;GDB指令指針

Stack level 1, frame at 0x7fff5fbffba0 
rip = 0x100000ee4 in main (scc150_ex5.c:9); 
    saved rip 0x100000eb4 
caller of frame at 0x7fff5fbffb80 
source language c. 
Arglist at 0x7fff5fbffb98, args: 
    Locals at 0x7fff5fbffb98, 
Previous frame's sp is 0x7fff5fbffba0 
Saved registers: rbp at 0x7fff5fbffb90, 
    rip at 0x7fff5fbffb98 

我很困惑,當指令指針被保存,這將是在0x100000eb4?另外,如果這個指令指針被無意地覆蓋了,它會「搞亂」整個程序嗎? (我爲使用混亂道歉)。

感謝

+0

'gdb'告訴你在哪裏保存了'rip':「保存的寄存器:rbp在0x7fff5fbffb90,rip在0x7fff5fbffb98」 –

回答

0

我很困惑,當指令指針被保存,那會是在0x100000eb4

號它被保存在0x7fff5fbffb98保存在那裏是0x100000eb4

另外,如果這個指令指針被無意地覆蓋,它會「搞亂」整個程序嗎?

取決於「搞砸整個程序」的含義。

用保存位置覆蓋保存的位置。當它從main返回時,NULL將導致程序崩潰。