123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- #ifndef LLVM_BINARYFORMAT_COFF_H
- #define LLVM_BINARYFORMAT_COFF_H
- #include "llvm/Support/DataTypes.h"
- #include <cassert>
- namespace llvm {
- namespace COFF {
- const int32_t MaxNumberOfSections16 = 65279;
- static const char PEMagic[] = {'P', 'E', '\0', '\0'};
- static const char BigObjMagic[] = {
- '\xc7', '\xa1', '\xba', '\xd1', '\xee', '\xba', '\xa9', '\x4b',
- '\xaf', '\x20', '\xfa', '\xf6', '\x6a', '\xa4', '\xdc', '\xb8',
- };
- static const char ClGlObjMagic[] = {
- '\x38', '\xfe', '\xb3', '\x0c', '\xa5', '\xd9', '\xab', '\x4d',
- '\xac', '\x9b', '\xd6', '\xb6', '\x22', '\x26', '\x53', '\xc2',
- };
- static const char WinResMagic[] = {
- '\x00', '\x00', '\x00', '\x00', '\x20', '\x00', '\x00', '\x00',
- '\xff', '\xff', '\x00', '\x00', '\xff', '\xff', '\x00', '\x00',
- };
- enum {
- Header16Size = 20,
- Header32Size = 56,
- NameSize = 8,
- Symbol16Size = 18,
- Symbol32Size = 20,
- SectionSize = 40,
- RelocationSize = 10
- };
- struct header {
- uint16_t Machine;
- int32_t NumberOfSections;
- uint32_t TimeDateStamp;
- uint32_t PointerToSymbolTable;
- uint32_t NumberOfSymbols;
- uint16_t SizeOfOptionalHeader;
- uint16_t Characteristics;
- };
- struct BigObjHeader {
- enum : uint16_t { MinBigObjectVersion = 2 };
- uint16_t Sig1;
- uint16_t Sig2;
- uint16_t Version;
- uint16_t Machine;
- uint32_t TimeDateStamp;
- uint8_t UUID[16];
- uint32_t unused1;
- uint32_t unused2;
- uint32_t unused3;
- uint32_t unused4;
- uint32_t NumberOfSections;
- uint32_t PointerToSymbolTable;
- uint32_t NumberOfSymbols;
- };
- enum MachineTypes : unsigned {
- MT_Invalid = 0xffff,
- IMAGE_FILE_MACHINE_UNKNOWN = 0x0,
- IMAGE_FILE_MACHINE_AM33 = 0x1D3,
- IMAGE_FILE_MACHINE_AMD64 = 0x8664,
- IMAGE_FILE_MACHINE_ARM = 0x1C0,
- IMAGE_FILE_MACHINE_ARMNT = 0x1C4,
- IMAGE_FILE_MACHINE_ARM64 = 0xAA64,
- IMAGE_FILE_MACHINE_ARM64EC = 0xA641,
- IMAGE_FILE_MACHINE_EBC = 0xEBC,
- IMAGE_FILE_MACHINE_I386 = 0x14C,
- IMAGE_FILE_MACHINE_IA64 = 0x200,
- IMAGE_FILE_MACHINE_M32R = 0x9041,
- IMAGE_FILE_MACHINE_MIPS16 = 0x266,
- IMAGE_FILE_MACHINE_MIPSFPU = 0x366,
- IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466,
- IMAGE_FILE_MACHINE_POWERPC = 0x1F0,
- IMAGE_FILE_MACHINE_POWERPCFP = 0x1F1,
- IMAGE_FILE_MACHINE_R4000 = 0x166,
- IMAGE_FILE_MACHINE_RISCV32 = 0x5032,
- IMAGE_FILE_MACHINE_RISCV64 = 0x5064,
- IMAGE_FILE_MACHINE_RISCV128 = 0x5128,
- IMAGE_FILE_MACHINE_SH3 = 0x1A2,
- IMAGE_FILE_MACHINE_SH3DSP = 0x1A3,
- IMAGE_FILE_MACHINE_SH4 = 0x1A6,
- IMAGE_FILE_MACHINE_SH5 = 0x1A8,
- IMAGE_FILE_MACHINE_THUMB = 0x1C2,
- IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
- };
- enum Characteristics : unsigned {
- C_Invalid = 0,
-
-
- IMAGE_FILE_RELOCS_STRIPPED = 0x0001,
-
- IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002,
-
-
- IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004,
-
-
- IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008,
-
- IMAGE_FILE_AGGRESSIVE_WS_TRIM = 0x0010,
-
- IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020,
-
-
- IMAGE_FILE_BYTES_REVERSED_LO = 0x0080,
-
- IMAGE_FILE_32BIT_MACHINE = 0x0100,
-
- IMAGE_FILE_DEBUG_STRIPPED = 0x0200,
-
- IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400,
-
- IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800,
-
- IMAGE_FILE_SYSTEM = 0x1000,
-
- IMAGE_FILE_DLL = 0x2000,
-
- IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000,
-
-
- IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
- };
- enum ResourceTypeID : unsigned {
- RID_Cursor = 1,
- RID_Bitmap = 2,
- RID_Icon = 3,
- RID_Menu = 4,
- RID_Dialog = 5,
- RID_String = 6,
- RID_FontDir = 7,
- RID_Font = 8,
- RID_Accelerator = 9,
- RID_RCData = 10,
- RID_MessageTable = 11,
- RID_Group_Cursor = 12,
- RID_Group_Icon = 14,
- RID_Version = 16,
- RID_DLGInclude = 17,
- RID_PlugPlay = 19,
- RID_VXD = 20,
- RID_AniCursor = 21,
- RID_AniIcon = 22,
- RID_HTML = 23,
- RID_Manifest = 24,
- };
- struct symbol {
- char Name[NameSize];
- uint32_t Value;
- int32_t SectionNumber;
- uint16_t Type;
- uint8_t StorageClass;
- uint8_t NumberOfAuxSymbols;
- };
- enum SymbolSectionNumber : int32_t {
- IMAGE_SYM_DEBUG = -2,
- IMAGE_SYM_ABSOLUTE = -1,
- IMAGE_SYM_UNDEFINED = 0
- };
- enum SymbolStorageClass {
- SSC_Invalid = 0xff,
- IMAGE_SYM_CLASS_END_OF_FUNCTION = -1,
- IMAGE_SYM_CLASS_NULL = 0,
- IMAGE_SYM_CLASS_AUTOMATIC = 1,
- IMAGE_SYM_CLASS_EXTERNAL = 2,
- IMAGE_SYM_CLASS_STATIC = 3,
- IMAGE_SYM_CLASS_REGISTER = 4,
- IMAGE_SYM_CLASS_EXTERNAL_DEF = 5,
- IMAGE_SYM_CLASS_LABEL = 6,
- IMAGE_SYM_CLASS_UNDEFINED_LABEL = 7,
- IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = 8,
- IMAGE_SYM_CLASS_ARGUMENT = 9,
- IMAGE_SYM_CLASS_STRUCT_TAG = 10,
- IMAGE_SYM_CLASS_MEMBER_OF_UNION = 11,
- IMAGE_SYM_CLASS_UNION_TAG = 12,
- IMAGE_SYM_CLASS_TYPE_DEFINITION = 13,
- IMAGE_SYM_CLASS_UNDEFINED_STATIC = 14,
- IMAGE_SYM_CLASS_ENUM_TAG = 15,
- IMAGE_SYM_CLASS_MEMBER_OF_ENUM = 16,
- IMAGE_SYM_CLASS_REGISTER_PARAM = 17,
- IMAGE_SYM_CLASS_BIT_FIELD = 18,
-
- IMAGE_SYM_CLASS_BLOCK = 100,
-
- IMAGE_SYM_CLASS_FUNCTION = 101,
- IMAGE_SYM_CLASS_END_OF_STRUCT = 102,
- IMAGE_SYM_CLASS_FILE = 103,
-
- IMAGE_SYM_CLASS_SECTION = 104,
- IMAGE_SYM_CLASS_WEAK_EXTERNAL = 105,
-
- IMAGE_SYM_CLASS_CLR_TOKEN = 107
- };
- enum SymbolBaseType : unsigned {
- IMAGE_SYM_TYPE_NULL = 0,
- IMAGE_SYM_TYPE_VOID = 1,
- IMAGE_SYM_TYPE_CHAR = 2,
- IMAGE_SYM_TYPE_SHORT = 3,
- IMAGE_SYM_TYPE_INT = 4,
- IMAGE_SYM_TYPE_LONG = 5,
- IMAGE_SYM_TYPE_FLOAT = 6,
- IMAGE_SYM_TYPE_DOUBLE = 7,
- IMAGE_SYM_TYPE_STRUCT = 8,
- IMAGE_SYM_TYPE_UNION = 9,
- IMAGE_SYM_TYPE_ENUM = 10,
- IMAGE_SYM_TYPE_MOE = 11,
- IMAGE_SYM_TYPE_BYTE = 12,
- IMAGE_SYM_TYPE_WORD = 13,
- IMAGE_SYM_TYPE_UINT = 14,
- IMAGE_SYM_TYPE_DWORD = 15
- };
- enum SymbolComplexType : unsigned {
- IMAGE_SYM_DTYPE_NULL = 0,
- IMAGE_SYM_DTYPE_POINTER = 1,
- IMAGE_SYM_DTYPE_FUNCTION = 2,
- IMAGE_SYM_DTYPE_ARRAY = 3,
-
- SCT_COMPLEX_TYPE_SHIFT = 4
- };
- enum AuxSymbolType { IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1 };
- struct section {
- char Name[NameSize];
- uint32_t VirtualSize;
- uint32_t VirtualAddress;
- uint32_t SizeOfRawData;
- uint32_t PointerToRawData;
- uint32_t PointerToRelocations;
- uint32_t PointerToLineNumbers;
- uint16_t NumberOfRelocations;
- uint16_t NumberOfLineNumbers;
- uint32_t Characteristics;
- };
- enum SectionCharacteristics : uint32_t {
- SC_Invalid = 0xffffffff,
- IMAGE_SCN_TYPE_NOLOAD = 0x00000002,
- IMAGE_SCN_TYPE_NO_PAD = 0x00000008,
- IMAGE_SCN_CNT_CODE = 0x00000020,
- IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040,
- IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080,
- IMAGE_SCN_LNK_OTHER = 0x00000100,
- IMAGE_SCN_LNK_INFO = 0x00000200,
- IMAGE_SCN_LNK_REMOVE = 0x00000800,
- IMAGE_SCN_LNK_COMDAT = 0x00001000,
- IMAGE_SCN_GPREL = 0x00008000,
- IMAGE_SCN_MEM_PURGEABLE = 0x00020000,
- IMAGE_SCN_MEM_16BIT = 0x00020000,
- IMAGE_SCN_MEM_LOCKED = 0x00040000,
- IMAGE_SCN_MEM_PRELOAD = 0x00080000,
- IMAGE_SCN_ALIGN_1BYTES = 0x00100000,
- IMAGE_SCN_ALIGN_2BYTES = 0x00200000,
- IMAGE_SCN_ALIGN_4BYTES = 0x00300000,
- IMAGE_SCN_ALIGN_8BYTES = 0x00400000,
- IMAGE_SCN_ALIGN_16BYTES = 0x00500000,
- IMAGE_SCN_ALIGN_32BYTES = 0x00600000,
- IMAGE_SCN_ALIGN_64BYTES = 0x00700000,
- IMAGE_SCN_ALIGN_128BYTES = 0x00800000,
- IMAGE_SCN_ALIGN_256BYTES = 0x00900000,
- IMAGE_SCN_ALIGN_512BYTES = 0x00A00000,
- IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000,
- IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000,
- IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000,
- IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000,
- IMAGE_SCN_ALIGN_MASK = 0x00F00000,
- IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000,
- IMAGE_SCN_MEM_DISCARDABLE = 0x02000000,
- IMAGE_SCN_MEM_NOT_CACHED = 0x04000000,
- IMAGE_SCN_MEM_NOT_PAGED = 0x08000000,
- IMAGE_SCN_MEM_SHARED = 0x10000000,
- IMAGE_SCN_MEM_EXECUTE = 0x20000000,
- IMAGE_SCN_MEM_READ = 0x40000000,
- IMAGE_SCN_MEM_WRITE = 0x80000000
- };
- struct relocation {
- uint32_t VirtualAddress;
- uint32_t SymbolTableIndex;
- uint16_t Type;
- };
- enum RelocationTypeI386 : unsigned {
- IMAGE_REL_I386_ABSOLUTE = 0x0000,
- IMAGE_REL_I386_DIR16 = 0x0001,
- IMAGE_REL_I386_REL16 = 0x0002,
- IMAGE_REL_I386_DIR32 = 0x0006,
- IMAGE_REL_I386_DIR32NB = 0x0007,
- IMAGE_REL_I386_SEG12 = 0x0009,
- IMAGE_REL_I386_SECTION = 0x000A,
- IMAGE_REL_I386_SECREL = 0x000B,
- IMAGE_REL_I386_TOKEN = 0x000C,
- IMAGE_REL_I386_SECREL7 = 0x000D,
- IMAGE_REL_I386_REL32 = 0x0014
- };
- enum RelocationTypeAMD64 : unsigned {
- IMAGE_REL_AMD64_ABSOLUTE = 0x0000,
- IMAGE_REL_AMD64_ADDR64 = 0x0001,
- IMAGE_REL_AMD64_ADDR32 = 0x0002,
- IMAGE_REL_AMD64_ADDR32NB = 0x0003,
- IMAGE_REL_AMD64_REL32 = 0x0004,
- IMAGE_REL_AMD64_REL32_1 = 0x0005,
- IMAGE_REL_AMD64_REL32_2 = 0x0006,
- IMAGE_REL_AMD64_REL32_3 = 0x0007,
- IMAGE_REL_AMD64_REL32_4 = 0x0008,
- IMAGE_REL_AMD64_REL32_5 = 0x0009,
- IMAGE_REL_AMD64_SECTION = 0x000A,
- IMAGE_REL_AMD64_SECREL = 0x000B,
- IMAGE_REL_AMD64_SECREL7 = 0x000C,
- IMAGE_REL_AMD64_TOKEN = 0x000D,
- IMAGE_REL_AMD64_SREL32 = 0x000E,
- IMAGE_REL_AMD64_PAIR = 0x000F,
- IMAGE_REL_AMD64_SSPAN32 = 0x0010
- };
- enum RelocationTypesARM : unsigned {
- IMAGE_REL_ARM_ABSOLUTE = 0x0000,
- IMAGE_REL_ARM_ADDR32 = 0x0001,
- IMAGE_REL_ARM_ADDR32NB = 0x0002,
- IMAGE_REL_ARM_BRANCH24 = 0x0003,
- IMAGE_REL_ARM_BRANCH11 = 0x0004,
- IMAGE_REL_ARM_TOKEN = 0x0005,
- IMAGE_REL_ARM_BLX24 = 0x0008,
- IMAGE_REL_ARM_BLX11 = 0x0009,
- IMAGE_REL_ARM_REL32 = 0x000A,
- IMAGE_REL_ARM_SECTION = 0x000E,
- IMAGE_REL_ARM_SECREL = 0x000F,
- IMAGE_REL_ARM_MOV32A = 0x0010,
- IMAGE_REL_ARM_MOV32T = 0x0011,
- IMAGE_REL_ARM_BRANCH20T = 0x0012,
- IMAGE_REL_ARM_BRANCH24T = 0x0014,
- IMAGE_REL_ARM_BLX23T = 0x0015,
- IMAGE_REL_ARM_PAIR = 0x0016,
- };
- enum RelocationTypesARM64 : unsigned {
- IMAGE_REL_ARM64_ABSOLUTE = 0x0000,
- IMAGE_REL_ARM64_ADDR32 = 0x0001,
- IMAGE_REL_ARM64_ADDR32NB = 0x0002,
- IMAGE_REL_ARM64_BRANCH26 = 0x0003,
- IMAGE_REL_ARM64_PAGEBASE_REL21 = 0x0004,
- IMAGE_REL_ARM64_REL21 = 0x0005,
- IMAGE_REL_ARM64_PAGEOFFSET_12A = 0x0006,
- IMAGE_REL_ARM64_PAGEOFFSET_12L = 0x0007,
- IMAGE_REL_ARM64_SECREL = 0x0008,
- IMAGE_REL_ARM64_SECREL_LOW12A = 0x0009,
- IMAGE_REL_ARM64_SECREL_HIGH12A = 0x000A,
- IMAGE_REL_ARM64_SECREL_LOW12L = 0x000B,
- IMAGE_REL_ARM64_TOKEN = 0x000C,
- IMAGE_REL_ARM64_SECTION = 0x000D,
- IMAGE_REL_ARM64_ADDR64 = 0x000E,
- IMAGE_REL_ARM64_BRANCH19 = 0x000F,
- IMAGE_REL_ARM64_BRANCH14 = 0x0010,
- IMAGE_REL_ARM64_REL32 = 0x0011,
- };
- enum COMDATType : uint8_t {
- IMAGE_COMDAT_SELECT_NODUPLICATES = 1,
- IMAGE_COMDAT_SELECT_ANY,
- IMAGE_COMDAT_SELECT_SAME_SIZE,
- IMAGE_COMDAT_SELECT_EXACT_MATCH,
- IMAGE_COMDAT_SELECT_ASSOCIATIVE,
- IMAGE_COMDAT_SELECT_LARGEST,
- IMAGE_COMDAT_SELECT_NEWEST
- };
- struct AuxiliaryFunctionDefinition {
- uint32_t TagIndex;
- uint32_t TotalSize;
- uint32_t PointerToLinenumber;
- uint32_t PointerToNextFunction;
- char unused[2];
- };
- struct AuxiliarybfAndefSymbol {
- uint8_t unused1[4];
- uint16_t Linenumber;
- uint8_t unused2[6];
- uint32_t PointerToNextFunction;
- uint8_t unused3[2];
- };
- struct AuxiliaryWeakExternal {
- uint32_t TagIndex;
- uint32_t Characteristics;
- uint8_t unused[10];
- };
- enum WeakExternalCharacteristics : unsigned {
- IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1,
- IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2,
- IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3,
- IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY = 4
- };
- struct AuxiliarySectionDefinition {
- uint32_t Length;
- uint16_t NumberOfRelocations;
- uint16_t NumberOfLinenumbers;
- uint32_t CheckSum;
- uint32_t Number;
- uint8_t Selection;
- char unused;
- };
- struct AuxiliaryCLRToken {
- uint8_t AuxType;
- uint8_t unused1;
- uint32_t SymbolTableIndex;
- char unused2[12];
- };
- union Auxiliary {
- AuxiliaryFunctionDefinition FunctionDefinition;
- AuxiliarybfAndefSymbol bfAndefSymbol;
- AuxiliaryWeakExternal WeakExternal;
- AuxiliarySectionDefinition SectionDefinition;
- };
- struct ImportDirectoryTableEntry {
- uint32_t ImportLookupTableRVA;
- uint32_t TimeDateStamp;
- uint32_t ForwarderChain;
- uint32_t NameRVA;
- uint32_t ImportAddressTableRVA;
- };
- struct ImportLookupTableEntry32 {
- uint32_t data;
-
- bool isOrdinal() const { return data & 0x80000000; }
-
- uint16_t getOrdinal() const {
- assert(isOrdinal() && "ILT entry is not an ordinal!");
- return data & 0xFFFF;
- }
-
- void setOrdinal(uint16_t o) {
- data = o;
- data |= 0x80000000;
- }
-
- uint32_t getHintNameRVA() const {
- assert(!isOrdinal() && "ILT entry is not a Hint/Name RVA!");
- return data;
- }
-
- void setHintNameRVA(uint32_t rva) { data = rva; }
- };
- struct DOSHeader {
- uint16_t Magic;
- uint16_t UsedBytesInTheLastPage;
- uint16_t FileSizeInPages;
- uint16_t NumberOfRelocationItems;
- uint16_t HeaderSizeInParagraphs;
- uint16_t MinimumExtraParagraphs;
- uint16_t MaximumExtraParagraphs;
- uint16_t InitialRelativeSS;
- uint16_t InitialSP;
- uint16_t Checksum;
- uint16_t InitialIP;
- uint16_t InitialRelativeCS;
- uint16_t AddressOfRelocationTable;
- uint16_t OverlayNumber;
- uint16_t Reserved[4];
- uint16_t OEMid;
- uint16_t OEMinfo;
- uint16_t Reserved2[10];
- uint32_t AddressOfNewExeHeader;
- };
- struct PE32Header {
- enum { PE32 = 0x10b, PE32_PLUS = 0x20b };
- uint16_t Magic;
- uint8_t MajorLinkerVersion;
- uint8_t MinorLinkerVersion;
- uint32_t SizeOfCode;
- uint32_t SizeOfInitializedData;
- uint32_t SizeOfUninitializedData;
- uint32_t AddressOfEntryPoint;
- uint32_t BaseOfCode;
- uint32_t BaseOfData;
- uint64_t ImageBase;
- uint32_t SectionAlignment;
- uint32_t FileAlignment;
- uint16_t MajorOperatingSystemVersion;
- uint16_t MinorOperatingSystemVersion;
- uint16_t MajorImageVersion;
- uint16_t MinorImageVersion;
- uint16_t MajorSubsystemVersion;
- uint16_t MinorSubsystemVersion;
- uint32_t Win32VersionValue;
- uint32_t SizeOfImage;
- uint32_t SizeOfHeaders;
- uint32_t CheckSum;
- uint16_t Subsystem;
-
- uint16_t DLLCharacteristics;
- uint64_t SizeOfStackReserve;
- uint64_t SizeOfStackCommit;
- uint64_t SizeOfHeapReserve;
- uint64_t SizeOfHeapCommit;
- uint32_t LoaderFlags;
-
- uint32_t NumberOfRvaAndSize;
- };
- struct DataDirectory {
- uint32_t RelativeVirtualAddress;
- uint32_t Size;
- };
- enum DataDirectoryIndex : unsigned {
- EXPORT_TABLE = 0,
- IMPORT_TABLE,
- RESOURCE_TABLE,
- EXCEPTION_TABLE,
- CERTIFICATE_TABLE,
- BASE_RELOCATION_TABLE,
- DEBUG_DIRECTORY,
- ARCHITECTURE,
- GLOBAL_PTR,
- TLS_TABLE,
- LOAD_CONFIG_TABLE,
- BOUND_IMPORT,
- IAT,
- DELAY_IMPORT_DESCRIPTOR,
- CLR_RUNTIME_HEADER,
- NUM_DATA_DIRECTORIES
- };
- enum WindowsSubsystem : unsigned {
- IMAGE_SUBSYSTEM_UNKNOWN = 0,
- IMAGE_SUBSYSTEM_NATIVE = 1,
- IMAGE_SUBSYSTEM_WINDOWS_GUI = 2,
- IMAGE_SUBSYSTEM_WINDOWS_CUI = 3,
- IMAGE_SUBSYSTEM_OS2_CUI = 5,
- IMAGE_SUBSYSTEM_POSIX_CUI = 7,
- IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8,
- IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9,
- IMAGE_SUBSYSTEM_EFI_APPLICATION = 10,
- IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11,
-
- IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12,
-
- IMAGE_SUBSYSTEM_EFI_ROM = 13,
- IMAGE_SUBSYSTEM_XBOX = 14,
- IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
- };
- enum DLLCharacteristics : unsigned {
-
- IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020,
-
- IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040,
-
- IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY = 0x0080,
-
- IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100,
-
- IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION = 0x0200,
-
-
- IMAGE_DLL_CHARACTERISTICS_NO_SEH = 0x0400,
-
- IMAGE_DLL_CHARACTERISTICS_NO_BIND = 0x0800,
-
- IMAGE_DLL_CHARACTERISTICS_APPCONTAINER = 0x1000,
-
- IMAGE_DLL_CHARACTERISTICS_WDM_DRIVER = 0x2000,
-
- IMAGE_DLL_CHARACTERISTICS_GUARD_CF = 0x4000,
-
- IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
- };
- enum ExtendedDLLCharacteristics : unsigned {
-
- IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT = 0x0001
- };
- enum DebugType : unsigned {
- IMAGE_DEBUG_TYPE_UNKNOWN = 0,
- IMAGE_DEBUG_TYPE_COFF = 1,
- IMAGE_DEBUG_TYPE_CODEVIEW = 2,
- IMAGE_DEBUG_TYPE_FPO = 3,
- IMAGE_DEBUG_TYPE_MISC = 4,
- IMAGE_DEBUG_TYPE_EXCEPTION = 5,
- IMAGE_DEBUG_TYPE_FIXUP = 6,
- IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7,
- IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8,
- IMAGE_DEBUG_TYPE_BORLAND = 9,
- IMAGE_DEBUG_TYPE_RESERVED10 = 10,
- IMAGE_DEBUG_TYPE_CLSID = 11,
- IMAGE_DEBUG_TYPE_VC_FEATURE = 12,
- IMAGE_DEBUG_TYPE_POGO = 13,
- IMAGE_DEBUG_TYPE_ILTCG = 14,
- IMAGE_DEBUG_TYPE_MPX = 15,
- IMAGE_DEBUG_TYPE_REPRO = 16,
- IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS = 20,
- };
- enum BaseRelocationType : unsigned {
- IMAGE_REL_BASED_ABSOLUTE = 0,
- IMAGE_REL_BASED_HIGH = 1,
- IMAGE_REL_BASED_LOW = 2,
- IMAGE_REL_BASED_HIGHLOW = 3,
- IMAGE_REL_BASED_HIGHADJ = 4,
- IMAGE_REL_BASED_MIPS_JMPADDR = 5,
- IMAGE_REL_BASED_ARM_MOV32A = 5,
- IMAGE_REL_BASED_ARM_MOV32T = 7,
- IMAGE_REL_BASED_MIPS_JMPADDR16 = 9,
- IMAGE_REL_BASED_DIR64 = 10
- };
- enum ImportType : unsigned {
- IMPORT_CODE = 0,
- IMPORT_DATA = 1,
- IMPORT_CONST = 2
- };
- enum ImportNameType : unsigned {
-
-
-
-
- IMPORT_ORDINAL = 0,
-
- IMPORT_NAME = 1,
-
-
- IMPORT_NAME_NOPREFIX = 2,
-
-
- IMPORT_NAME_UNDECORATE = 3
- };
- enum class GuardFlags : uint32_t {
-
-
- CF_INSTRUMENTED = 0x100,
-
- CFW_INSTRUMENTED = 0x200,
-
- CF_FUNCTION_TABLE_PRESENT = 0x400,
-
- SECURITY_COOKIE_UNUSED = 0x800,
-
- PROTECT_DELAYLOAD_IAT = 0x1000,
-
-
- DELAYLOAD_IAT_IN_ITS_OWN_SECTION = 0x2000,
-
-
- CF_EXPORT_SUPPRESSION_INFO_PRESENT = 0x4000,
-
- CF_ENABLE_EXPORT_SUPPRESSION = 0x8000,
-
- CF_LONGJUMP_TABLE_PRESENT = 0x10000,
-
- EH_CONTINUATION_TABLE_PRESENT = 0x400000,
-
-
-
- CF_FUNCTION_TABLE_SIZE_MASK = 0xF0000000,
- CF_FUNCTION_TABLE_SIZE_5BYTES = 0x10000000,
- CF_FUNCTION_TABLE_SIZE_6BYTES = 0x20000000,
- CF_FUNCTION_TABLE_SIZE_7BYTES = 0x30000000,
- CF_FUNCTION_TABLE_SIZE_8BYTES = 0x40000000,
- CF_FUNCTION_TABLE_SIZE_9BYTES = 0x50000000,
- CF_FUNCTION_TABLE_SIZE_10BYTES = 0x60000000,
- CF_FUNCTION_TABLE_SIZE_11BYTES = 0x70000000,
- CF_FUNCTION_TABLE_SIZE_12BYTES = 0x80000000,
- CF_FUNCTION_TABLE_SIZE_13BYTES = 0x90000000,
- CF_FUNCTION_TABLE_SIZE_14BYTES = 0xA0000000,
- CF_FUNCTION_TABLE_SIZE_15BYTES = 0xB0000000,
- CF_FUNCTION_TABLE_SIZE_16BYTES = 0xC0000000,
- CF_FUNCTION_TABLE_SIZE_17BYTES = 0xD0000000,
- CF_FUNCTION_TABLE_SIZE_18BYTES = 0xE0000000,
- CF_FUNCTION_TABLE_SIZE_19BYTES = 0xF0000000,
- };
- struct ImportHeader {
- uint16_t Sig1;
- uint16_t Sig2;
- uint16_t Version;
- uint16_t Machine;
- uint32_t TimeDateStamp;
- uint32_t SizeOfData;
- uint16_t OrdinalHint;
- uint16_t TypeInfo;
- ImportType getType() const { return static_cast<ImportType>(TypeInfo & 0x3); }
- ImportNameType getNameType() const {
- return static_cast<ImportNameType>((TypeInfo & 0x1C) >> 2);
- }
- };
- enum CodeViewIdentifiers {
- DEBUG_SECTION_MAGIC = 0x4,
- DEBUG_HASHES_SECTION_MAGIC = 0x133C9C5
- };
- enum Feat00Flags : uint32_t {
-
- SafeSEH = 0x1,
-
- GuardStack = 0x100,
-
- SDL = 0x200,
-
- GuardCF = 0x800,
-
- GuardEHCont = 0x4000,
-
- Kernel = 0x40000000,
- };
- inline bool isReservedSectionNumber(int32_t SectionNumber) {
- return SectionNumber <= 0;
- }
- bool encodeSectionName(char *Out, uint64_t Offset);
- }
- }
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|