작성
·
162
1
스택에서 함수를 2개쓴다 가정하고
1번함수 이전bp값을 BP에 저장하고
2번함수로 넘어가서 2번함수의 이전bp값을 또 저장할때 BP에 넣는데
이러면 1번함수의 BP값을 에 2번함수의 BP값으로 덮어씌우는데
그러면 1번함수의 BP값이 소실되어 1번함수의 스택프레임 공간을 모르는게 아닌가요?
답변 1
1
네 맞습니다.
그렇기 때문에 기존에 사용한 base pointer 값을 어딘가에 저장해둬야 하는데,
실제 함수가 시작하는 코드를 보면 항상 push ebp가 있고 끝날 무렵 pop ebp가 있습니다.
기존 BP를 잠시 스택에 보관했다가, 현 함수가 끝나갈 무렵 이전 BP로 복원해서 마치는 것이죠.