프로그래밍

 3198, 1/160 회원가입  로그인  
   zung3211
   디스 어셈블좀... ㅠㅠ

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


source.c ------------

main() {
int a, b;
}

----------------------

이 소스는 정수형 변수 a, b 에 대한 공간을 메모리 상에 마련해 줍니다.

위 소스를 디스어셈블 해보면

0x80483d0 : push   %ebp             -브레이크 포인트 (이전 정보를 보존하기위함?)
0x80483d1 : mov    %esp,%ebp      -브리에크 포인트주소를 esp에 복사
0x80483d3 : sub     $0x8,%esp       이건뭐죠??
0x80483d6 : leave
0x80483d7 : ret

level11 을 깨고있는데..

디스어셈하면

저것부터 나오고,  쭉쭉 나오는데요..

어셈블 명령어도 찾아보고 뒤져봣는데

도무지 이해가 안되서요..


sub   8,esp 는 뭘뜻하는거죠?

  Hit : 3765     Date : 2011/07/29 06:32



    
profreez int a, b;
정수형은 4바이트 크기인건 아시죠? printf("%d\n", sizeof(int));

보통 함수안에 있는 변수(int a, b;)들은 스택 영역의 메모리에 할당됩니다.
esp 는 extended stack pointer 즉 스택을 가르키는 변수이고

저값을 더하고 빼줌에 따라 변수를 제거(더하기), 할당(빼기) 해줍니다.
2011/07/29  
profreez 어셈 분석할때 아래와 같이 한번 해보세요.

[level1@ftz tmp]$ cat source.c
test(int c, int d) {}
main() {
int a, b;
test(a,b);
}

[level1@ftz tmp]$ gcc -g -o source source.c
[level1@ftz tmp]$ objdump -Sd -M intel source
2011/07/29