프로그래밍

 3198, 1/160 회원가입  로그인  
   qkrwncks96
   어셈블리어 스택질문

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


책에보면 push 는 스택에 메모리를 할당하라는건데

int main() {
char ca=5;
char cb=5;
char cc=5;
short sa=5;
}

위의 C소스코드를 컴파일해 역어셈블 코드를 보면

push ebp
mov ebp,esp
sub esp,0x8


main 함수가 호출되기전의 역어셈블코드입니다.


char 형변수가 3개이고 short 형변수가 한개이면 스택에 할당되는메모리는 5바이트이고

push 명령이 스택에 메모리를 할당하라는건데 왜 push 명령이 하나인거죠?

그리고 sub esp,0x8 이 뭔가 눈에 익는데.. x86 cpu 는 스택한칸의 크기가 4바이트라고 했으니까
5바이트를 할당하려면 8바이트를 할당해야하니까 sub esp,0x8 이 메모리를 할당하는건가요?

sub 는 빼는동작이라고 알고있는데 .. 메모리할당에 관한 설명좀해주세요 !~! sub 가 어떻게 메모리를 할당하는거고 왜 esp 에 8을 빼는거고 ..  많이좀알려주시면 감사합니다 !!

  Hit : 4356     Date : 2012/08/01 10:16



    
보안왕 push $ebp ebp를 넣는거는 스택의 맨위를 가리키는 베이스 포인터를 삽입하여

스택 영역을 확장하기 위한 준비라고 보시면되겠습니다.

스택 확장은 esp가 sub될수록 커진다고 볼 수 있는데 sub 0x8,esp 는 esp를 -8만큼 뺀다는것으로

8바이트 확장이 되겠습니다. ^^
2012/08/01