PeImage.h revision 1f76500ee9ed238000c96ca02df6d1cadf6b433f
1a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/** @file 21f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff EFI image format for PE32, PE32+ and TE. Please note some data structures are 3a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang different for PE32 and PE32+. EFI_IMAGE_NT_HEADERS32 is for PE32 and 4a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_NT_HEADERS64 is for PE32+. 5a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang This file is coded to the Visual Studio, Microsoft Portable Executable and 7a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang Common Object File Format Specification, Revision 8.0 - May 16, 2006. 81f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff This file also includes some definitions in PI Specification, Revision 1.0. 9a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 101f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff Copyright (c) 2006 - 2008, Intel Corporation 11a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang All rights reserved. This program and the accompanying materials 12a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang are licensed and made available under the terms and conditions of the BSD License 13a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang which accompanies this distribution. The full text of the license may be found at 14a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang http://opensource.org/licenses/bsd-license.php 15a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 16a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 18a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 19a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang**/ 20a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 211f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#ifndef __PE_IMAGE_H__ 221f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define __PE_IMAGE_H__ 23a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 241f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 251f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// PE32+ Subsystem type for EFI images 261f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 27a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION 10 28a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 29a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 30a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_EFI_EFI_ROM 13 31a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 321f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13 ///< defined PI Specification, 1.0 33a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 34a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 351f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 361f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// PE32+ Machine type for EFI images 371f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 38a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_FILE_MACHINE_I386 0x014c 39a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_FILE_MACHINE_IA64 0x0200 40a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_FILE_MACHINE_EBC 0x0EBC 41a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_FILE_MACHINE_X64 0x8664 42a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 43a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// Support old names for backward compatible 44a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 45a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_IA32 IMAGE_FILE_MACHINE_I386 46a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_IA64 IMAGE_FILE_MACHINE_IA64 47a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_IPF IMAGE_FILE_MACHINE_IA64 48a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_EBC IMAGE_FILE_MACHINE_EBC 49a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_X64 IMAGE_FILE_MACHINE_X64 50a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 511f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 521f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// EXE file formats 531f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 541f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DOS_SIGNATURE 0x5A4D ///< MZ 551f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_OS2_SIGNATURE 0x454E ///< NE 561f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_OS2_SIGNATURE_LE 0x454C ///< LE 571f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_NT_SIGNATURE 0x00004550 ///< PE00 58a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 59a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 60a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// PE images can start with an optional DOS header, so if an image is run 611f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// under DOS it can print an error message. 62a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 63a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 641f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_magic; ///< Magic number 651f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_cblp; ///< Bytes on last page of file 661f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_cp; ///< Pages in file 671f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_crlc; ///< Relocations 681f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_cparhdr; ///< Size of header in paragraphs 691f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_minalloc; ///< Minimum extra paragraphs needed 701f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_maxalloc; ///< Maximum extra paragraphs needed 711f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_ss; ///< Initial (relative) SS value 721f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_sp; ///< Initial SP value 731f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_csum; ///< Checksum 741f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_ip; ///< Initial IP value 751f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_cs; ///< Initial (relative) CS value 761f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_lfarlc; ///< File address of relocation table 771f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_ovno; ///< Overlay number 781f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_res[4]; ///< Reserved words 791f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_oemid; ///< OEM identifier (for e_oeminfo) 801f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_oeminfo; ///< OEM information; e_oemid specific 811f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 e_res2[10]; ///< Reserved words 821f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 e_lfanew; ///< File address of new exe header 83a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_DOS_HEADER; 84a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 85a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 861f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// COFF File Header (Object and Image) 87a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 88a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 89a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Machine; 90a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 NumberOfSections; 91a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 TimeDateStamp; 92a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 PointerToSymbolTable; 93a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 NumberOfSymbols; 94a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 SizeOfOptionalHeader; 95a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Characteristics; 96a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_FILE_HEADER; 97a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 981f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 991f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_FILE_HEADER 1001f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 101a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_FILE_HEADER 20 102a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 1031f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1041f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Characteristics 1051f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1061f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_RELOCS_STRIPPED BIT0 ///< 0x0001 Relocation info stripped from file. 1071f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_EXECUTABLE_IMAGE BIT1 ///< 0x0002 File is executable (i.e. no unresolved externel references). 1081f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_LINE_NUMS_STRIPPED BIT2 ///< 0x0004 Line nunbers stripped from file. 1091f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_LOCAL_SYMS_STRIPPED BIT3 ///< 0x0008 Local symbols stripped from file. 1101f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_BYTES_REVERSED_LO BIT7 ///< 0x0080 Bytes of machine word are reversed. 1111f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_32BIT_MACHINE BIT8 ///< 0x0100 32 bit word machine. 1121f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_DEBUG_STRIPPED BIT9 ///< 0x0200 Debugging info stripped from file in .DBG file 1131f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_SYSTEM BIT12 ///< 0x1000 System File. 1141f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_DLL BIT13 ///< 0x2000 File is a DLL. 1151f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_BYTES_REVERSED_HI BIT15 ///< 0x8000 Bytes of machine word are reversed. 1161f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 1171f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1181f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Other Machine Types 1191f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1201f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_MACHINE_UNKNOWN 0 ///< Any machine type 1211f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_MACHINE_I386 0x14c ///< Intel 386. 1221f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_MACHINE_R3000 0x162 ///< MIPS* little-endian, 0540 big-endian 1231f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_MACHINE_R4000 0x166 ///< MIPS* little-endian 1241f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_FILE_MACHINE_POWERPC 0x1F0 ///< IBM* PowerPC Little-Endian 125a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 126a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// * Other names and brands may be claimed as the property of others. 127a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 128a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 129a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 1301f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Header Data Directories 131a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 132a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 133a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualAddress; 134a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Size; 135a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_DATA_DIRECTORY; 136a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 137a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 138a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 1391f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1401f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Directory Entries 1411f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 1421f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_EXPORT 0 1431f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_IMPORT 1 1441f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE 2 1451f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 1461f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_SECURITY 4 1471f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC 5 1481f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_DEBUG 6 1491f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 1501f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 1511f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_TLS 9 1521f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 1531f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 1541f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES 16 155a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 156a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 157a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// @attention 158a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC means PE32 and 159a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// EFI_IMAGE_OPTIONAL_HEADER32 must be used. The data structures only vary 160a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// after NT additional fields. 161a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 162a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b 163a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 164a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 1651bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// 1661bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// Standard fields. 1671bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// 168a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Magic; 169a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 MajorLinkerVersion; 170a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 MinorLinkerVersion; 171a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfCode; 172a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfInitializedData; 173a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfUninitializedData; 174a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 AddressOfEntryPoint; 175a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 BaseOfCode; 1761f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 BaseOfData; ///< PE32 contains this additional field, which is absent in PE32+ 1771bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// 1781bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// NT additional fields. 1791bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu /// 180a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 ImageBase; 181a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SectionAlignment; 182a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 FileAlignment; 183a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorOperatingSystemVersion; 184a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorOperatingSystemVersion; 185a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorImageVersion; 186a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorImageVersion; 187a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorSubsystemVersion; 188a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorSubsystemVersion; 189a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Win32VersionValue; 190a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfImage; 191a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfHeaders; 192a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 CheckSum; 193a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Subsystem; 194a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 DllCharacteristics; 195a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfStackReserve; 196a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfStackCommit; 197a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfHeapReserve; 198a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfHeapCommit; 199a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 LoaderFlags; 200a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 NumberOfRvaAndSizes; 201a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES]; 202a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_OPTIONAL_HEADER32; 203a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 204a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 205a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// @attention 206a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC means PE32+ and 207a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// EFI_IMAGE_OPTIONAL_HEADER64 must be used. The data structures only vary 208a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// after NT additional fields. 209a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 210a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b 211a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 212a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 213a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 214a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // Standard fields. 215a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 216a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Magic; 217a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 MajorLinkerVersion; 218a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 MinorLinkerVersion; 219a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfCode; 220a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfInitializedData; 221a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfUninitializedData; 222a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 AddressOfEntryPoint; 223a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 BaseOfCode; 224a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 225a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // NT additional fields. 226a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 227a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT64 ImageBase; 228a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SectionAlignment; 229a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 FileAlignment; 230a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorOperatingSystemVersion; 231a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorOperatingSystemVersion; 232a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorImageVersion; 233a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorImageVersion; 234a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorSubsystemVersion; 235a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorSubsystemVersion; 236a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Win32VersionValue; 237a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfImage; 238a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfHeaders; 239a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 CheckSum; 240a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Subsystem; 241a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 DllCharacteristics; 242a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT64 SizeOfStackReserve; 243a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT64 SizeOfStackCommit; 244a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT64 SizeOfHeapReserve; 245a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT64 SizeOfHeapCommit; 246a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 LoaderFlags; 247a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 NumberOfRvaAndSizes; 248a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES]; 249a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_OPTIONAL_HEADER64; 250a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 251a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 252a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 253a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// @attention 254a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// EFI_IMAGE_NT_HEADERS32 and EFI_IMAGE_HEADERS64 are for use ONLY 255a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// by tools. All proper EFI code MUST use EFI_IMAGE_NT_HEADERS ONLY!!! 256a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 257a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 258a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Signature; 259a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_FILE_HEADER FileHeader; 260a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_OPTIONAL_HEADER32 OptionalHeader; 261a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_NT_HEADERS32; 262a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 263a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_NT_OPTIONAL32_HEADER sizeof (EFI_IMAGE_NT_HEADERS32) 264a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 265a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 266a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Signature; 267a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_FILE_HEADER FileHeader; 268a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_OPTIONAL_HEADER64 OptionalHeader; 269a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_NT_HEADERS64; 270a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 271a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_NT_OPTIONAL64_HEADER sizeof (EFI_IMAGE_NT_HEADERS64) 272a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 273a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 2741f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 2751f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Processor specific definition of EFI_IMAGE_OPTIONAL_HEADER so the 2761f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// type name EFI_IMAGE_OPTIONAL_HEADER is appropriate to the build. Same for 2771f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// EFI_IMAGE_NT_HEADERS. These definitions MUST be used by ALL EFI code. 2781f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 279a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#if defined (MDE_CPU_IA32) 280a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 281a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 282a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 283a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 284a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64) 285a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 286a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef EFI_IMAGE_NT_HEADERS32 EFI_IMAGE_NT_HEADERS; 287a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 288a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#elif defined (MDE_CPU_IPF) 289a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 290a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 291a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang (((Machine) == EFI_IMAGE_MACHINE_IPF) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 292a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 293a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) 294a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 295a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS; 296a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 297a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#elif defined (MDE_CPU_X64) 298a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 299a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ 300a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) 301a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 302a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32) 303a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 304c020e37c21341394b1ef3e50c429e3824eb4e941lgaotypedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS; 305a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 306a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#elif defined (MDE_CPU_EBC) 307a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 3081bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// 3091bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// This is just to make sure you can cross compile with the EBC compiiler. 3101bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// It does not make sense to have a PE loader coded in EBC. You need to 3111bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// understand the basic 3121bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// 313a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC) 314a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 315a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) 316a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 317a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS; 318a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 319a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#else 320a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#error Unknown Processor Type 321a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#endif 322a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 323a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 324a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_FIRST_SECTION(ntheader) \ 325a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang ( \ 326a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang (EFI_IMAGE_SECTION_HEADER *) \ 327a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang ( \ 328a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang (UINT32) ntheader + \ 329a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang FIELD_OFFSET (EFI_IMAGE_NT_HEADERS, OptionalHeader) + \ 330a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang ((EFI_IMAGE_NT_HEADERS *) (ntheader))->FileHeader.SizeOfOptionalHeader \ 331a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang ) \ 332a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang ) 333a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 3341f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 3351f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Other Windows Subsystem Values 3361f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 337a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_UNKNOWN 0 338a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_NATIVE 1 339a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_WINDOWS_GUI 2 3401f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SUBSYSTEM_WINDOWS_CUI 3 341a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_OS2_CUI 5 342a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SUBSYSTEM_POSIX_CUI 7 343a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 3441f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 3451f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Section header format. 3461f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 347a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_SHORT_NAME 8 348a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 349a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 350a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 Name[EFI_IMAGE_SIZEOF_SHORT_NAME]; 351a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang union { 352a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 PhysicalAddress; 353a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualSize; 354a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang } Misc; 355a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualAddress; 356a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfRawData; 357a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 PointerToRawData; 358a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 PointerToRelocations; 359a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 PointerToLinenumbers; 360a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 NumberOfRelocations; 361a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 NumberOfLinenumbers; 362a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Characteristics; 363a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_SECTION_HEADER; 364a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 3651f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 3661f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_SECTION_HEADER 3671f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 368a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_SECTION_HEADER 40 3691f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 3701f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 3711f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Section Flags Values 3721f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 3731f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_TYPE_NO_PAD BIT3 ///< 0x00000008 ///< Reserved. 3741f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_CNT_CODE BIT5 ///< 0x00000020 3751f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_CNT_INITIALIZED_DATA BIT6 ///< 0x00000040 3761f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_CNT_UNINITIALIZED_DATA BIT7 ///< 0x00000080 3771f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 3781f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_LNK_OTHER BIT8 ///< 0x00000100 ///< Reserved. 3791f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_LNK_INFO BIT9 ///< 0x00000200 ///< Section contains comments or some other type of information. 3801f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_LNK_REMOVE BIT10 ///< 0x00000800 ///< Section contents will not become part of image. 3811f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_LNK_COMDAT BIT12 ///< 0x00001000 3821f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 3831f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_1BYTES BIT20 ///< 0x00100000 3841f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_2BYTES BIT21 ///< 0x00200000 3851f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_4BYTES (BIT20|BIT21) ///< 0x00300000 3861f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_8BYTES BIT22 ///< 0x00400000 3871f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_16BYTES (BIT20|BIT22) ///< 0x00500000 3881f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_32BYTES (BIT21|BIT22) ///< 0x00600000 3891f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_ALIGN_64BYTES (BIT20|BIT21|BIT22) ///< 0x00700000 3901f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 3911f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_DISCARDABLE BIT25 ///< 0x02000000 3921f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_NOT_CACHED BIT26 ///< 0x04000000 3931f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_NOT_PAGED BIT27 ///< 0x08000000 3941f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_SHARED BIT28 ///< 0x10000000 3951f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_EXECUTE BIT29 ///< 0x20000000 3961f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_READ BIT30 ///< 0x40000000 3971f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SCN_MEM_WRITE BIT31 ///< 0x80000000 3981f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 3991f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4001f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of a Symbol Table Record 4011f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4021f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SIZEOF_SYMBOL 18 403a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 404a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 4051f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Symbols have a section number of the section in which they are 4061f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// defined. Otherwise, section numbers have the following meanings: 407a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 4081f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_UNDEFINED (UINT16) 0 ///< Symbol is undefined or is common. 4091f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_ABSOLUTE (UINT16) -1 ///< Symbol is an absolute value. 4101f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_DEBUG (UINT16) -2 ///< Symbol is a special debug item. 411a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 4121f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4131f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Symbol Type (fundamental) values. 4141f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4151f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_NULL 0 ///< no type. 4161f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_VOID 1 ///< no valid type. 4171f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_CHAR 2 ///< type character. 4181f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_SHORT 3 ///< type short integer. 419a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_INT 4 420a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_LONG 5 421a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_FLOAT 6 422a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_DOUBLE 7 423a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_STRUCT 8 424a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_UNION 9 4251f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_ENUM 10 ///< enumeration. 4261f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_TYPE_MOE 11 ///< member of enumeration. 427a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_BYTE 12 428a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_WORD 13 429a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_UINT 14 430a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_TYPE_DWORD 15 431a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 4321f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4331f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Symbol Type (derived) values. 4341f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4351f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_DTYPE_NULL 0 ///< no derived type. 436a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_DTYPE_POINTER 1 437a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_DTYPE_FUNCTION 2 438a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_DTYPE_ARRAY 3 439a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 4401f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4411f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Storage classes. 4421f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4431f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_SYM_CLASS_END_OF_FUNCTION ((UINT8) -1) 444a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_NULL 0 445a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_AUTOMATIC 1 446a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_EXTERNAL 2 447a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_STATIC 3 448a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_REGISTER 4 449a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_EXTERNAL_DEF 5 450a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_LABEL 6 451a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_UNDEFINED_LABEL 7 452a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8 453a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_ARGUMENT 9 454a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_STRUCT_TAG 10 455a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_UNION 11 456a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_UNION_TAG 12 457a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_TYPE_DEFINITION 13 458a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_UNDEFINED_STATIC 14 459a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_ENUM_TAG 15 460a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16 461a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_REGISTER_PARAM 17 462a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_BIT_FIELD 18 463a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_BLOCK 100 464a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_FUNCTION 101 465a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_END_OF_STRUCT 102 466a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_FILE 103 467a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_SECTION 104 468a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SYM_CLASS_WEAK_EXTERNAL 105 469a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 470a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 471a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// type packing constants 472a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 473a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_BTMASK 017 474a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_TMASK 060 475a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_TMASK1 0300 476a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_TMASK2 0360 477a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_BTSHFT 4 478a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_N_TSHIFT 2 479a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 4801f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4811f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Communal selection types. 4821f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 483a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_COMDAT_SELECT_NODUPLICATES 1 484a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_COMDAT_SELECT_ANY 2 485a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_COMDAT_SELECT_SAME_SIZE 3 486a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_COMDAT_SELECT_EXACT_MATCH 4 487a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_COMDAT_SELECT_ASSOCIATIVE 5 4881f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 4891f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 4901f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// the following values only be referred in PeCoff, not defined in PECOFF. 4911f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 492a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 493a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 494a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 495a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 496a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 497a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// Relocation format. 498a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 499a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 500a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualAddress; 501a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SymbolTableIndex; 502a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Type; 503a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_RELOCATION; 504a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5051f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5061f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_RELOCATION 5071f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 508a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_RELOCATION 10 509a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5101f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5111f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// I386 relocation types. 5121f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5131f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_ABSOLUTE 0x0000 ///< Reference is absolute, no relocation is necessary 5141f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_DIR16 0x0001 ///< Direct 16-bit reference to the symbols virtual address 5151f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_REL16 0x0002 ///< PC-relative 16-bit reference to the symbols virtual address 5161f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_DIR32 0x0006 ///< Direct 32-bit reference to the symbols virtual address 5171f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_DIR32NB 0x0007 ///< Direct 32-bit reference to the symbols virtual address, base not included 5181f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_SEG12 0x0009 ///< Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address 5191f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_SECTION 0x000A 5201f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_SECREL 0x000B 5211f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_REL_I386_REL32 0x0014 ///< PC-relative 32-bit reference to the symbols virtual address 522a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5231f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5241f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// x64 processor relocation types. 5251f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 526a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_ABSOLUTE 0x0000 527a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_ADDR64 0x0001 528a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_ADDR32 0x0002 529a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_ADDR32NB 0x0003 530a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32 0x0004 531a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32_1 0x0005 532a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32_2 0x0006 533a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32_3 0x0007 534a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32_4 0x0008 535a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_REL32_5 0x0009 536a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_SECTION 0x000A 537a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_SECREL 0x000B 538a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_SECREL7 0x000C 539a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_TOKEN 0x000D 540a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_SREL32 0x000E 541a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_PAIR 0x000F 542a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define IMAGE_REL_AMD64_SSPAN32 0x0010 543a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 544a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 545a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// Based relocation format. 546a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 547a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 548a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualAddress; 549a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfBlock; 550a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_BASE_RELOCATION; 551a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5521f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5531f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_BASE_RELOCATION 5541f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 555a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_BASE_RELOCATION 8 556a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5571f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5581f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Based relocation types. 5591f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 560a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_ABSOLUTE 0 561a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_HIGH 1 562a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_LOW 2 563a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_HIGHLOW 3 564a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_HIGHADJ 4 565a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 566a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_IA64_IMM64 9 5671f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define IMAGE_REL_BASED_MIPS_JMPADDR16 9 568a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_REL_BASED_DIR64 10 569a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 570a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 571a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// Line number format. 572a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 573a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 574a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang union { 575a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SymbolTableIndex; // Symbol table index of function name if Linenumber is 0. 576a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 VirtualAddress; // Virtual address of line number. 577a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang } Type; 578a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Linenumber; // Line number. 579a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_LINENUMBER; 580a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5811f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5821f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_LINENUMBER 5831f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 584a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_LINENUMBER 6 585a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 5861f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 5871f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Archive format. 5881f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 589a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_START_SIZE 8 590a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_START "!<arch>\n" 591a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_END "`\n" 592a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_PAD "\n" 593a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_LINKER_MEMBER "/ " 594a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ARCHIVE_LONGNAMES_MEMBER "// " 595a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 596a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 5971f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 Name[16]; ///< File member name - `/' terminated. 5981f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 Date[12]; ///< File member date - decimal. 5991f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 UserID[6]; ///< File member user id - decimal. 6001f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 GroupID[6]; ///< File member group id - decimal. 6011f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 Mode[8]; ///< File member mode - octal. 6021f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 Size[10]; ///< File member size - decimal. 6031f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 EndHeader[2]; ///< String to end header. (0x60 0x0A) 604a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_ARCHIVE_MEMBER_HEADER; 605a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6061f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6071f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Size of EFI_IMAGE_ARCHIVE_MEMBER_HEADER 6081f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 609a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 610a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 611a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 612a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 6131f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// DLL Support 6141f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6151f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 6161f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6171f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Export Directory Table 618a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 619a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 620a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Characteristics; 621a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 TimeDateStamp; 622a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorVersion; 623a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorVersion; 624a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Name; 625a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Base; 626a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 NumberOfFunctions; 627a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 NumberOfNames; 628a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 AddressOfFunctions; 629a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 AddressOfNames; 630a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 AddressOfNameOrdinals; 631a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_EXPORT_DIRECTORY; 632a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 633a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 6341f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Hint/Name Table 635a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 636a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 637a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 Hint; 638a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT8 Name[1]; 639a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_IMPORT_BY_NAME; 640a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 641a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 642a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang union { 643a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Function; 644a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Ordinal; 645a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_IMPORT_BY_NAME *AddressOfData; 646a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang } u1; 647a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_THUNK_DATA; 648a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6491f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_ORDINAL_FLAG BIT31 ///< Flag for PE32 650a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_SNAP_BY_ORDINAL(Ordinal) ((Ordinal & EFI_IMAGE_ORDINAL_FLAG) != 0) 651a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff) 652a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6531f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6541f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Import Directory Table 6551f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 656a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 657a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Characteristics; 658a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 TimeDateStamp; 659a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 ForwarderChain; 660a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Name; 661a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_THUNK_DATA *FirstThunk; 662a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_IMPORT_DESCRIPTOR; 663a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6641f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 665a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 6661f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Debug Direcotry Format 667a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 668a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 669a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Characteristics; 670a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 TimeDateStamp; 671a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MajorVersion; 672a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT16 MinorVersion; 673a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Type; 674a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 SizeOfData; 6751f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 RVA; ///< The address of the debug data when loaded, relative to the image base 6761f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 FileOffset; ///< The file pointer to the debug data 677a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_DEBUG_DIRECTORY_ENTRY; 678a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6791f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 ///< The Visual C++ debug information 6801f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 6811f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6821f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Debug Data Structure defined in Microsoft C++ 6831f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 684a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define CODEVIEW_SIGNATURE_NB10 0x3031424E // "NB10" 685a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 6861f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 Signature; ///< "NB10" 687a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown; 688a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown2; 689a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown3; 690a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 691a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // Filename of .PDB goes here 692a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 693a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY; 694a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 6951f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 6961f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Debug Data Structure defined in Microsoft C++ 6971f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// 698a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define CODEVIEW_SIGNATURE_RSDS 0x53445352 // "RSDS" 699a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 7001f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 Signature; ///< "RSDS" 701a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown; 702a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown2; 703a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown3; 704a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown4; 705a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang UINT32 Unknown5; 706a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 707a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // Filename of .PDB goes here 708a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang // 709a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY; 710a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 711a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 7121f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff/// Header format for TE images, defined in PI Specification, 1.0 713a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang/// 714a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef struct { 7151f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 Signature; ///< signature for TE format = "VZ" 7161f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 Machine; ///< from the original file header 7171f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 NumberOfSections; ///< from the original file header 7181f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT8 Subsystem; ///< from original optional header 7191f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT16 StrippedSize; ///< how many bytes we removed from the header 7201f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 AddressOfEntryPoint; ///< offset to entry point -- from original optional header 7211f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT32 BaseOfCode; ///< from original image -- required for ITP debug 7221f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff UINT64 ImageBase; ///< from original file header 7231f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff EFI_IMAGE_DATA_DIRECTORY DataDirectory[2]; ///< only base relocation and debug directory 724a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_TE_IMAGE_HEADER; 725a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 7261f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff 7271f76500ee9ed238000c96ca02df6d1cadf6b433fvanjeff#define EFI_TE_IMAGE_HEADER_SIGNATURE 0x5A56 ///< "VZ" 728a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 729a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 730a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// Data directory indexes in our TE image header 731a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang// 732a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC 0 733a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG 1 734a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 735a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 7361bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// 7371bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// Union of PE32, PE32+, and TE headers 7381bc5d0217a6e9e6086a14cc00c075b9003bd3f0aklu/// 739a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef union { 740a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_NT_HEADERS32 Pe32; 741a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_NT_HEADERS64 Pe32Plus; 742a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_TE_IMAGE_HEADER Te; 743a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_OPTIONAL_HEADER_UNION; 744a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 745a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshangtypedef union { 746a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_NT_HEADERS32 *Pe32; 747a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_NT_HEADERS64 *Pe32Plus; 748a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_TE_IMAGE_HEADER *Te; 749a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang EFI_IMAGE_OPTIONAL_HEADER_UNION *Union; 750a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang} EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION; 751a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang 752a7ed1e2ed5305d2b1e3ed2ccfe7f9d0cab564106yshang#endif 753