정보보안/시스템 기초

윈도우 실행파일의 생성 및 실행 과정

록스타★ 2024. 6. 19. 00:51
반응형

폰 노이만 아키텍처 

- 폰 노이만 아키텍처에서는 실행 파일이 평소에는 스토리지에 존재하며, 실행 시 메모리에 로드되어 CPU에 의해 코드가

실행

 

윈도우 실행 파일의 생성 과정

소스코드 작성 : 개발자는 C, C++, Java 등 고급언어로 소스코드 파일 (.c, .cpp, .java)을 작성

 

컴파일

- 컴파일러가 소스코드를 아키텍처에 맞는 기계어 코드로 변환하고, 문법 검사 수행

- 컴파일 결과로 오브젝트 파일 (.obj) 생성

- 오브젝트 파일은 기계어 코드가 포함되어 있으나 아직 완전한 실행 파일은 아님

 

링킹

- 링커가 여러 오브젝트 파일과 라이브러리 파일을 결합하여 실행파일(PE, Portable Executable)을 생성

- 실행 파일에 로드될 메모리 주소, 처음 실행될 코드 주소, 함수 및 라이브러리 정보 포함

- 링킹 결과로 .exe 파일생성

 

실행과정

로드 

- 사용자가 . exe 파일 실행하면 운영체제는 ntdll.dll 모듈에 정의된 로더 함수들을 통해 실행 파일 내용 메모리 매핑

 

메모리 매핑

- 운영체제는 실행파일을 메모리 페이지에 매핑하고, 페이지 보호(읽기, 쓰기, 실행 등) 설정

- 필요한 DLL 파일들도 메모리에 로드되어, API 호출을 위한 주소 값 조사

 

실행

- CPU가 메모리에 로드된 기계어 코드를 실행

- 실행 중필요한 DLL 파일 내에 정의된 API를 호출하고 반환 값을 참조하여 기능 수행

 

고급 언어(C, C++, Java 등) : 사람이 이해하기 쉬운 언어로 작성된 코드

오브젝트 파일 : 컴파일러에 의해 고급 언어가 기계어로 변한된 파일, 이 파일은 메모리주소, 함 수 및 라이브러리 정보가 없어 단독 실행 불가

실행 파일(.exe) : 링커에 의해 오브젝트 파일이 결합되어 메모리 주소, 함수 및 라이브러리 정보가 포함된 파일, 실행 시 메모리 매핑되어 CPU에 의해 실행

 

요약

소스코드 작성 : 고급 언어로 소스코드 작성.
컴파일 : 소스코드를 기계어로 변환하여 오브젝트 파일 생성.
링킹 : 오브젝트 파일을 결합하여 실행 파일 생성.
실행 : 실행 파일을 메모리에 매핑하고, CPU가 코드를 실행.

 

위 4가지 방법으로 작성된 실행 파일은 폰 노이만 아키텍처에 따라 평소에는 스토리지에 존재하다가, 실행 시 메모리에 로드되어 CPU에 의해 실행됩니다. 이 과정에서 운영체제는 메모리 보호 및 DLL 로드를 통해 안전하고 효율적인 실행 환경을 제공합니다.

 

 

결론

윈도우 실행 파일의 생성 및 실행과정은 리버스엔지니어링에서 가장 기본적이며, 정보처리기사, 정보보안기사 자격증 시험에서 나왔던 걸로 기억한다. 정확하게 기억은 안나지만... 단순하면서 생각보다 이해하기 어렵기 때문에 요약한 4줄이라도 외우고 있으면 파일들이 어떻게 실행되는 지 알 수 있을 것 같다.

 

반응형