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

한울님의 프로필 이미지
한울

작성한 질문수

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

스택 메모리

RIP 레지스터

작성

·

1.2K

0

안녕하세요 다름이 아니라 rip 레지스터에 대해서 궁금한 게 있는데

rip 레지스터의 정의에 대해서 검색을 하니

1.  현재 수행 중인 명령의 주소를 가리키는 레지스터

2. 다음 수행 명령의 주소를 가리키는 레지스터로

나와있는데 2가지 의미가 동일한 의미인 것인가요? 

아무리 생각해도 1번과 2번이 동일한 의미로 생각되지가 않습니다...

 

 

답변 2

0

안녕하세요 제가 챗GPT에 물어본 결과, 어떤 명령어를 ip가 가리키고 있다가 그 명령어가 실행된 직후에 IP가 증가하여 다음 명령어를 가리키게 됩니다. 따라서 ip는 다음에 실행할 명령어를 가리키고 있습니다.

0

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

그냥 큰 틀에서 보시기 바랍니다.

정확히 말하면 [다음 실행할 명령어의 메모리 주소를 저장]하는게 맞긴 하지만,
일반적으로 [현재 실행하는 명령어] = [다음 실행할 명령어 바로 이전] (함수 ret 상황이 아니라면)이니
현재 제어 위치를 나타낸다고 볼 수도 있긴 하죠.

한울님의 프로필 이미지
한울
질문자

1. 그렇다면 call이 실행됬을 때 스택에 저장되는 ret주소(xor rax, rax의 메모리 주소)와 명령어 ret의 주소와는 전혀 다른 것인가요?

2. 그리고 ret주소는 rip를 통해 알 수 있다고 하셨는데 그렇다면 rip는 왜 다음 명령어로 f11처럼 push rbp를 가리키는 것이 아니라 f10처럼 xor rax, rax를 가리키게 되는 것인가요?

항상 감사합니다! 꼭 이해를 하고 싶은 부분이라...

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

1. 같습니다.
2. 함수가 끝나고 돌아갈 주소를 알아야 하기 때문입니다.

한울님의 프로필 이미지
한울

작성한 질문수

질문하기