프로그래밍

 3198, 1/160 회원가입  로그인  
   onlyvb
   [C언어] BOF 강좌 보다가 이해되지 않는 것이 있어 질문합니다.

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


안녕하세요.

BOF 강좌를 따라 하다가 이해되지 않는 것이 있어 질문드립니다.

아래 코드는 BOF 강좌 "15강 - [실습] 트레이닝 코스 : 메모리 주소 변조하기" 에서 발췌한 것입니다.

   #include <stdio.h>

   main()
   {
             char    buff[20] = {0, };
             int      *ptr_to_ret = (int *)(buff+24);
    
             printf("buff 주소 : [0x%08x]\n\n", &buff);
             printf("ptr_to_ret 주소 : [0x%08x]\n", &ptr_to_ret);
             printf("ptr_to_ret 값 : 0x%08x\n\n", *ptr_to_ret);
    }

위 코드를 실행하면,
(vmware 이미지를 사용하면 백스페이스 입력시 계속 다운 되어, winxp 의 cygwin 환경에서 실행.)

     $ ./test
      buff 주소 : [0x0022cd40]

      ptr_to_ret 주소 : [0x0022cd3c]
      ptr_to_ret 값 : 0x0022cd98

와 같이 됩니다.


여기서 제가 이해되지 않는 것은,

왜, ptr_to_ret 값이 0x~58(= buff 주소 0x.~40 + 24(0x18)) 이 아니고 0x~98 이 되는지 궁금합니다.


신기한 것은, dumpcode() 함수로 메모리를 보면 0x~58 로 표시된다는 것입니다.

  
감사합니다.

  Hit : 5166     Date : 2011/08/23 09:49