프로그램 기본 실행구조
컴퓨터의 기본적인 구성요소는 CPU와 메모리 그리고 하드디스크이다. 프로그램을 만들어서 배포하면 프로그램을 실행할 수 있는 파일(exe)은 기본적으로 하드디스크에 저장된다.
윈도우에서는 실행파일을 PE파일 이라고 부른다. PE파일에 프로그램을 실행하는 데 필요한 기본 정보와 파일을 메모리 어디에 저장해야 할지 알려주는 배치 정보가 들어 있다. PE파일은 헤더와 보디로 구성되는데, 헤더에 이러한 중요 정보가 들어 있고 보디에는 코드와 데이터가 들어 있다. PE파일에는 exe, dll, ocx 등 다양한 종류가 있다.
PE 포맷(헤더+보디)으로 구성된 실행 파일을 클릭하면 운영체제에 있는 로더는 PE 헤더에 있는 정보를 분석해서 PE 보디에 있는 코드와 데이터를 메모리에 배치한다. 메모리는 프로그램 코드가 들어가는 코드 영역, 정적 변수와 전역 변수가 들어가는 데이터 영역, 함수 호출 시 사용되는 매개 변수와 지역 변수가 저장되는 스택 영역 그리고 동적 메모리 할당에 사용되는 히프 영역으로 구성된다. PE파일이 메모리에 로딩 될때는 코드 영역과 데이터 영역에 자료가 들어간다. 프로그램이 실행되면서 스택 영역과 히프 영역에 데이터가 쌓이게 된다.
C언어로 개발된 프로그램은 기본적으로 main() 함수부터 실행된다. PE파일도 C언어와 마찬가지로 처음 실행되는 위치가 정해져 있다. 엔트리 포인트(Entry Point) 가 PE파일 실행이 시작되는 주소다. 운영체제는 메모리에 있는 PE파일을 실행하기 위해 PE헤더 정보에서 엔트리 포인트 위치를 찾아 그곳부터 프로그램을 실행하기 시작한다.
여러 프로그램이 동시에 실행될때는 번갈아 가면서 CPU를 사용한다. CPU사용이 끝나면 다른 프로그램에 CPU 사용권한을 넘겨주는데, 자신이 사용하고 있던 모든 레지스터를 메모리 영역으로 복사해 놓는다. 이것을 컨텍스트 스위칭 이라 한다.
'Reversing > ▷ Study' 카테고리의 다른 글
Retargetable Decompiler (0) | 2017.12.23 |
---|---|
ELF Simple Anti Reverser (0) | 2017.06.22 |
어셈블리와 C언어의 포인터 구문 형식 (0) | 2017.03.08 |
Stack Frame(스택 프레임) (0) | 2017.03.08 |
스택(Stack) 요약 (0) | 2017.03.08 |