안녕하세요.
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 로 표시된다는 것입니다.
감사합니다.
|