유식대장 천재다. 유식대장 짱짱맨~♡♡♡♡♡
#include <stdio.h>
int main()
{
printf("prologue & epilogue ");
return 0;
}
함수 프롤로그에서 PUSH EBP 후 스텍 구조
스택 구조가 함수 프롤로그와 에필로그에 따라 어떻게 변한는지 알아보자.
main() 함수의 프롤로그 PUSH EBP를 실행하면 스택 구조는 아래와 같다.
Low Address |
|
|
|
|
main() 함수 이전 EBP 값 |
<- |
ESP |
High Address |
|
|
|
함수의 프롤로그 MOV EBP, ESP를 실행하면 스택 구조는 아래와 같다.
Low Address |
|
|
|
| main() 함수 이전 EBP 값 | <- | ESP , EBP |
High Address |
|
|
|
--------------------------------------------------------------------------------
어셈블리어에서 00071303 SUB ESP,0C0 의 명령어는 지역 변수를 사용하기 위해
ESP를 아래로 이동시킨다. 명령어 실행 후 스택 구조는 아래와 같다.
Low Address |
|
|
|
|
|
<- |
ESP |
|
... |
|
|
|
지역 변수 2 |
|
|
|
지역 변수 1 |
|
|
|
main() 함수 이전 EBP 값 |
|
ESP |
High Address |
|
|
|
아래 어셈블리어 주소 000713F0 에서 printf() 함수를 호출하기 위해 1개의 인자를 입력한다.
PUSH 75858 명령어를 실행한 후의 스택 구조는 아래 그림과 같다.
Low Address |
|
|
|
| PUSH 75858(인자 1) | <- | ESP |
| ... |
|
|
| ... |
|
|
| 지역 변수 2 |
|
|
| 지역 변수 1 |
|
|
| main() 함수 이전 EBP 값 | <- | EBP |
High Address |
|
|
|
1번 그림
2번 그림
책에 없는 내용 올리는 중
댓글 0