]>
Commit | Line | Data |
---|---|---|
3fa2d384 VP |
1 | /* |
2 | * Copyright (c) 2018 Virtuozzo International GmbH | |
3 | * | |
4 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
5 | * | |
6 | */ | |
7 | ||
8 | #ifndef PE_H | |
9 | #define PE_H | |
10 | ||
3fa2d384 | 11 | |
4591f4ce | 12 | #ifndef _WIN32 |
3fa2d384 VP |
13 | typedef struct IMAGE_DOS_HEADER { |
14 | uint16_t e_magic; /* 0x00: MZ Header signature */ | |
15 | uint16_t e_cblp; /* 0x02: Bytes on last page of file */ | |
16 | uint16_t e_cp; /* 0x04: Pages in file */ | |
17 | uint16_t e_crlc; /* 0x06: Relocations */ | |
18 | uint16_t e_cparhdr; /* 0x08: Size of header in paragraphs */ | |
19 | uint16_t e_minalloc; /* 0x0a: Minimum extra paragraphs needed */ | |
20 | uint16_t e_maxalloc; /* 0x0c: Maximum extra paragraphs needed */ | |
21 | uint16_t e_ss; /* 0x0e: Initial (relative) SS value */ | |
22 | uint16_t e_sp; /* 0x10: Initial SP value */ | |
23 | uint16_t e_csum; /* 0x12: Checksum */ | |
24 | uint16_t e_ip; /* 0x14: Initial IP value */ | |
25 | uint16_t e_cs; /* 0x16: Initial (relative) CS value */ | |
26 | uint16_t e_lfarlc; /* 0x18: File address of relocation table */ | |
27 | uint16_t e_ovno; /* 0x1a: Overlay number */ | |
28 | uint16_t e_res[4]; /* 0x1c: Reserved words */ | |
29 | uint16_t e_oemid; /* 0x24: OEM identifier (for e_oeminfo) */ | |
30 | uint16_t e_oeminfo; /* 0x26: OEM information; e_oemid specific */ | |
31 | uint16_t e_res2[10]; /* 0x28: Reserved words */ | |
32 | uint32_t e_lfanew; /* 0x3c: Offset to extended header */ | |
33 | } __attribute__ ((packed)) IMAGE_DOS_HEADER; | |
34 | ||
35 | typedef struct IMAGE_FILE_HEADER { | |
36 | uint16_t Machine; | |
37 | uint16_t NumberOfSections; | |
38 | uint32_t TimeDateStamp; | |
39 | uint32_t PointerToSymbolTable; | |
40 | uint32_t NumberOfSymbols; | |
41 | uint16_t SizeOfOptionalHeader; | |
42 | uint16_t Characteristics; | |
43 | } __attribute__ ((packed)) IMAGE_FILE_HEADER; | |
44 | ||
45 | typedef struct IMAGE_DATA_DIRECTORY { | |
46 | uint32_t VirtualAddress; | |
47 | uint32_t Size; | |
48 | } __attribute__ ((packed)) IMAGE_DATA_DIRECTORY; | |
49 | ||
50 | #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 | |
51 | ||
52 | typedef struct IMAGE_OPTIONAL_HEADER64 { | |
53 | uint16_t Magic; /* 0x20b */ | |
54 | uint8_t MajorLinkerVersion; | |
55 | uint8_t MinorLinkerVersion; | |
56 | uint32_t SizeOfCode; | |
57 | uint32_t SizeOfInitializedData; | |
58 | uint32_t SizeOfUninitializedData; | |
59 | uint32_t AddressOfEntryPoint; | |
60 | uint32_t BaseOfCode; | |
61 | uint64_t ImageBase; | |
62 | uint32_t SectionAlignment; | |
63 | uint32_t FileAlignment; | |
64 | uint16_t MajorOperatingSystemVersion; | |
65 | uint16_t MinorOperatingSystemVersion; | |
66 | uint16_t MajorImageVersion; | |
67 | uint16_t MinorImageVersion; | |
68 | uint16_t MajorSubsystemVersion; | |
69 | uint16_t MinorSubsystemVersion; | |
70 | uint32_t Win32VersionValue; | |
71 | uint32_t SizeOfImage; | |
72 | uint32_t SizeOfHeaders; | |
73 | uint32_t CheckSum; | |
74 | uint16_t Subsystem; | |
75 | uint16_t DllCharacteristics; | |
76 | uint64_t SizeOfStackReserve; | |
77 | uint64_t SizeOfStackCommit; | |
78 | uint64_t SizeOfHeapReserve; | |
79 | uint64_t SizeOfHeapCommit; | |
80 | uint32_t LoaderFlags; | |
81 | uint32_t NumberOfRvaAndSizes; | |
82 | IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; | |
83 | } __attribute__ ((packed)) IMAGE_OPTIONAL_HEADER64; | |
84 | ||
85 | typedef struct IMAGE_NT_HEADERS64 { | |
86 | uint32_t Signature; | |
87 | IMAGE_FILE_HEADER FileHeader; | |
88 | IMAGE_OPTIONAL_HEADER64 OptionalHeader; | |
89 | } __attribute__ ((packed)) IMAGE_NT_HEADERS64; | |
90 | ||
3fa2d384 VP |
91 | typedef struct IMAGE_DEBUG_DIRECTORY { |
92 | uint32_t Characteristics; | |
93 | uint32_t TimeDateStamp; | |
94 | uint16_t MajorVersion; | |
95 | uint16_t MinorVersion; | |
96 | uint32_t Type; | |
97 | uint32_t SizeOfData; | |
98 | uint32_t AddressOfRawData; | |
99 | uint32_t PointerToRawData; | |
100 | } __attribute__ ((packed)) IMAGE_DEBUG_DIRECTORY; | |
101 | ||
102 | #define IMAGE_DEBUG_TYPE_CODEVIEW 2 | |
4591f4ce VP |
103 | #endif |
104 | ||
105 | #define IMAGE_FILE_DEBUG_DIRECTORY 6 | |
3fa2d384 VP |
106 | |
107 | typedef struct guid_t { | |
108 | uint32_t a; | |
109 | uint16_t b; | |
110 | uint16_t c; | |
111 | uint8_t d[2]; | |
112 | uint8_t e[6]; | |
113 | } __attribute__ ((packed)) guid_t; | |
114 | ||
115 | typedef struct OMFSignatureRSDS { | |
116 | char Signature[4]; | |
117 | guid_t guid; | |
118 | uint32_t age; | |
119 | char name[]; | |
120 | } __attribute__ ((packed)) OMFSignatureRSDS; | |
121 | ||
122 | #endif /* PE_H */ |