폰 노이만 아키텍처
- 폰 노이만 아키텍처에서는 실행 파일이 평소에는 스토리지에 존재하며, 실행 시 메모리에 로드되어 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줄이라도 외우고 있으면 파일들이 어떻게 실행되는 지 알 수 있을 것 같다.
'정보보안 > 시스템 기초' 카테고리의 다른 글
디스크 관리 (RAID) (4) | 2024.06.03 |
---|---|
윈도우(Windows) 서비스 및 보안 감사 설정 (0) | 2024.06.03 |
윈도우(Windows) 계정 관리 및 계정 권한 (BitLocker) (0) | 2024.06.03 |
윈도우 운영체제 기초 (OLE, NTFS 등 특징 및 레지스트리) (0) | 2024.06.03 |
운영체제 특징 (0) | 2024.05.30 |