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
이미지 파일의 상태입니다. 이 멤버는 다음 값 중 하나일 수 있습니다.
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
이 이미지를 실행하는 데 필요한 하위 시스템입니다. 다음 값이 정의됩니다.
DllCharacteristics
이미지의 DLL 특성입니다. 다음 값이 정의됩니다.
값 | 의미 |
---|---|
|
예약되어 있습니다. |
|
예약되어 있습니다. |
|
예약되어 있습니다. |
|
예약되어 있습니다. |
|
64비트 주소 공간이 있는 ASLR. |
|
DLL은 로드 시 재배치할 수 있습니다. |
|
코드 무결성 검사는 강제로 수행됩니다. 이 플래그를 설정하고 섹션에 초기화되지 않은 데이터만 포함된 경우 해당 섹션에 대한 IMAGE_SECTION_HEADERPointerToRawData 멤버를 0으로 설정합니다. 그렇지 않으면 디지털 서명을 확인할 수 없으므로 이미지를 로드하지 못합니다. |
|
이미지는 DEP(데이터 실행 방지)와 호환됩니다. |
|
이미지는 격리를 인식하지만 격리해서는 안 됩니다. |
|
이미지는 SEH(구조적 예외 처리)를 사용하지 않습니다. 이 이미지에서는 처리기를 호출할 수 없습니다. |
|
이미지를 바인딩하지 않습니다. |
|
AppContainer에서 이미지를 실행해야 합니다. |
|
WDM 드라이버입니다. |
|
이미지에서 제어 흐름 보호를 지원합니다. |
|
이미지는 터미널 서버 인식입니다. |
SizeOfStackReserve
스택에 대해 예약할 바이트 수입니다. SizeOfStackCommit 멤버가 지정한 메모리만 로드 시 커밋됩니다. 나머지는 이 예약 크기에 도달할 때까지 한 번에 한 페이지씩 사용할 수 있습니다.
SizeOfStackCommit
스택에 커밋할 바이트 수입니다.
SizeOfHeapReserve
로컬 힙에 대해 예약할 바이트 수입니다. SizeOfHeapCommit 멤버가 지정한 메모리만 로드 시 커밋됩니다. 나머지는 이 예약 크기에 도달할 때까지 한 번에 한 페이지씩 사용할 수 있습니다.
SizeOfHeapCommit
로컬 힙에 대해 커밋할 바이트 수입니다.
LoaderFlags
이 멤버는 사용되지 않습니다.
NumberOfRvaAndSizes
선택적 헤더의 나머지 부분에 있는 디렉터리 항목 수입니다. 각 항목은 위치 및 크기를 설명합니다.
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
데이터 디렉터리의 첫 번째 IMAGE_DATA_DIRECTORY 구조체에 대한 포인터입니다.
원하는 디렉터리 항목의 인덱스 번호입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.
설명
디렉터리 수가 수정되지 않았습니다. 특정 디렉터리를 찾기 전에 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 포함) |