p.82 에 있는 code를 수행한 결과
$ cat ex2.c
#include <stdio.h>
int get_area(int x,int y)
{
int area;
printf("인자 x의 주소 0x%x\n", &x);
printf("인자 y의 주소 0x%x\n", &y);
printf("함수 내 area 주소 0x%x\n", &area);
area = x*y;
return area;
}
int main()
{
int x = 10, y = 20;
int area;
printf("x의 주소 : 0x%x\n", &x);
printf("y의 주소 : 0x%x\n", &y);
printf("area의 주소 : 0x%x\n", &area);
area = get_area(x,y);
printf("사각형의 넓이 : %d\n",area);
}
$ ./ex2
x의 주소 : 0x22ac8c
y의 주소 : 0x22ac88
area의 주소 : 0x22ac84
인자 x의 주소 0x22ac70
인자 y의 주소 0x22ac74
함수 내 area 주소 0x22ac5c
사각형의 넓이 : 200
이와 같이 결과가 나오는데 0x22ac5c 와 0x22ac70 사이에 SFP, RET(Return Address)가 있다고 했는데 책에 나온 내용을 읽어보면 SFP, RET 각각 4byte 라고 하면 SFP는 0x22ac60 RET는 0x22ac64로 예상이 됩니다.
그러면 0x22ac68, 0x22ac6c 이 부분이 남게 되는데 이 부분에는 무엇이 있는 것일까요??
참고로 개발환경은 windows xp 에서 cygwin 으로 컴파일한 결과입니다. |