'FileHeader'에 해당되는 글 1건

  1. 2008.12.05 [PE 구조] FILE HEADER

이번에는 파일 헤더에 대해서 정리해보겠다.

 

  이 헤더는 이전에 살펴 보았던 MS-DOS stub과 PE 시그니처 뒤에 바로 나온다.

 

  이 헤더의 구조체 역시 WinNT.h에 정의 되어 있다.

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

  헤더 중에서 가장 단순한 듯 싶다. 파일 정보를 담고 있는 헤더이다. 각 필드 값들을 간단히 나열해 보면 아래와 같다.

Machine : 필요한 머신의 타입을 지정해준다.

               대부분 PE 파일은 가장 흔히 쓰이는 0x14C의 값을 가질 것이다. 이 값은 Intel 386               머신을 가르킨다.

               많은 타입이 존재하기 때문에 더 많은 정보는 WinNT.h를 참조하도록 하자.

NumberOfSections : 이 필드는 파일의 섹션의 수를 저장하고 있다.

                             한 파일이 가질 수 있는 섹션의 수는 96개이다.

TimeDateStamp : 파일이 생성되었을 때의 날짜와 시간을 저장하고 있다.

                         어떤 방식으로 오더링 되어있는 지를 모르겠다. 알아봐야 하는데...

PointerToSymbolTable : 파일의 심볼 내용을 담고 있는 테이블의 오프셋을 저장하고 있다.

                                  없으면 0이다.

NumberOfSymbols : 심볼 테이블에 저장된 심볼의 수를 저장하고 있다.

                             당연이 이 필드도 0의 값을 가질 수 있다.

SizeOfOptionalHeader : 이 헤더 다음에 오는 Optional Header의 크기를 저장하고 있다.

Characteristics : 파일의 속성을 가지고 있다.

                        속성의 종류도 여러가지가 존재한다. 자세한 내용은 WinNT.h를 참조하자.

                        대표적인 속성을 몇가지 적어보면 아래와 같다.

#define IMAGE_FILE_EXECUTABLE_IMAGE          0x0002 

-> 실행가능한 이미지 임을 나타낸다. 셋팅되지 않는다면 실행파일이 아니겠지??

#define IMAGE_FILE_LOCAL_SYMS_STRIPPED       0x0008 

-> 심볼 내용이 삭제 되었음을 나타낸다. 기본적으로 심볼은 삭제 된다고 한다.

#define IMAGE_FILE_32BIT_MACHINE             0x0100 

-> 32비트 워드 프로세서에서 작동한다는 것을 나타낸다.

  파일 헤더를 간단히 정리해보았다. 머신 타입과 속성들도 자세히 조사하면 좋겠지만 너무 길어지면 오히려 정리한 맛이 안날 거 같아서 말았다.

 

  아래 그림은 PEView를 통해 살펴본 파일 헤더이다.

 

 

  위 그림에 나타난 속성 중 IMAGE_FILE_DLL은 파일이 EXE 실행파일이 아닌 DLL 파일임을 나타낸다. 

Posted by skensita