반응형

PE헤더는 PE파일 구조중에서 DOS header부터 Section header까지를 말한다.

PE헤더는 많은 구조체로 이루어져있다.

 


  • DOS Header

DOS Header 부분에는 IMAGE_DOS_HEADER 구조체가 존재 하고, 구조체의 크기는 40 이다.

typedef struct _IMAGE_DOS_HEADER {     
    WORD   e_magic;          // DOS signature : 4D5A ("MZ")
    WORD   e_cblp;                     
    WORD   e_cp;                       
    WORD   e_crlc;                     
    WORD   e_cparhdr;                  
    WORD   e_minalloc;                 
    WORD   e_maxalloc;                 
    WORD   e_ss;                       
    WORD   e_sp;                       
    WORD   e_csum;                     
    WORD   e_ip;                       
    WORD   e_cs;                       
    WORD   e_lfarlc;                   
    WORD   e_ovno;                     
    WORD   e_res[4];                   
    WORD   e_oemid;                    
    WORD   e_oeminfo;                  
    WORD   e_res2[10];                  
    LONG   e_lfanew;         // offset to NT header 
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

이 구조체 안에서 제일 중요한 멤베는 e_magic 과 e_lfanew 인데 역할을 설명해보자면,

 

e_magic 은 DOS signature을 뜻한다. (4D5A -> ASCII로 표현된 "MZ")

e_lfanew 은 NT header의 오프셋을 표시한다. (NT header의 위치)

 

모든 PE파일은 시작부분에 e_magic이 존재하고, e_lfanew가 가리키는 위치에 NT header 구조체가 존재해야한다.

메모장의 Dos header부분

파일의 맨 처음에는 e_magic에 해당하는 MZ문자열이 들어있는 모습이고

DOS header의 크기는 40이니 40번째 마지막 쯤을 보면 000000F8의 NT header 위치가 들어있는 모습이다.

0000000F8인 이유는 리틀 엔디언 표기법이기 때문.


  • DOS Stub

DOS header 밑에는 DOS Stub이 존재한다. 이 부분은 있어도 되고 없어도 되는 헤더이고, 크기도 일정하지 않다.

DOS Stub은 코드와 데이터의 혼합으로 이루어져 있는데, 아래 사진을 보자.

메모장의 DOS Stub부분

0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 까지는 16비트의 명령어로 되어 있는데,

이것은 DOS 환경에서 파일이 실행 되었을 때 특정 문자열을 출력하는 코드이다. 이러는 이유는

메모장은 32비트 전용 PE파일이라 16비트 DOS 환경에서 열릴 수 없기 때문에 알리기 위해 추가된 코드다.

DOS 환경에서만 실행되는 특수한 코드라고 생각하면 되겠다. 

 

이 특성을 이용하여 16비트 32비트 모두 실행 가능한 파일을 만들 수 있다.

위에서 말했듯이 DOS Stub을 추가하는 것은 선택사항이다.

 

 

 

너무 길어져서 나누겠습니다 다음에는 NT Header에 대해 작성해보겠습니다

반응형

'윈도우 > PE 구조' 카테고리의 다른 글

PE 구조 (6) - IAT  (0) 2022.04.19
PE 구조 (5) - (RVA to RAW) 예제 포함  (0) 2022.04.05
PE 구조 (4) - (Section Header)  (0) 2022.04.02
PE 구조 (3) - (NT Header)  (0) 2022.03.31
PE 구조 (1) - (PE File Format, VA & RVA)  (0) 2022.03.29