리버싱

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

이둥둥 2025. 2. 17. 16:50

개념 이해를 위한 용어 정리

DLL:
동적 링크 라이브러리, 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함하는 라이브러리

폰노이만 구조:

실행 파일이 평소에는 스토리지에, 실행 시 메모리에 매핑되고 CPU에 의해 실행됨. cpu는 기계어만 이해할 수 있다

 

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

 

 

 

위에서 말했듯이 실행파일은 원래는 스토리지에 저장되어 있다가 실행이 시작되면

메모리에 로드되는 단계를 거치는데 소스코드 파일→오브젝트 파일→실행파일 순으로 만들어진다

그리고 메모리상에 매핑된 exe(혹은 dll) 파일의 코드를 실행하는 것은 CPU

 

  • 전처리기: 입력 데이터를 처리하여 다른 프로그램에 대한 입력으로서 사용되는 출력물을 만들어내는 프로그램
  • 컴파일러: 고급언어를 직접 기계어 코드로 변환, 문법 검사
  • 어셈블러: 어셈블리어를 기계어로 변환
  • 링커: 오브젝트 코드를 하나의 실행파일로 묶어줌

example.c→ example.o(컴파일러)

example.o+DLL → example.exe(링커)

실행단계에서 메모리/램에 적재되면 실행에 필요한 추가적인 함수가 있는

라이브러리 파일들을 os에서 메모리에 같이 로드해준다

 

+ 윈도우는 PE 파일이지만 리눅스에서는 ELF 파일

 

 

오브젝트 파일이 실행에 부적합한 이유

 

1. 오브젝트 파일 상태로는 로드되는 메모리 주소가 없어 실행될 수 X 
2. C처음 실행될 코드의 주소 X 
3. 함수, 라이브러리 정보 X

 

 

요약

실행파일이 실행될 경우 ntdll.dll 모듈에 정의되어 있는 로더함수들에 의해 메모리에 매핑되며, 매핑과정에서 메모리에 대한 권한(실행, 쓰기, 읽기) 부여, 사용하는 API에 대한 주소값 조사(바인딩) 작업이 수행

요약: 오브젝트 파일을 실행가능한 실행파일로 변환하는 링킹을 거쳐서 CPU가 코드를 받아 실행함.