본문 바로가기

카테고리 없음

[어셈블리 언어] 스택 프레임, 그리고 EBP-0x04와 [EBP-0x04]의 차이점

※ 스택 프레임


: 각 함수마다 할당되는 스택의 영역



어떤 함수가 호출될때마다 해당 함수의 스택 프레임이 생성되고, EBP에는 스택 프레임의 시작주소가 저장된.

EBP는 스택프레임의 기준을 가리키는 범용 레지스터이다. 



ο EBP-0x04와 [EBP-0x04]의 차이점 


EBP-0x04는 말 그대로 스택 프레임의 시작주소에서 4만큼 뺀 주소값을 말하고,

[EBP-0x04]는 EBP-0x04의 주소값이 가리키는 변수를 말한다.

( [EBP-0x08]은 EBP-0x08의 주소값이 가리키는 변수를 말한다. )


따라서 인라인 어셈 안에 코드를 작성할 때 

명령어  ' MOV 뿅뿅, ECX '  의  뿅뿅 자리에 변수명이 올 수 있다고 생각하면 쉽다.

변수명을 입력하면 해당 변수에 ECX의 값이 복사되게 된다.



[그림 1] 간단한 인라인 어셈 소스 코드와 실행 결과




위 프로그램이 실행될 때의  스택 프레임을 그림으로 표현하면 다음과 같다.


[그림 2] main함수의 스택 프레임



스택 프레임에서 스택(어떤 변수에 할당된 메모리 공간)은 주소가 높은 쪽에서 낮은 쪽으로 쌓인다. 


변수에 메모리를 할당 높은 주소부터 낮은 주소쪽으로 차곡차곡 채워 할당해준다고 생각하면 쉽다.




도움이 되었다면 소중한 공감/댓글 부탁드려요 !!

감사합니다.