2013-08-17 46 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将导致程序崩溃。