다음을 통해 공유


IMAGE_OPTIONAL_HEADER32 구조체(winnt.h)

선택적 헤더 형식을 나타냅니다.

구문

typedef struct _IMAGE_OPTIONAL_HEADER {
  WORD                 Magic;
  BYTE                 MajorLinkerVersion;
  BYTE                 MinorLinkerVersion;
  DWORD                SizeOfCode;
  DWORD                SizeOfInitializedData;
  DWORD                SizeOfUninitializedData;
  DWORD                AddressOfEntryPoint;
  DWORD                BaseOfCode;
  DWORD                BaseOfData;
  DWORD                ImageBase;
  DWORD                SectionAlignment;
  DWORD                FileAlignment;
  WORD                 MajorOperatingSystemVersion;
  WORD                 MinorOperatingSystemVersion;
  WORD                 MajorImageVersion;
  WORD                 MinorImageVersion;
  WORD                 MajorSubsystemVersion;
  WORD                 MinorSubsystemVersion;
  DWORD                Win32VersionValue;
  DWORD                SizeOfImage;
  DWORD                SizeOfHeaders;
  DWORD                CheckSum;
  WORD                 Subsystem;
  WORD                 DllCharacteristics;
  DWORD                SizeOfStackReserve;
  DWORD                SizeOfStackCommit;
  DWORD                SizeOfHeapReserve;
  DWORD                SizeOfHeapCommit;
  DWORD                LoaderFlags;
  DWORD                NumberOfRvaAndSizes;
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

멤버

Magic

이미지 파일의 상태입니다. 이 멤버는 다음 값 중 하나일 수 있습니다.

의미
IMAGE_NT_OPTIONAL_HDR_MAGIC
파일은 실행 파일 이미지입니다. 이 값은 32비트 애플리케이션의 IMAGE_NT_OPTIONAL_HDR32_MAGIC 64비트 애플리케이션의 IMAGE_NT_OPTIONAL_HDR64_MAGIC 정의됩니다.
IMAGE_NT_OPTIONAL_HDR32_MAGIC
0x10b
파일은 실행 파일 이미지입니다.
IMAGE_NT_OPTIONAL_HDR64_MAGIC
0x20b
파일은 실행 파일 이미지입니다.
IMAGE_ROM_OPTIONAL_HDR_MAGIC
0x107
파일은 ROM 이미지입니다.

MajorLinkerVersion

링커의 주 버전 번호입니다.

MinorLinkerVersion

링커의 부 버전 번호입니다.

SizeOfCode

코드 섹션이 여러 개 있는 경우 코드 섹션의 크기(바이트) 또는 이러한 모든 섹션의 합계입니다.

SizeOfInitializedData

초기화된 데이터 섹션의 크기(바이트) 또는 여러 초기화된 데이터 섹션이 있는 경우 이러한 모든 섹션의 합계입니다.

SizeOfUninitializedData

초기화되지 않은 데이터 섹션의 크기(바이트) 또는 초기화되지 않은 데이터 섹션이 여러 개 있는 경우 이러한 모든 섹션의 합계입니다.

AddressOfEntryPoint

이미지 기본 주소를 기준으로 하는 진입점 함수에 대한 포인터입니다. 실행 파일의 경우 시작 주소입니다. 디바이스 드라이버의 경우 초기화 함수의 주소입니다. 진입점 함수는 DLL에 대해 선택 사항입니다. 진입점이 없으면 이 멤버는 0입니다.

BaseOfCode

이미지 베이스를 기준으로 코드 섹션의 시작 부분에 대한 포인터입니다.

BaseOfData

이미지 베이스를 기준으로 데이터 섹션의 시작 부분에 대한 포인터입니다.

ImageBase

메모리에 로드될 때 이미지의 첫 번째 바이트의 기본 주소입니다. 이 값은 64K 바이트의 배수입니다. DLL의 기본값은 0x10000000. 애플리케이션의 기본값은 0x00010000 Windows CE 제외하면 0x00400000.

SectionAlignment

메모리에 로드된 섹션의 맞춤(바이트)입니다. 이 값은 FileAlignment 멤버보다 크거나 같아야 합니다. 기본값은 시스템의 페이지 크기입니다.

FileAlignment

이미지 파일의 섹션 원시 데이터 정렬(바이트)입니다. 값은 512에서 64K(포함) 사이의 2의 힘이어야 합니다. 기본값은 512입니다. SectionAlignment 멤버가 시스템 페이지 크기보다 작은 경우 이 멤버는 SectionAlignment와 동일해야 합니다.

MajorOperatingSystemVersion

필수 운영 체제의 주 버전 번호입니다.

MinorOperatingSystemVersion

필수 운영 체제의 부 버전 번호입니다.

MajorImageVersion

브라우저의 주 버전 번호입니다.

MinorImageVersion

브라우저의 부 버전 번호입니다.

MajorSubsystemVersion

하위 시스템의 주 버전 번호입니다.

MinorSubsystemVersion

하위 시스템의 부 버전 번호입니다.

Win32VersionValue

이 멤버는 예약되어 있으며 0이어야 합니다.

SizeOfImage

모든 헤더를 포함하여 이미지의 크기(바이트)입니다. SectionAlignment의 배수여야 합니다.

SizeOfHeaders

FileAlignment 멤버에 지정된 값의 배수로 반올림된 다음 항목의 결합된 크기입니다.

  • IMAGE_DOS_HEADER 멤버 e_lfanew
  • 4 바이트 서명
  • IMAGE_FILE_HEADER 크기
  • 선택적 헤더의 크기
  • 모든 섹션 헤더의 크기

CheckSum

이미지 파일 체크섬입니다. 다음 파일은 로드 시 유효성을 검사합니다. 모든 드라이버, 부팅 시 로드된 DLL 및 중요한 시스템 프로세스에 로드된 모든 DLL입니다.

Subsystem

이 이미지를 실행하는 데 필요한 하위 시스템입니다. 다음 값이 정의됩니다.

의미
IMAGE_SUBSYSTEM_UNKNOWN
0
알 수 없는 하위 시스템.
IMAGE_SUBSYSTEM_NATIVE
1
하위 시스템이 필요하지 않습니다(디바이스 드라이버 및 네이티브 시스템 프로세스).
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Windows GUI(그래픽 사용자 인터페이스) 하위 시스템.
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Windows CUI(문자 모드 사용자 인터페이스) 하위 시스템.
IMAGE_SUBSYSTEM_OS2_CUI
5
OS/2 CUI 하위 시스템.
IMAGE_SUBSYSTEM_POSIX_CUI
7
POSIX CUI 하위 시스템.
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
9
Windows CE 시스템.
IMAGE_SUBSYSTEM_EFI_APPLICATION
10
EFI(Extensible Firmware Interface) 애플리케이션.
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
11
부팅 서비스가 포함된 EFI 드라이버.
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
12
런타임 서비스가 포함된 EFI 드라이버.
IMAGE_SUBSYSTEM_EFI_ROM
13
EFI ROM 이미지.
IMAGE_SUBSYSTEM_XBOX
14
Xbox 시스템.
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
16
부팅 애플리케이션.

DllCharacteristics

이미지의 DLL 특성입니다. 다음 값이 정의됩니다.

의미
0x0001
예약되어 있습니다.
0x0002
예약되어 있습니다.
0x0004
예약되어 있습니다.
0x0008
예약되어 있습니다.
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
0x0020
64비트 주소 공간이 있는 ASLR.
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
0x0040
DLL은 로드 시 재배치할 수 있습니다.
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
0x0080
코드 무결성 검사는 강제로 수행됩니다. 이 플래그를 설정하고 섹션에 초기화되지 않은 데이터만 포함된 경우 해당 섹션에 대한 IMAGE_SECTION_HEADERPointerToRawData 멤버를 0으로 설정합니다. 그렇지 않으면 디지털 서명을 확인할 수 없으므로 이미지를 로드하지 못합니다.
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
0x0100
이미지는 DEP(데이터 실행 방지)와 호환됩니다.
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
0x0200
이미지는 격리를 인식하지만 격리해서는 안 됩니다.
IMAGE_DLLCHARACTERISTICS_NO_SEH
0x0400
이미지는 SEH(구조적 예외 처리)를 사용하지 않습니다. 이 이미지에서는 처리기를 호출할 수 없습니다.
IMAGE_DLLCHARACTERISTICS_NO_BIND
0x0800
이미지를 바인딩하지 않습니다.
IMAGE_DLL_CHARACTERISTICS_APPCONTAINER
0x1000
AppContainer에서 이미지를 실행해야 합니다.
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
0x2000
WDM 드라이버입니다.
IMAGE_DLL_CHARACTERISTICS_GUARD_CF
0x4000
이미지에서 제어 흐름 보호를 지원합니다.
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
0x8000
이미지는 터미널 서버 인식입니다.

SizeOfStackReserve

스택에 대해 예약할 바이트 수입니다. SizeOfStackCommit 멤버가 지정한 메모리만 로드 시 커밋됩니다. 나머지는 이 예약 크기에 도달할 때까지 한 번에 한 페이지씩 사용할 수 있습니다.

SizeOfStackCommit

스택에 커밋할 바이트 수입니다.

SizeOfHeapReserve

로컬 힙에 대해 예약할 바이트 수입니다. SizeOfHeapCommit 멤버가 지정한 메모리만 로드 시 커밋됩니다. 나머지는 이 예약 크기에 도달할 때까지 한 번에 한 페이지씩 사용할 수 있습니다.

SizeOfHeapCommit

로컬 힙에 대해 커밋할 바이트 수입니다.

LoaderFlags

이 멤버는 사용되지 않습니다.

NumberOfRvaAndSizes

선택적 헤더의 나머지 부분에 있는 디렉터리 항목 수입니다. 각 항목은 위치 및 크기를 설명합니다.

DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]

데이터 디렉터리의 첫 번째 IMAGE_DATA_DIRECTORY 구조체에 대한 포인터입니다.

원하는 디렉터리 항목의 인덱스 번호입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
아키텍처별 데이터
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
기본 재배치 테이블
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
바인딩된 가져오기 디렉터리
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
COM 설명자 테이블
IMAGE_DIRECTORY_ENTRY_DEBUG
6
디버그 디렉터리
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
테이블 가져오기 지연
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
예외 디렉터리
IMAGE_DIRECTORY_ENTRY_EXPORT
0
디렉터리 내보내기
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
전역 포인터의 상대 가상 주소
IMAGE_DIRECTORY_ENTRY_IAT
12
주소 테이블 가져오기
IMAGE_DIRECTORY_ENTRY_IMPORT
1
디렉터리 가져오기
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
구성 디렉터리 로드
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
리소스 디렉터리
IMAGE_DIRECTORY_ENTRY_SECURITY
4
보안 디렉터리
IMAGE_DIRECTORY_ENTRY_TLS
9
스레드 로컬 스토리지 디렉터리

설명

디렉터리 수가 수정되지 않았습니다. 특정 디렉터리를 찾기 전에 NumberOfRvaAndSizes 멤버를 확인합니다.

WinNT.h의 실제 구조체는 IMAGE_OPTIONAL_HEADER32 이름이 지정되고 IMAGE_OPTIONAL_HEADERIMAGE_OPTIONAL_HEADER32 정의됩니다. 그러나 _WIN64 정의된 경우 IMAGE_OPTIONAL_HEADER IMAGE_OPTIONAL_HEADER64 정의됩니다.

typedef struct _IMAGE_OPTIONAL_HEADER64 {
 WORD        Magic;
 BYTE        MajorLinkerVersion;
 BYTE        MinorLinkerVersion;
 DWORD       SizeOfCode;
 DWORD       SizeOfInitializedData;
 DWORD       SizeOfUninitializedData;
 DWORD       AddressOfEntryPoint;
 DWORD       BaseOfCode;
 ULONGLONG   ImageBase;
 DWORD       SectionAlignment;
 DWORD       FileAlignment;
 WORD        MajorOperatingSystemVersion;
 WORD        MinorOperatingSystemVersion;
 WORD        MajorImageVersion;
 WORD        MinorImageVersion;
 WORD        MajorSubsystemVersion;
 WORD        MinorSubsystemVersion;
 DWORD       Win32VersionValue;
 DWORD       SizeOfImage;
 DWORD       SizeOfHeaders;
 DWORD       CheckSum;
 WORD        Subsystem;
 WORD        DllCharacteristics;
 ULONGLONG   SizeOfStackReserve;
 ULONGLONG   SizeOfStackCommit;
 ULONGLONG   SizeOfHeapReserve;
 ULONGLONG   SizeOfHeapCommit;
 DWORD       LoaderFlags;
 DWORD       NumberOfRvaAndSizes;
 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 winnt.h(Windows.h 포함)

추가 정보

IMAGE_DATA_DIRECTORY

ImageHlp 구조체