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;
IMAGE_FILE_HEADER 의 크기는 20bytes 로 WinNT.h 파일에 정의되어있으며 32비트, 64비트 모두 동일하다.
1. Machine
PE파일의 CPU ID를 나타내는 시그니쳐로, WinNT.h 파일 내에 #define 을 통해 다양한 CPU ID들이 정의되어있다.
이 필드를 통해 해당 PE파일이 32비트용인지 64비트용인지 판별할 수 있다.
2. NumberOfSections
PE 파일 내에 IMAGE_SECTION_HEADER 구조체 배열의 엔트리 수와 해당 섹션의 실제 수를 나타낸다.
3. TimeDateStamp
OBJ 파일의 경우 컴파일러가, PE 파일이면 링커가 해당 파일을 생성한 시간을 의미한다.
1970년 01월 01일 09시 (GMT 시간) 을 기준으로부터 해당파일을 생성한 시점까지의 시간을 초 단위로 표현한다.
4. PointerToSymbolTable , NumberOfSymbols
- PointerToSymbolTable : COFF(Common Object File Format) 심볼 테이블의 파일 오프셋을 가리킨다.
- NumberOfSymbols : PointerToSymbolTable 필드가 가리키는 COFF 심볼 테이블의 심볼 수를 나타낸다.
컴파일러에 의해 생성되는 OBJ 파일이나 디버그모드로 생성되어 COFF 디버그 정보를 가지는 PE 파일에만 사용된다.
COFF (Common Object File Format)는 유닉스 시스템에 사용되는
실행 파일, 목적 파일, 공유 라이브러리 컴퓨터 파일을 위한 포맷이다.
- 위키백과 -
5. SizeOfOptionalHeader
IMAGE_OPTIONAL_HEADER 구조체의 크기를 나타내는것으로
OBJ 파일의 경우 0을, PE 파일의 경우 sizeof(IMAGE_OPTIONAL_HEADER) 값을 가진다.
32비트 PE는 224bytes, 64비트 PE는 240bytes 의 크기를 가지며 32비트, 64비트에 상관없이
IMAGE_DATA_DIRECTORY 구조체의 배열이나 IMAGE_SECTION_HEADER 테이블의 위치를 구할 수 있다.
6. Characteristics
PE 파일에 대한 특정 정보를 나타내는 플래그로 WinNT.h 파일에 아래와 같이 정의되어있다.
#define IMAGE_FILE_RELOCS_STRIPPED 0x0001
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
#define IMAGE_FILE_32BIT_MACHINE 0x0100
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
#define IMAGE_FILE_SYSTEM 0x1000
#define IMAGE_FILE_DLL 0x2000
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
각 플래그에대한 설명을 여기서 하기에는 너무 길어지니 MSDN 을 참고한다.
'보안 > Reversing' 카테고리의 다른 글
PE 파일 구조 - IMAGE_SECTION_HEADER (0) | 2020.07.24 |
---|---|
PE 파일 구조 - IMAGE_OPTIONAL_HEADER (0) | 2020.07.23 |
PE 파일 구조 - IMAGE_NT_HEADERS (0) | 2020.07.23 |
PE 파일 구조 - IMAGE_DOS_HEADER (0) | 2020.07.22 |
메모리 구조 (0) | 2020.02.29 |