본문 바로가기
보안 공부/Reversing

[리버싱] 왜 스택은 높은 주소에서 낮은 주소로 채워질까?

by 그적 2019. 11. 1.

 

사실 메모리 구조 부분을 리버싱 분류로 넣어야 할까 고민했지만, 스택 프레임을 조사하면서 힙과 스택의 비교하기 위해서 조사했기에 다른 공부를 할 때 더 조사하더라도 현재는 리버싱으로 분류해놓았다.
 

메모리 상에서 힙 영역, 스택 영역 
 : 힙과 스택 영역이 서로 반대로 데이터를 채워 나가기 때문에 서로의 영역을 침범할 수 있음
      1) Stack Overflow : 스택이 힙 영역을 침범함 
      2) Hip Overflow : 힙이 스택 영역을 침범함

 

 왜 스택은 높은 주소에서 낮은 주소로 채워질까? 
  : 함수가 호출될 때 필요한 스택 메모리를 할당받는데, 이것은 함수 반환 후에 사용했던 해당 스택 메모리를 반환하여 전체적인 스택 메모리 상의 변경이 없어야 하기 때문이다.
 
 
       -> 결과적으로 제일 중요한 커널 영역을 침범하지 않으면서 전체적인 영역을 일정하게 차지하기 위해.
 

이 내용은 메모리 구조와 함께 알아야하는 부분이기에 
[System] 메모리 구조 (<-클릭) 다음 글을 보며 이해하는 것이 좋다. 

 < 힙과 비교한 스택의 차이 >

 스택 : 빠른 액세스 
          변수의 명시적 할당 해제필요 X 
          지역변수 

  힙 :  느린 액세스 
         변수 할당 후 해제 필요(메모리 관리 필수) 
         변수는 c언어-realloc, 자바-new 
         메모리 크기에 제한 X

 

 

 

댓글