본문 바로가기

카테고리 없음

윈도우 실행파일(PE FILE) 구조에 대해서

What Is PE FILE?

(P)ortable (E)xecutable 의 줄임말로써,

Windows OS가 실행 할 수 있는 실행파일의 약자다.

 

What is PE FILE’s file name extension?

.dll, .exe, .mui, .ocx, .scr, .sys, ...

 

About memory

DLL은 오직 한번만 메모리에 Loading된다 (HDD to RAM)

다른 process에서 LoadLibrary API를 호출한다면, OS는 오직 주소만 복사한다

 

실행파일이 mapping 또는 loading된 제일 첫번째 주소를 image base라고 한다.

RVA란, example address - image base값이다.
예를 들어서, 0x00406060 주소에 int a가 존재하고 실행파일은 0x00400000에 존재한다면
int a에 대한 RVA는 0x00006060 이다.


예시로는 필자가 만든 PE FILE을 분석한다.
예제: https://github.com/traitor0213/CreatePeFile/blob/master/convert.c

 

 

 

 

실행파일의 제일 첫번째 구조체이다.

마지막에 NT structure의 RVA가 저장되어 있다.

 

정확히 0x40에 위치하는 NT structure를 확인 할 수 있었다.

 

 

 

 

운영체제의 로더는 해당 구조체를 읽어내어 실행파일을 메모리에 적재한다.

적재하기 위해서 필요한 정보는 NT structure에 대부분 들어있는데, 이중 중요한 부분만 설명해두었다.

 

이제 Entry Point의 RVA를 따라가기 이전 section header를 보면 다음과 같은 정보가 담겨져 있다.

 

 

 

 

코드의 실행에 필요한 정보들이 더 자세히 서술되어있다.

이제 Pointer to Raw Data RVA (Code Location)을 따라가보면 실제 OP code가 나온다. 

 

 

 

 


이상으로, PE FILE에 대한 포스팅을 마친다.