시스템 해킹

 1576, 1/79 회원가입  로그인  
   siosio24
   버퍼오버플로우 질문입니다.

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


6. 스택에 저장된 지역 변수들의 주소

=========================================================
[student@localhost 16]$ cat addr_of_local_vars.c
int main()
{
        int a;
        int b;

        printf("&a = 0x%08x\n", &a);
        printf("&b = 0x%08x\n", &b);
}

[student@localhost 16]$ ./addr_of_local_vars
&a = 0xbffffb14
&b = 0xbffffb10
[student@localhost 16]$
==========================================================

이번엔 스택 영역에 저장되는 지역 변수의 주소입니다.
이번에도 라이브러리 함수의 주소처럼 갑자기 주소 값이 확 높아지는 것을 확인할 수 있습니다.
그런데 주소 값이 너무 높아져서 가장 뒷쪽의 커널 영역에 거의 닿을 기세입니다.

이는 다음 시간에 자세히 살펴 볼 내용인데, 스택 영역은 힙 영역과는 달리 새로운 데이터를
높은 주소에서 낮은 주소 방향으로 추가해 나가기 때문입니다. 실제로 변수 a보다 나중에 선언된
변수 b가 오히려 더 낮은 주소를 할당받은 사실을 확인할 수 있습니다.

---------------------------------------------------------
대학교 버퍼오버플로우를 읽다가 이런문장을 발견햇는데요.
스택영역은 높은곳에서 낮은곳으로 쌓인다고 적혀져있습니다.
그러면 저기나와있는 a의 주소가 스택영역에서 제일 높은곳의 주소인가요?
그리고 그뒤에 b10부터는 커널의 공간인가요? 궁금해서 물어봅니다.
앞에 나와있는 낮은곳에서 높은곳으로 쌓이는 공간들도
그쪽이 처음 시작 부분인 궁금합니다.

  Hit : 3255     Date : 2011/11/07 05:30



    
phpmyadmin 스택에는 나중에 선언된 b가 먼저 들어가고 a가 들어갑니다.
그리고 a와 b는 지역변수기때문에 가리키는 주소는 커널영역이 아닙니다.
2011/12/27