작은 메모장
윈도우 실행파일의 내부 구조와 동작과정 본문
PE파일의 생성 및 실행
- 윈도우의 실행파일은 소스코드 파일, 오브젝트 파일, 실행파일(PE) 순으로 빌딩됨
이 과정에서 컴파일러(Compiler)와 링커(Linker)가 관여
- 컴파일 단계에서 컴파일러의 주요 기능은 소스코드를 아키텍처에 맞는 기계어 코드로 변환하는 것
- 실행파일이 실행되면, ntdll.dll 모듈에 정의되어 있는 로더 함수들에 의해 메모리에 매핑됨
이 과정에서 메모리에 대한 권한(Read, Write, Execute)부여, 사용하는 API에 대한 주소값을 조사(바인딩)하는 작업이 수행
더욱 쉽게 이야기를 해보자...
하나의 프로젝트가 A.c B.c C.c라는 3개의 C코드로 구성되어 있고, 이를 빌드해 실행파일을 만드는 상황을 가정
먼저 컴파일러가 컴파일을 통해 소스코드 파일을 오브젝트 파일로 변환
이 과정에서, A.obj B.obj C.obj 파일이 생성됨
생성된 오프젝트 파일은 링커를 통해 실행파일로 변환
오브젝트 파일은 로드 될 메모리 주소나 처음 실행될 코드 주소, 함수 및 라이브러리 정보가 하나도 없음
이를 링킹을 통해 자료구조화
모든 오브젝트 파일과 라이브러리 파일을 참조하여 하나의 실행파일로 합침
링킹을 통해 나온 실행파일 PE.exe은 실행되게끔 만들어지기만 했지 아직 실행이 된건 아님
이를 위해 로더가 가상 메모리 공간(Virtual Address Space)에 실행파일을 매핑, 이를 수행하는 모듈이 ntdll.dll
매핑 과정에서 이 실행파일이 메모리에 대한 권한을 부여하고, 사용하는 API에 대한 주소를 조사함
이 과정까지 마치면 실행파일은 실행을 위한 준비를 마침
'KISA 사이버 보안 훈련 > 리버스 엔지니어링 훈련' 카테고리의 다른 글
가상주소공간의 스택 메모리 (0) | 2023.07.04 |
---|---|
CPU의 레지스터와 주요 명령어 (0) | 2023.07.04 |
PE 파일의 구조 (0) | 2023.07.03 |
운영체제 프로세스 가상주소공간 실습 (0) | 2023.07.03 |
운영체제의 프로세스 가상주소공간 (0) | 2023.07.02 |