/* * Copyright (c) 2018 Virtuozzo International GmbH * * This work is licensed under the terms of the GNU GPL, version 2 or later. * */ #ifndef PE_H #define PE_H #ifndef _WIN32 typedef struct IMAGE_DOS_HEADER { uint16_t e_magic; /* 0x00: MZ Header signature */ uint16_t e_cblp; /* 0x02: Bytes on last page of file */ uint16_t e_cp; /* 0x04: Pages in file */ uint16_t e_crlc; /* 0x06: Relocations */ uint16_t e_cparhdr; /* 0x08: Size of header in paragraphs */ uint16_t e_minalloc; /* 0x0a: Minimum extra paragraphs needed */ uint16_t e_maxalloc; /* 0x0c: Maximum extra paragraphs needed */ uint16_t e_ss; /* 0x0e: Initial (relative) SS value */ uint16_t e_sp; /* 0x10: Initial SP value */ uint16_t e_csum; /* 0x12: Checksum */ uint16_t e_ip; /* 0x14: Initial IP value */ uint16_t e_cs; /* 0x16: Initial (relative) CS value */ uint16_t e_lfarlc; /* 0x18: File address of relocation table */ uint16_t e_ovno; /* 0x1a: Overlay number */ uint16_t e_res[4]; /* 0x1c: Reserved words */ uint16_t e_oemid; /* 0x24: OEM identifier (for e_oeminfo) */ uint16_t e_oeminfo; /* 0x26: OEM information; e_oemid specific */ uint16_t e_res2[10]; /* 0x28: Reserved words */ uint32_t e_lfanew; /* 0x3c: Offset to extended header */ } __attribute__ ((packed)) IMAGE_DOS_HEADER; typedef struct IMAGE_FILE_HEADER { uint16_t Machine; uint16_t NumberOfSections; uint32_t TimeDateStamp; uint32_t PointerToSymbolTable; uint32_t NumberOfSymbols; uint16_t SizeOfOptionalHeader; uint16_t Characteristics; } __attribute__ ((packed)) IMAGE_FILE_HEADER; typedef struct IMAGE_DATA_DIRECTORY { uint32_t VirtualAddress; uint32_t Size; } __attribute__ ((packed)) IMAGE_DATA_DIRECTORY; #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 typedef struct IMAGE_OPTIONAL_HEADER64 { uint16_t Magic; /* 0x20b */ uint8_t MajorLinkerVersion; uint8_t MinorLinkerVersion; uint32_t SizeOfCode; uint32_t SizeOfInitializedData; uint32_t SizeOfUninitializedData; uint32_t AddressOfEntryPoint; uint32_t BaseOfCode; 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 NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } __attribute__ ((packed)) IMAGE_OPTIONAL_HEADER64; typedef struct IMAGE_NT_HEADERS64 { uint32_t Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER64 OptionalHeader; } __attribute__ ((packed)) IMAGE_NT_HEADERS64; typedef struct IMAGE_DEBUG_DIRECTORY { uint32_t Characteristics; uint32_t TimeDateStamp; uint16_t MajorVersion; uint16_t MinorVersion; uint32_t Type; uint32_t SizeOfData; uint32_t AddressOfRawData; uint32_t PointerToRawData; } __attribute__ ((packed)) IMAGE_DEBUG_DIRECTORY; #define IMAGE_DEBUG_TYPE_CODEVIEW 2 #endif #define IMAGE_FILE_DEBUG_DIRECTORY 6 typedef struct guid_t { uint32_t a; uint16_t b; uint16_t c; uint8_t d[2]; uint8_t e[6]; } __attribute__ ((packed)) guid_t; typedef struct OMFSignatureRSDS { char Signature[4]; guid_t guid; uint32_t age; char name[]; } __attribute__ ((packed)) OMFSignatureRSDS; #endif /* PE_H */