리버싱 핵심원리

메모리 개념 깔짝

whydontyoushovel 2025. 2. 25. 14:58

메모리 종류

  • 스택
  • 데이터 영역
  • 코드 영역

 

 

▷ 스택

  • 함수 속 지역 변수들이 사는 곳
  • 함수에 메모리(스택 프레임)를 할당하고 그 안에 지역 변수가 저장되는 듯
  • 나중에 들어온 애가 먼저 나감 (1함수가 2함수 호출->2함수가 3함수 호출했을 때 3->2->1 순서로 반환됨)
  • 크기 제한적
  • 반환 주소(함수 끝나고 갈 곳), 이전 스택 프레임의 포인터(시작부분 가리키는 거)도 여기 저장되는 듯
  • 함수 끝나고 return 만나면 스택에서 반환 주소 꺼내서 거기로 간대 와

 

▷힙

  • 스택과 달리 동적으로 메모리를 할당할 때 사용 (<->메모리 크기 제한적)
  • malloc이나 calloc 함수 등 사용할 때
  • 스택보다 크기가 큼
  • 프로그램 종료될 때까지 해제 안됨

 

▷데이터 영역

  • 전역 변수, static 변수들이 사는 곳
  • 프로그램 시작하면서 메모리에 로드됨
  • 종료될 때까지 유지

 

▷코드 영역

  • 실행된 프로그램의 코드가 사는 곳
  • 함수(의 코드)는 여기 살고 있음
  • 리버싱할 때 Code Window가 여기 내용인가 봄
  • stub code도 여기 산다 함

 

 

스택
  • 함수 속 지역 변수들이 사는 곳
  • 함수에 메모리(스택 프레임)를 할당하고 그 안에 지역 변수가 저장
  • 나중에 들어온 애가 먼저 나감 (1함수가 2함수 호출->2함수가 3함수 호출했을 때 3->2->1 순서로 반환됨)
  • 크기 제한적 
  • 반환 주소(함수 끝나고 갈 곳), 이전 스택 프레임의 포인터(시작부분 가리키는 거)도 여기 저장
  • 함수 끝나고 return 만나면 스택에서 반환 주소 꺼내서 거기로 제어 이동
  • 스택과 달리 동적으로 메모리를 할당할 때 사용
    (<->메모리 크기 제한적)
  • malloc이나 calloc 함수 등 사용할 때
  • 스택보다 크기가 큼
  • 프로그램 종료될 때까지 해제 안됨

 

데이터 영역 코드 영역
  • 전역 변수, static 변수들이 사는 곳
  • 프로그램 시작하면서 메모리에 로드됨
  • 종료될 때까지 유지
  • 실행된 프로그램의 코드가 사는 곳
  • 함수(의 코드)는 여기 살고 있음
  • 리버싱할 때 Code Window가 바로 코드 영역
  • stub code도 여기 산다 함