PeImage.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __PE_IMAGE_H__
00022 #define __PE_IMAGE_H__
00023
00024
00025
00026
00027 #define EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION 10
00028 #define EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
00029 #define EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
00030 #define EFI_IMAGE_SUBSYSTEM_EFI_EFI_ROM 13
00031
00032 #define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13
00033
00034
00035
00036
00037
00038 #define IMAGE_FILE_MACHINE_I386 0x014c
00039 #define IMAGE_FILE_MACHINE_IA64 0x0200
00040 #define IMAGE_FILE_MACHINE_EBC 0x0EBC
00041 #define IMAGE_FILE_MACHINE_X64 0x8664
00042
00043
00044
00045 #define EFI_IMAGE_MACHINE_IA32 IMAGE_FILE_MACHINE_I386
00046 #define EFI_IMAGE_MACHINE_IA64 IMAGE_FILE_MACHINE_IA64
00047 #define EFI_IMAGE_MACHINE_IPF IMAGE_FILE_MACHINE_IA64
00048 #define EFI_IMAGE_MACHINE_EBC IMAGE_FILE_MACHINE_EBC
00049 #define EFI_IMAGE_MACHINE_X64 IMAGE_FILE_MACHINE_X64
00050
00051
00052
00053
00054 #define EFI_IMAGE_DOS_SIGNATURE SIGNATURE_16('M', 'Z')
00055 #define EFI_IMAGE_OS2_SIGNATURE SIGNATURE_16('N', 'E')
00056 #define EFI_IMAGE_OS2_SIGNATURE_LE SIGNATURE_16('L', 'E')
00057 #define EFI_IMAGE_NT_SIGNATURE SIGNATURE_32('P', 'E', '\0', '\0')
00058
00059
00060
00061
00062
00063 typedef struct {
00064 UINT16 e_magic;
00065 UINT16 e_cblp;
00066 UINT16 e_cp;
00067 UINT16 e_crlc;
00068 UINT16 e_cparhdr;
00069 UINT16 e_minalloc;
00070 UINT16 e_maxalloc;
00071 UINT16 e_ss;
00072 UINT16 e_sp;
00073 UINT16 e_csum;
00074 UINT16 e_ip;
00075 UINT16 e_cs;
00076 UINT16 e_lfarlc;
00077 UINT16 e_ovno;
00078 UINT16 e_res[4];
00079 UINT16 e_oemid;
00080 UINT16 e_oeminfo;
00081 UINT16 e_res2[10];
00082 UINT32 e_lfanew;
00083 } EFI_IMAGE_DOS_HEADER;
00084
00085
00086
00087
00088 typedef struct {
00089 UINT16 Machine;
00090 UINT16 NumberOfSections;
00091 UINT32 TimeDateStamp;
00092 UINT32 PointerToSymbolTable;
00093 UINT32 NumberOfSymbols;
00094 UINT16 SizeOfOptionalHeader;
00095 UINT16 Characteristics;
00096 } EFI_IMAGE_FILE_HEADER;
00097
00098
00099
00100
00101 #define EFI_IMAGE_SIZEOF_FILE_HEADER 20
00102
00103
00104
00105
00106 #define EFI_IMAGE_FILE_RELOCS_STRIPPED BIT0
00107 #define EFI_IMAGE_FILE_EXECUTABLE_IMAGE BIT1
00108 #define EFI_IMAGE_FILE_LINE_NUMS_STRIPPED BIT2
00109 #define EFI_IMAGE_FILE_LOCAL_SYMS_STRIPPED BIT3
00110 #define EFI_IMAGE_FILE_BYTES_REVERSED_LO BIT7
00111 #define EFI_IMAGE_FILE_32BIT_MACHINE BIT8
00112 #define EFI_IMAGE_FILE_DEBUG_STRIPPED BIT9
00113 #define EFI_IMAGE_FILE_SYSTEM BIT12
00114 #define EFI_IMAGE_FILE_DLL BIT13
00115 #define EFI_IMAGE_FILE_BYTES_REVERSED_HI BIT15
00116
00117
00118
00119
00120 #define EFI_IMAGE_FILE_MACHINE_UNKNOWN 0
00121 #define EFI_IMAGE_FILE_MACHINE_I386 0x14c
00122 #define EFI_IMAGE_FILE_MACHINE_R3000 0x162
00123 #define EFI_IMAGE_FILE_MACHINE_R4000 0x166
00124 #define EFI_IMAGE_FILE_MACHINE_POWERPC 0x1F0
00125 //
00126
00127
00128
00129
00130
00131
00132 typedef struct {
00133 UINT32 VirtualAddress;
00134 UINT32 Size;
00135 } EFI_IMAGE_DATA_DIRECTORY;
00136
00137 #define EFI_IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
00138
00139
00140
00141
00142 #define EFI_IMAGE_DIRECTORY_ENTRY_EXPORT 0
00143 #define EFI_IMAGE_DIRECTORY_ENTRY_IMPORT 1
00144 #define EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE 2
00145 #define EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
00146 #define EFI_IMAGE_DIRECTORY_ENTRY_SECURITY 4
00147 #define EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC 5
00148 #define EFI_IMAGE_DIRECTORY_ENTRY_DEBUG 6
00149 #define EFI_IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
00150 #define EFI_IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
00151 #define EFI_IMAGE_DIRECTORY_ENTRY_TLS 9
00152 #define EFI_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
00153
00154 #define EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES 16
00155
00156
00157
00158
00159
00160
00161
00162 #define EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
00163
00164 typedef struct {
00165
00166
00167
00168 UINT16 Magic;
00169 UINT8 MajorLinkerVersion;
00170 UINT8 MinorLinkerVersion;
00171 UINT32 SizeOfCode;
00172 UINT32 SizeOfInitializedData;
00173 UINT32 SizeOfUninitializedData;
00174 UINT32 AddressOfEntryPoint;
00175 UINT32 BaseOfCode;
00176 UINT32 BaseOfData;
00177
00178
00179
00180 UINT32 ImageBase;
00181 UINT32 SectionAlignment;
00182 UINT32 FileAlignment;
00183 UINT16 MajorOperatingSystemVersion;
00184 UINT16 MinorOperatingSystemVersion;
00185 UINT16 MajorImageVersion;
00186 UINT16 MinorImageVersion;
00187 UINT16 MajorSubsystemVersion;
00188 UINT16 MinorSubsystemVersion;
00189 UINT32 Win32VersionValue;
00190 UINT32 SizeOfImage;
00191 UINT32 SizeOfHeaders;
00192 UINT32 CheckSum;
00193 UINT16 Subsystem;
00194 UINT16 DllCharacteristics;
00195 UINT32 SizeOfStackReserve;
00196 UINT32 SizeOfStackCommit;
00197 UINT32 SizeOfHeapReserve;
00198 UINT32 SizeOfHeapCommit;
00199 UINT32 LoaderFlags;
00200 UINT32 NumberOfRvaAndSizes;
00201 EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES];
00202 } EFI_IMAGE_OPTIONAL_HEADER32;
00203
00204
00205
00206
00207
00208
00209
00210 #define EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
00211
00212 typedef struct {
00213
00214
00215
00216 UINT16 Magic;
00217 UINT8 MajorLinkerVersion;
00218 UINT8 MinorLinkerVersion;
00219 UINT32 SizeOfCode;
00220 UINT32 SizeOfInitializedData;
00221 UINT32 SizeOfUninitializedData;
00222 UINT32 AddressOfEntryPoint;
00223 UINT32 BaseOfCode;
00224
00225
00226
00227 UINT64 ImageBase;
00228 UINT32 SectionAlignment;
00229 UINT32 FileAlignment;
00230 UINT16 MajorOperatingSystemVersion;
00231 UINT16 MinorOperatingSystemVersion;
00232 UINT16 MajorImageVersion;
00233 UINT16 MinorImageVersion;
00234 UINT16 MajorSubsystemVersion;
00235 UINT16 MinorSubsystemVersion;
00236 UINT32 Win32VersionValue;
00237 UINT32 SizeOfImage;
00238 UINT32 SizeOfHeaders;
00239 UINT32 CheckSum;
00240 UINT16 Subsystem;
00241 UINT16 DllCharacteristics;
00242 UINT64 SizeOfStackReserve;
00243 UINT64 SizeOfStackCommit;
00244 UINT64 SizeOfHeapReserve;
00245 UINT64 SizeOfHeapCommit;
00246 UINT32 LoaderFlags;
00247 UINT32 NumberOfRvaAndSizes;
00248 EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES];
00249 } EFI_IMAGE_OPTIONAL_HEADER64;
00250
00251
00252
00253
00254
00255
00256
00257 typedef struct {
00258 UINT32 Signature;
00259 EFI_IMAGE_FILE_HEADER FileHeader;
00260 EFI_IMAGE_OPTIONAL_HEADER32 OptionalHeader;
00261 } EFI_IMAGE_NT_HEADERS32;
00262
00263 #define EFI_IMAGE_SIZEOF_NT_OPTIONAL32_HEADER sizeof (EFI_IMAGE_NT_HEADERS32)
00264
00265 typedef struct {
00266 UINT32 Signature;
00267 EFI_IMAGE_FILE_HEADER FileHeader;
00268 EFI_IMAGE_OPTIONAL_HEADER64 OptionalHeader;
00269 } EFI_IMAGE_NT_HEADERS64;
00270
00271 #define EFI_IMAGE_SIZEOF_NT_OPTIONAL64_HEADER sizeof (EFI_IMAGE_NT_HEADERS64)
00272
00273
00274
00275
00276
00277
00278
00279 #if defined (MDE_CPU_IA32)
00280
00281 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \
00282 (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC))
00283
00284 #define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64)
00285
00286 typedef EFI_IMAGE_NT_HEADERS32 EFI_IMAGE_NT_HEADERS;
00287
00288 #elif defined (MDE_CPU_IPF)
00289
00290 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \
00291 (((Machine) == EFI_IMAGE_MACHINE_IPF) || ((Machine) == EFI_IMAGE_MACHINE_EBC))
00292
00293 #define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)
00294
00295 typedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS;
00296
00297 #elif defined (MDE_CPU_X64)
00298
00299 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \
00300 (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))
00301
00302 #define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32)
00303
00304 typedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS;
00305
00306 #elif defined (MDE_CPU_EBC)
00307
00308
00309
00310
00311
00312
00313 #define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC)
00314
00315 #define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE)
00316
00317 typedef EFI_IMAGE_NT_HEADERS64 EFI_IMAGE_NT_HEADERS;
00318
00319 #else
00320 #error Unknown Processor Type
00321 #endif
00322
00323
00324 #define EFI_IMAGE_FIRST_SECTION(ntheader) \
00325 ( \
00326 (EFI_IMAGE_SECTION_HEADER *) \
00327 ( \
00328 (UINT32) ntheader + \
00329 FIELD_OFFSET (EFI_IMAGE_NT_HEADERS, OptionalHeader) + \
00330 ((EFI_IMAGE_NT_HEADERS *) (ntheader))->FileHeader.SizeOfOptionalHeader \
00331 ) \
00332 )
00333
00334
00335
00336
00337 #define EFI_IMAGE_SUBSYSTEM_UNKNOWN 0
00338 #define EFI_IMAGE_SUBSYSTEM_NATIVE 1
00339 #define EFI_IMAGE_SUBSYSTEM_WINDOWS_GUI 2
00340 #define EFI_IMAGE_SUBSYSTEM_WINDOWS_CUI 3
00341 #define EFI_IMAGE_SUBSYSTEM_OS2_CUI 5
00342 #define EFI_IMAGE_SUBSYSTEM_POSIX_CUI 7
00343
00344
00345
00346
00347 #define EFI_IMAGE_SIZEOF_SHORT_NAME 8
00348
00349 typedef struct {
00350 UINT8 Name[EFI_IMAGE_SIZEOF_SHORT_NAME];
00351 union {
00352 UINT32 PhysicalAddress;
00353 UINT32 VirtualSize;
00354 } Misc;
00355 UINT32 VirtualAddress;
00356 UINT32 SizeOfRawData;
00357 UINT32 PointerToRawData;
00358 UINT32 PointerToRelocations;
00359 UINT32 PointerToLinenumbers;
00360 UINT16 NumberOfRelocations;
00361 UINT16 NumberOfLinenumbers;
00362 UINT32 Characteristics;
00363 } EFI_IMAGE_SECTION_HEADER;
00364
00365
00366
00367
00368 #define EFI_IMAGE_SIZEOF_SECTION_HEADER 40
00369
00370
00371
00372
00373 #define EFI_IMAGE_SCN_TYPE_NO_PAD BIT3
00374 #define EFI_IMAGE_SCN_CNT_CODE BIT5
00375 #define EFI_IMAGE_SCN_CNT_INITIALIZED_DATA BIT6
00376 #define EFI_IMAGE_SCN_CNT_UNINITIALIZED_DATA BIT7
00377
00378 #define EFI_IMAGE_SCN_LNK_OTHER BIT8
00379 #define EFI_IMAGE_SCN_LNK_INFO BIT9
00380 #define EFI_IMAGE_SCN_LNK_REMOVE BIT10
00381 #define EFI_IMAGE_SCN_LNK_COMDAT BIT12
00382
00383 #define EFI_IMAGE_SCN_ALIGN_1BYTES BIT20
00384 #define EFI_IMAGE_SCN_ALIGN_2BYTES BIT21
00385 #define EFI_IMAGE_SCN_ALIGN_4BYTES (BIT20|BIT21)
00386 #define EFI_IMAGE_SCN_ALIGN_8BYTES BIT22
00387 #define EFI_IMAGE_SCN_ALIGN_16BYTES (BIT20|BIT22)
00388 #define EFI_IMAGE_SCN_ALIGN_32BYTES (BIT21|BIT22)
00389 #define EFI_IMAGE_SCN_ALIGN_64BYTES (BIT20|BIT21|BIT22)
00390
00391 #define EFI_IMAGE_SCN_MEM_DISCARDABLE BIT25
00392 #define EFI_IMAGE_SCN_MEM_NOT_CACHED BIT26
00393 #define EFI_IMAGE_SCN_MEM_NOT_PAGED BIT27
00394 #define EFI_IMAGE_SCN_MEM_SHARED BIT28
00395 #define EFI_IMAGE_SCN_MEM_EXECUTE BIT29
00396 #define EFI_IMAGE_SCN_MEM_READ BIT30
00397 #define EFI_IMAGE_SCN_MEM_WRITE BIT31
00398
00399
00400
00401
00402 #define EFI_IMAGE_SIZEOF_SYMBOL 18
00403
00404
00405
00406
00407
00408 #define EFI_IMAGE_SYM_UNDEFINED (UINT16) 0
00409 #define EFI_IMAGE_SYM_ABSOLUTE (UINT16) -1
00410 #define EFI_IMAGE_SYM_DEBUG (UINT16) -2
00411
00412
00413
00414
00415 #define EFI_IMAGE_SYM_TYPE_NULL 0
00416 #define EFI_IMAGE_SYM_TYPE_VOID 1
00417 #define EFI_IMAGE_SYM_TYPE_CHAR 2
00418 #define EFI_IMAGE_SYM_TYPE_SHORT 3
00419 #define EFI_IMAGE_SYM_TYPE_INT 4
00420 #define EFI_IMAGE_SYM_TYPE_LONG 5
00421 #define EFI_IMAGE_SYM_TYPE_FLOAT 6
00422 #define EFI_IMAGE_SYM_TYPE_DOUBLE 7
00423 #define EFI_IMAGE_SYM_TYPE_STRUCT 8
00424 #define EFI_IMAGE_SYM_TYPE_UNION 9
00425 #define EFI_IMAGE_SYM_TYPE_ENUM 10
00426 #define EFI_IMAGE_SYM_TYPE_MOE 11
00427 #define EFI_IMAGE_SYM_TYPE_BYTE 12
00428 #define EFI_IMAGE_SYM_TYPE_WORD 13
00429 #define EFI_IMAGE_SYM_TYPE_UINT 14
00430 #define EFI_IMAGE_SYM_TYPE_DWORD 15
00431
00432
00433
00434
00435 #define EFI_IMAGE_SYM_DTYPE_NULL 0
00436 #define EFI_IMAGE_SYM_DTYPE_POINTER 1
00437 #define EFI_IMAGE_SYM_DTYPE_FUNCTION 2
00438 #define EFI_IMAGE_SYM_DTYPE_ARRAY 3
00439
00440
00441
00442
00443 #define EFI_IMAGE_SYM_CLASS_END_OF_FUNCTION ((UINT8) -1)
00444 #define EFI_IMAGE_SYM_CLASS_NULL 0
00445 #define EFI_IMAGE_SYM_CLASS_AUTOMATIC 1
00446 #define EFI_IMAGE_SYM_CLASS_EXTERNAL 2
00447 #define EFI_IMAGE_SYM_CLASS_STATIC 3
00448 #define EFI_IMAGE_SYM_CLASS_REGISTER 4
00449 #define EFI_IMAGE_SYM_CLASS_EXTERNAL_DEF 5
00450 #define EFI_IMAGE_SYM_CLASS_LABEL 6
00451 #define EFI_IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
00452 #define EFI_IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
00453 #define EFI_IMAGE_SYM_CLASS_ARGUMENT 9
00454 #define EFI_IMAGE_SYM_CLASS_STRUCT_TAG 10
00455 #define EFI_IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
00456 #define EFI_IMAGE_SYM_CLASS_UNION_TAG 12
00457 #define EFI_IMAGE_SYM_CLASS_TYPE_DEFINITION 13
00458 #define EFI_IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
00459 #define EFI_IMAGE_SYM_CLASS_ENUM_TAG 15
00460 #define EFI_IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
00461 #define EFI_IMAGE_SYM_CLASS_REGISTER_PARAM 17
00462 #define EFI_IMAGE_SYM_CLASS_BIT_FIELD 18
00463 #define EFI_IMAGE_SYM_CLASS_BLOCK 100
00464 #define EFI_IMAGE_SYM_CLASS_FUNCTION 101
00465 #define EFI_IMAGE_SYM_CLASS_END_OF_STRUCT 102
00466 #define EFI_IMAGE_SYM_CLASS_FILE 103
00467 #define EFI_IMAGE_SYM_CLASS_SECTION 104
00468 #define EFI_IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
00469
00470
00471
00472
00473 #define EFI_IMAGE_N_BTMASK 017
00474 #define EFI_IMAGE_N_TMASK 060
00475 #define EFI_IMAGE_N_TMASK1 0300
00476 #define EFI_IMAGE_N_TMASK2 0360
00477 #define EFI_IMAGE_N_BTSHFT 4
00478 #define EFI_IMAGE_N_TSHIFT 2
00479
00480
00481
00482
00483 #define EFI_IMAGE_COMDAT_SELECT_NODUPLICATES 1
00484 #define EFI_IMAGE_COMDAT_SELECT_ANY 2
00485 #define EFI_IMAGE_COMDAT_SELECT_SAME_SIZE 3
00486 #define EFI_IMAGE_COMDAT_SELECT_EXACT_MATCH 4
00487 #define EFI_IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
00488
00489
00490
00491
00492 #define EFI_IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
00493 #define EFI_IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
00494 #define EFI_IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
00495
00496
00497
00498
00499 typedef struct {
00500 UINT32 VirtualAddress;
00501 UINT32 SymbolTableIndex;
00502 UINT16 Type;
00503 } EFI_IMAGE_RELOCATION;
00504
00505
00506
00507
00508 #define EFI_IMAGE_SIZEOF_RELOCATION 10
00509
00510
00511
00512
00513 #define EFI_IMAGE_REL_I386_ABSOLUTE 0x0000
00514 #define EFI_IMAGE_REL_I386_DIR16 0x0001
00515 #define EFI_IMAGE_REL_I386_REL16 0x0002
00516 #define EFI_IMAGE_REL_I386_DIR32 0x0006
00517 #define EFI_IMAGE_REL_I386_DIR32NB 0x0007
00518 #define EFI_IMAGE_REL_I386_SEG12 0x0009
00519 #define EFI_IMAGE_REL_I386_SECTION 0x000A
00520 #define EFI_IMAGE_REL_I386_SECREL 0x000B
00521 #define EFI_IMAGE_REL_I386_REL32 0x0014
00522
00523
00524
00525
00526 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
00527 #define IMAGE_REL_AMD64_ADDR64 0x0001
00528 #define IMAGE_REL_AMD64_ADDR32 0x0002
00529 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
00530 #define IMAGE_REL_AMD64_REL32 0x0004
00531 #define IMAGE_REL_AMD64_REL32_1 0x0005
00532 #define IMAGE_REL_AMD64_REL32_2 0x0006
00533 #define IMAGE_REL_AMD64_REL32_3 0x0007
00534 #define IMAGE_REL_AMD64_REL32_4 0x0008
00535 #define IMAGE_REL_AMD64_REL32_5 0x0009
00536 #define IMAGE_REL_AMD64_SECTION 0x000A
00537 #define IMAGE_REL_AMD64_SECREL 0x000B
00538 #define IMAGE_REL_AMD64_SECREL7 0x000C
00539 #define IMAGE_REL_AMD64_TOKEN 0x000D
00540 #define IMAGE_REL_AMD64_SREL32 0x000E
00541 #define IMAGE_REL_AMD64_PAIR 0x000F
00542 #define IMAGE_REL_AMD64_SSPAN32 0x0010
00543
00544
00545
00546
00547 typedef struct {
00548 UINT32 VirtualAddress;
00549 UINT32 SizeOfBlock;
00550 } EFI_IMAGE_BASE_RELOCATION;
00551
00552
00553
00554
00555 #define EFI_IMAGE_SIZEOF_BASE_RELOCATION 8
00556
00557
00558
00559
00560 #define EFI_IMAGE_REL_BASED_ABSOLUTE 0
00561 #define EFI_IMAGE_REL_BASED_HIGH 1
00562 #define EFI_IMAGE_REL_BASED_LOW 2
00563 #define EFI_IMAGE_REL_BASED_HIGHLOW 3
00564 #define EFI_IMAGE_REL_BASED_HIGHADJ 4
00565 #define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5
00566 #define EFI_IMAGE_REL_BASED_IA64_IMM64 9
00567 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
00568 #define EFI_IMAGE_REL_BASED_DIR64 10
00569
00570
00571
00572
00573 typedef struct {
00574 union {
00575 UINT32 SymbolTableIndex;
00576 UINT32 VirtualAddress;
00577 } Type;
00578 UINT16 Linenumber;
00579 } EFI_IMAGE_LINENUMBER;
00580
00581
00582
00583
00584 #define EFI_IMAGE_SIZEOF_LINENUMBER 6
00585
00586
00587
00588
00589 #define EFI_IMAGE_ARCHIVE_START_SIZE 8
00590 #define EFI_IMAGE_ARCHIVE_START "!<arch>\n"
00591 #define EFI_IMAGE_ARCHIVE_END "`\n"
00592 #define EFI_IMAGE_ARCHIVE_PAD "\n"
00593 #define EFI_IMAGE_ARCHIVE_LINKER_MEMBER "/ "
00594 #define EFI_IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
00595
00596 typedef struct {
00597 UINT8 Name[16];
00598 UINT8 Date[12];
00599 UINT8 UserID[6];
00600 UINT8 GroupID[6];
00601 UINT8 Mode[8];
00602 UINT8 Size[10];
00603 UINT8 EndHeader[2];
00604 } EFI_IMAGE_ARCHIVE_MEMBER_HEADER;
00605
00606
00607
00608
00609 #define EFI_IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619 typedef struct {
00620 UINT32 Characteristics;
00621 UINT32 TimeDateStamp;
00622 UINT16 MajorVersion;
00623 UINT16 MinorVersion;
00624 UINT32 Name;
00625 UINT32 Base;
00626 UINT32 NumberOfFunctions;
00627 UINT32 NumberOfNames;
00628 UINT32 AddressOfFunctions;
00629 UINT32 AddressOfNames;
00630 UINT32 AddressOfNameOrdinals;
00631 } EFI_IMAGE_EXPORT_DIRECTORY;
00632
00633
00634
00635
00636 typedef struct {
00637 UINT16 Hint;
00638 UINT8 Name[1];
00639 } EFI_IMAGE_IMPORT_BY_NAME;
00640
00641 typedef struct {
00642 union {
00643 UINT32 Function;
00644 UINT32 Ordinal;
00645 EFI_IMAGE_IMPORT_BY_NAME *AddressOfData;
00646 } u1;
00647 } EFI_IMAGE_THUNK_DATA;
00648
00649 #define EFI_IMAGE_ORDINAL_FLAG BIT31
00650 #define EFI_IMAGE_SNAP_BY_ORDINAL(Ordinal) ((Ordinal & EFI_IMAGE_ORDINAL_FLAG) != 0)
00651 #define EFI_IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff)
00652
00653
00654
00655
00656 typedef struct {
00657 UINT32 Characteristics;
00658 UINT32 TimeDateStamp;
00659 UINT32 ForwarderChain;
00660 UINT32 Name;
00661 EFI_IMAGE_THUNK_DATA *FirstThunk;
00662 } EFI_IMAGE_IMPORT_DESCRIPTOR;
00663
00664
00665
00666
00667
00668 typedef struct {
00669 UINT32 Characteristics;
00670 UINT32 TimeDateStamp;
00671 UINT16 MajorVersion;
00672 UINT16 MinorVersion;
00673 UINT32 Type;
00674 UINT32 SizeOfData;
00675 UINT32 RVA;
00676 UINT32 FileOffset;
00677 } EFI_IMAGE_DEBUG_DIRECTORY_ENTRY;
00678
00679 #define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2
00680
00681
00682
00683
00684 #define CODEVIEW_SIGNATURE_NB10 SIGNATURE_32('N', 'B', '1', '0')
00685 typedef struct {
00686 UINT32 Signature;
00687 UINT32 Unknown;
00688 UINT32 Unknown2;
00689 UINT32 Unknown3;
00690
00691
00692
00693 } EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY;
00694
00695
00696
00697
00698 #define CODEVIEW_SIGNATURE_RSDS SIGNATURE_32('R', 'S', 'D', 'S')
00699 typedef struct {
00700 UINT32 Signature;
00701 UINT32 Unknown;
00702 UINT32 Unknown2;
00703 UINT32 Unknown3;
00704 UINT32 Unknown4;
00705 UINT32 Unknown5;
00706
00707
00708
00709 } EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY;
00710
00711
00712
00713
00714 typedef struct {
00715 UINT16 Signature;
00716 UINT16 Machine;
00717 UINT8 NumberOfSections;
00718 UINT8 Subsystem;
00719 UINT16 StrippedSize;
00720 UINT32 AddressOfEntryPoint;
00721 UINT32 BaseOfCode;
00722 UINT64 ImageBase;
00723 EFI_IMAGE_DATA_DIRECTORY DataDirectory[2];
00724 } EFI_TE_IMAGE_HEADER;
00725
00726
00727 #define EFI_TE_IMAGE_HEADER_SIGNATURE SIGNATURE_16('V', 'Z')
00728
00729
00730
00731
00732 #define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC 0
00733 #define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG 1
00734
00735
00736
00737
00738
00739 typedef union {
00740 EFI_IMAGE_NT_HEADERS32 Pe32;
00741 EFI_IMAGE_NT_HEADERS64 Pe32Plus;
00742 EFI_TE_IMAGE_HEADER Te;
00743 } EFI_IMAGE_OPTIONAL_HEADER_UNION;
00744
00745 typedef union {
00746 EFI_IMAGE_NT_HEADERS32 *Pe32;
00747 EFI_IMAGE_NT_HEADERS64 *Pe32Plus;
00748 EFI_TE_IMAGE_HEADER *Te;
00749 EFI_IMAGE_OPTIONAL_HEADER_UNION *Union;
00750 } EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION;
00751
00752 #endif