|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=33012 [복사]

스샷을 올리려 하였으나.. 스샷이 많아서 파일수 제한때메 글로 올리겠습니다..
* 제가하는 질문 외에도 잘못 이해하고 있는 부분 있으면 지적해주세요.
1.
우선 선언된 변수
int형 a=1,b=2,c=3,d=4 순으로 저장된것을 덤프코드로 가장 낮은 주소인 d와 크기를 16으로 돌렸습니다..
그결과 0x임의의 주소 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00
이렇게 나왔습니다..
제가 이해한 바로는 스택의 데이터 크기가 레지스터의 크기와 같다 즉, 32비트 리눅스 기준으로 4바이트 그러기 때문에 0x임의의 주소 에 표현된 크기가 4바이트로 나온걸로 그리고 오른쪽 바텀에서 왼쪽 탑쪽으로 쌓이고 있는걸로 이해하고 있는데 맞나요?..
-----------------------------------------------------------------------------------------------
2.
int형 a=1
b=2
char x = 7;
c=3
d=4
이렇게 인트 사이에 x를 char형으로 선언했습니다..
dumpcode(%d,20) 으로 돌린결과
0x주소값1 04 00 00 00 03 00 00 00 eb 83 04 07 02 00 00 00
0x주소값2 01 00 00 00
이렇게 나왔습니다..
스택의 데이터 값은 4바이트 인데 4바이트가 초과되서 주소값이 하나 더 생긴건가요?
즉 메모리 맵을 그려보면
메모리에 분활된 스택 영역에 또 스택주소1 04 03 02 01 그리고 스택주소2 01 데이터의 크기가 4바이트로 제한되어있어서 이렇게 스택영역에 또 4바이트 크기의 스택 두개가 생긴건가요?
아 그리고 스샷 파일 1에 dummy로 붙은 3바이트가 어떤 갑ㅅ인지 중요 하지 않다고 나왔는데.. 00 00 00 00 이게 8비트 1바이트 아닌가요? 즉 char x = 7 의값 07 제외한 6비트가 dummy값 아닌가요?
그냥 단순한 오타인가요?
---------------------------------------------------------------------------------------------
3.
그런데 스택의 데이터 크기 4바이트 라는게? 한 스택 에 들어갈수 있는 전체 데이터가 4바이트 라는건가요? 아니면 스택에 쌓이는 abcd 와 같은 데이터 하나당 4바이트 라는건가요?
내용을 읽어보면 전자 같은데 맞게 이해하고있는게 맞나요?
-----------------------------------------------------------------------------------------------
|
Hit : 10357 Date : 2014/12/01 12:06
|