인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Hustleinmablood김용호님의 프로필 이미지
Hustleinmablood김용호

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

스택 프레임

푸쉬와 팝에 관해 궁금한게 있습니다

작성

·

269

0

1) 함수를 실행할때
함수에서  작성한 지역변수나, 메인함수속 내부함수는
해당 코드가 실행될떄,
Stack.push로 스택에 넣어둠과 동시에
함수와 지역변수들은 스택메모리를 차지하는것이고

내부함수가 끝날떄
내부함수속 지역변수+ 내부함수들은
스택의 함수 특성상 기능을 다하면 사라지니 
Stack.pop으로 스택에 최근차지했던
(코드흐름상 현재 내부함수)
메모리공간을 다시 풀어주는게 맞는가요?

2)  bp는 현재 스택영역에서의 기준점 sp는 현재 스택의 위치로 이해하였습니다
메인함수에서 내부함수로 들어갈떄 
내부함수가 끝나고 다시 메인함수에서 나머지 진행을위해
push로 bp(현재 위치)를 넣고
그다음 내부함수 진행을 위해 현재 스택위치 sp를
bp에 넣어서 내부함수 진행을 하는것으로 이해했습니다
(내부함수 끝날떄는 처음 push했던 bp로 돌아오는것)


질문을 옳게 한지 잘 모르겠습니다..



답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1) 함수에서  작성한 지역변수나, 메인함수속 내부함수는
해당 코드가 실행될떄,
Stack.push로 스택에 넣어둠과 동시에
함수와 지역변수들은 스택메모리를 차지하는것이고

=>
지역변수는 스택에 들어가지만
함수 OpCode는 코드 영역에 위치해 있습니다.
push pop 비슷하게 하긴 하지만,
메모리를 항상 다시 '풀어주는' 개념이라기 보다는
bp, sp 위치만 변화시켜 유효 범위를 바꿔줍니다.

2)  bp는 현재 스택영역에서의 기준점 sp는 현재 스택의 위치로 이해하였습니다
메인함수에서 내부함수로 들어갈떄 
내부함수가 끝나고 다시 메인함수에서 나머지 진행을위해
push로 bp(현재 위치)를 넣고
그다음 내부함수 진행을 위해 현재 스택위치 sp를
bp에 넣어서 내부함수 진행을 하는것으로 이해했습니다
(내부함수 끝날떄는 처음 push했던 bp로 돌아오는것)

=>
네! 이 부분이 이해가 굉장히 어려운데 그게 맞습니다.
bp를 push하는 것은 [헨젤과 그레텔]에서 빵 뿌스러기를 생각하면 됩니다.
참고로 해킹 분야에서는 이 bp나 ip 쪽 레지스터를 조작하기 위해 부단한 노력을 합니다.

감사합니다!!

Hustleinmablood김용호님의 프로필 이미지
Hustleinmablood김용호

작성한 질문수

질문하기