Обычно указатель кадра (или, как правило, и более правильно, предыдущий указатель кадра) также помещается в стек, поэтому его можно восстановить с помощью простой инструкции pop
.
Например, вот функция в x86 с прологом и эпилогом (ebp
- указатель кадра):
push ebp ; push current frame pointer
mov ebp, esp ; set up frame pointer for this new frame
sub esp, <frameSize> ; allocate stack space (locals)
weave magic ; the meat of the function
mov esp, ebp ; deallocate stack space
pop ebp ; restore previous frame pointer
ret ; back to caller
В терминах того, что $fp
содержало до , что делает немедленныйcall, это будут указатели фреймов для самого последнего вызова до этого.И это продолжается до самого стека вызовов, пока вы не достигнете вершины (или не обнаружите, что используете другое соглашение о вызовах).