본문 바로가기
reversing

PE DOS Header

by 코끼리_땃쥐 2022. 5. 12.

DOS Header                                                                                                                

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 구조체의 크기는 40h 임

여기서 꼭 알아둬야할 중요한 멤버는 e_magic과 e_lfanew

 

  • e_magic : DOS signature (4D5A => ASCII 값 "MZ")
  • e_lfanew : NT header 의 옵셋을 표시 (가변적인 값을 가짐)

 

모든 PE파일은 시작부분(e_magic)에 DOS signature("MZ")가 존재

e_lfanew 값이 가리키는 위치에 NT header 구조체가 존재

 

* "MZ" 는 MicroSoft에서 DOS 실행 파일을 설계한 Mark Zbikowski 라는 사람의 이니셜임

 

 

DOS Stub                                                                                                                                          

 

DOS Header 밑에 DOS Stub가 존재함

DOS Stub의 존재 여부는 옵션이며 크기도 일정하지 않음.

(DOS Stub은 없어도 파일 실행에는 문제가 없음.)

 

DOS Stub은 코드와 데이터의 혼합으로 이루어져 있음

 

 

'reversing' 카테고리의 다른 글

API 후킹  (0) 2022.05.26
NT header  (0) 2022.05.13
PE File Format  (0) 2022.04.25
Hook ? (훅 이란 ?)  (0) 2022.02.24
함수호출 규약(Calling Convention)  (0) 2021.11.09

댓글