본문 바로가기

segment

메모리(Memory)영역 - 스택영역(stack segment) 스택 영역(stack segment)은 아주 잠깐 사용하고 삭제할 데이터를 저장하는 공간이다. 잊어버리지 않게 금방 사용하고 버리는 '일회용품'이라고 기억하고 있으면 좋을 것 같다. 좀더 구체적으로 이야기하면 함수 호출과 관련된 정보들이 위치하게 되는 영역이다. 함수의 인자들, 리턴 어드레스, 그리고 함수 내에서 사용되는 지역 변수(매개변수)들이 바로 이 곳에 저장된다. 그리고 그 외에도 몇 가지 값들이 스택 영역에 저장되어 있는데, 대표적인 예가 쉘의 환경변수(environment) 값이다. 이러한 값들은 모두 버퍼 오버플로우 공격과 밀접한 관계를 가지고 있는 것들이기 때문에, 우리가 가장 큰 관심을 갖고 들여다 봐야 할 영역이다. 그리고 스택 세그먼트(SS) 레지스터는 스택 세그먼트의 주소를 포함한다.. 더보기
메모리(Memory)영역 - 코드영역(code segment) 메모리 영역을 공부하기 전에 '세그먼트'(segment) 와 '영역'이라는 표현에 대해서 같은것인지에 대해서 긴가민가 했었는데 공부를 하면서 아래 그림과 같이 이렇게 나누어진 영역을 세그먼트(segment)라고 한 다는 것에 대해서 알 수 있었다. CPU가 읽어 해설할 수 있는 기계어들이 위치하게 되는 영역을 말한다. 우리가 작성한 메인 프로그램의 기계어 코드가 바로 이 영역에 위치하게 된다. 보통 첫번째로 실행 가능한 명령어는 이 세그먼트(segment)의 맨 처음에 위치하며, 운영체제(OS)는 프로그램 실행을 시작하기 위해 그 위치를 알고 있다. 이름이 의미하듯이, 코드 세그먼트(CS) 레지스터는 코드 세그먼트의 주소를 의미한다. 그리고 우리가 코딩한 것을 실행을 시키면 CPU가 알아서 코드영역에 저.. 더보기