스택을 더 깊게 알아보자

스택을 더 깊게 알아보자

이 포스트에서는 스택의 기본적인 개념을 넘어, 조금 더 심화된 내용을 다뤄보겠다.
추후에 설명할 공격 기술 ‘버퍼오버플로우’는 이 스택 영역을 잘 이해하는것이 중요한데, 그 이유는 이곳에 함수 호출과 관련된 정보와 반환 주소(return address)가 저장되기 때문이다.
저번 포스트에서 다루었던 메모리 구조에서의 스택 영역은, 운영체제에 기본적으로 구현 되어있는 시스템 스택이다. 시스템 스택의 기본 데이터 크기는 프로그램의 레지스터 크기와 일치하다고 한다.
따라서, 32비트 프로그램을 실행 할 경우 시스템 스택의 데이터 크기는 32비트가 되는것이다.
32비트 프로그램의 시스템 스택 데이터 크기 위 그림 처럼 되는것이다.
자, 여기서 몇가지 개념이 나오는데, 스택의 맨 위에 있는 데이터의 끝 위치를 TOP 이라고 부른다. 스택은 거꾸로 쌓아 올려지기 때문에(push), 실제로는 스택 데이터중 가장 낮은 메모리 주소값이다.
따라서, push 명령어를 사용하게되면 TOP의 위치를 기준으로 쌓아 올리게 되고, pop 명령어를 사용하게되면 TOP의 위치를 기준으로 빼오게 된다. 그래서, 스택의 데이터가 추가되거나 제거되는 위치를 ‘가르키기’ 때문에, stack ‘pointer’ 라고 불리기도한다.
반대되는 개념으로, bottom이 있으나 밑 부분은 변하지 않기에 이 bottom의 값은 늘 동일하다.

Comments

Popular Posts