inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스택과 메모리 질문입니다.

369

정승우

작성한 질문수 13

0

안녕하세요. 현재 강사님의 강의를 수강중인 학생입니다.
스택과 메모리강의를 방금 보았는데 이해가 안되는 부분이 있어 질문 남깁니다.
 
 
먼저 사진 1입니다.
 
사진 1은 강의대로 짠 코드를 f5를 눌러 디버그 했을때의 사진입니다.
현재 rsp는 0x60fe38이라고 나와있습니다.
 
질문1. 현재 0x60fe38에 들어있는 값은 의미가 있는 값인가요?
 
그 후 디버깅을 더 진행시켜봤습니다.
 
사진2 입니다.
 
 
사진 2는 MAX라는 함수를 실행시키기 전까지 (위에 push를 모두 실행하기까지) 디버깅을 진행한 사진입니다.
현재 0x60fe38이후 0x60fe30에 rax값이, 0x60fe28에 rbx, 0x60fe38에 5, 0x60fe38에 1이 잘 들어가 있는 것을 확인했습니다.
 
사진 3입니다.
 
 
문제의 사진 3입니다. 방금의 상황에서 f11키를 눌러 step into 해보았습니다.
그랬더니 rsp가 0x60fe18에서 0x60fe10으로 바뀌며 0x60fe10에 이상한 값이 들어있는것을 확인했습니다.
 
질문2 왜 rsp가 0x60fe18에서 0x60fe10으로 바뀐 건가요? (왜 stack이 한단계 더 쌓인건가요?)
 
질문3 사진 3에서 0x60fe10에 들어있는 값은 뭔가요?
 
질문4 사진으론 없지만 함수에서 빠져나가니 rsp가 0x60fe10에서 다시 0x60fe18로 바뀐것을 확인했습니다. 왜인가요..?
 
이해력이 부족하여 질문이 많습니다.. ㅠㅠ 죄송합니다.
 
 

스택 C++

답변 1

0

Rookiss

질문1. 현재 0x60fe38에 들어있는 값은 의미가 있는 값인가요?

큰 의미 없고 그냥 스택 주소입니다. 프로그램이 실행될 때마다 달라집니다.

질문2 왜 rsp가 0x60fe18에서 0x60fe10으로 바뀐 건가요? (왜 stack이 한단계 더 쌓인건가요?)
질문3 사진 3에서 0x60fe10에 들어있는 값은 뭔가요?

CALL 명령어는
- 함수 호출이 완료되면, 그 다음으로 실행할 코드의 주소를 스택에다 push하고
- 호출하는 함수 주소로 jump

하는 2가지 기능을 동시에 합니다.
그렇기 때문에 Call을 호출한 순간 사실상 push를 간접적으로 1번 해준 것이라
rsp가 -8이 되는 것이죠. (스택은 높은주소->낮은 주소 순서로 사용)
안에 들어가 있는 값은 쓰레기 값이 아니고 매우 중요한 값인데
헨젤과그레텔의 빵 부스러기처럼 돌아갈 곳을 스택에 기입하게 됩니다.

질문4 사진으론 없지만 함수에서 빠져나가니 rsp가 0x60fe10에서 다시 0x60fe18로 바뀐것을 확인했습니다. 왜인가요..?

call과 대칭적으로 ret를 하게 되면
현재 스택 rsp에 있는 (함수 호출이 복원되면 돌아갈 코드 주소)를 pop해서 rip 레지스터에 복원하고,
함수에 빠져나가면 rip를 이용해 다음 호출할 주소 코드를 실행하게 됩니다.
따라서 자연스럽게 rsp+8이 된 것입니다.

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

543

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

444

1

strcpy() 구현 관련 질문

0

515

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

454

1

클래스 타입의 포인터 질문합니다

0

548

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

500

1

템플릿 특수화 관련 질문

0

387

1

포인터 관련 질문합니다!

0

267

1

Unable to start assembler. Check your settings.

0

833

2

cpu선택

0

542

1

포인터 질문이 있습니다

0

326

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

587

1

iterator 삭제관련

0

409

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

313

1

15 분 45초 대 질문

0

311

0

스택 프레임 질문합니다!

2

308

1

오른값 참조 in 게임

0

385

0

동적할당 질문이 있습니다

0

452

1

안녕하세요 메모리에 대해 질문드립니다.

0

306

1

함수객체 의 매개변수

0

362

1

복사생성자

0

437

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

423

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

357

1

스택 오버플로우

2

792

1