시스템 해킹

 1576, 1/79 회원가입  로그인  
   6월
   스택메모리에서 메인 이외의 함수를 실행이 끝나고 반환할 때

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


스택이 LIFO 라고 하잖아요.

메인 함수 도중에 함수를 호출하면

반환 올 주소값 메모리에 올리고

함수를 돌잖아요.


함수가 끝나면 함수가 차지하던 메모리는 지워지고

다음 값이 덮어 씌워지나요?

예를 들어

int func1(){
        return 1;
}
int func2(){
        return 2;
}
int main(){

       func1();
       func2();
       return 0;
}

했을 떄

메인 함수가 스택에 올려지고

func1 함수가 스택에 올려지고

func1 함수가 return 되면

func1 함수가 차지하던 스택 메모리가 사라지고

그 위를 func2 가 덮어쓰는 건가요?

아님 건너뛰는 건가요?


  Hit : 4225     Date : 2013/02/26 12:54



    
chlxogns92 func1()함수가 종료된 바로 다음 시점에는 func1()이 사용하던 스택내용은 남아있지만, func2()가 호출되면서 func1()이 사용했던 스택내용은 덮어씌워집니다.
메모리가 사라진다는 표현보다는 사용되지 않게 된다는 표현이 맞는거 같네요.
좀더 자세히 알고 싶으시면 gdb랑 어셈블리어를 공부하셔서 직접 gdb로 확인해보시면 됩니다.
2013/02/26  
6월 옙! 답변 감사합니다!! 2013/02/26