2013-08-17 1 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 at 0x7fff5fbffb90, rip at 0x7fff5fbffb98" –

답변

0

내가 명령 포인터가 저장되는 위치에 같은 혼란 스러워요, 그것은 그것은 0x7fff5fbffb98에 저장됩니다 0x100000eb4

호에있을 것이다. 값이이면 0x100000eb4입니다.

또한이 명령 포인터를 의도하지 않게 덮어 쓰는 경우 전체 프로그램을 "엉망으로 만들겠습니까?"

"전체 프로그램을 엉망으로 만들다"는 의미에 따라 다릅니다.

예를 들어 저장된 위치를 덮어 씁니다. NULLmain에서 반환 될 때 프로그램이 중단되도록합니다.