Implement rsym64.
[reactos.git] / reactos / tools / rsym / rsym64.h
1
2 #ifndef _RSYM64_H
3 #define _RSYM64_H
4
5 //C_ASSERT(sizeof(ULONG) == 4);
6 typedef unsigned char UBYTE;
7 typedef unsigned __int64 ULONG64;
8
9 #define IMAGE_FILE_MACHINE_AMD64 0x8664
10 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
11 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
12
13 #define UWOP_PUSH_NONVOL 0
14 #define UWOP_ALLOC_LARGE 1
15 #define UWOP_ALLOC_SMALL 2
16 #define UWOP_SET_FPREG 3
17 #define UWOP_SAVE_NONVOL 4
18 #define UWOP_SAVE_NONVOL_FAR 5
19 #define UWOP_SAVE_XMM 6
20 #define UWOP_SAVE_XMM_FAR 7
21 #define UWOP_SAVE_XMM128 8
22 #define UWOP_SAVE_XMM128_FAR 9
23 #define UWOP_PUSH_MACHFRAME 10
24
25 #define REG_RAX 0
26 #define REG_RCX 1
27 #define REG_RDX 2
28 #define REG_RBX 3
29 #define REG_RSP 4
30 #define REG_RBP 5
31 #define REG_RSI 6
32 #define REG_RDI 7
33 #define REG_R8 8
34 #define REG_R9 9
35 #define REG_R10 10
36 #define REG_R11 11
37 #define REG_R12 12
38 #define REG_R13 13
39 #define REG_R14 14
40 #define REG_R15 15
41
42 #define REG_XMM0 0
43 #define REG_XMM1 1
44 #define REG_XMM2 2
45 #define REG_XMM3 3
46 #define REG_XMM4 4
47 #define REG_XMM5 5
48 #define REG_XMM6 6
49 #define REG_XMM7 7
50 #define REG_XMM8 8
51 #define REG_XMM9 9
52 #define REG_XMM10 10
53 #define REG_XMM11 11
54 #define REG_XMM12 12
55 #define REG_XMM13 13
56 #define REG_XMM14 14
57 #define REG_XMM15 15
58
59
60 typedef struct _IMAGE_IMPORT_DESCRIPTOR
61 {
62 union {
63 DWORD Characteristics;
64 DWORD OriginalFirstThunk;
65 };
66 DWORD TimeDateStamp;
67 DWORD ForwarderChain;
68 DWORD Name;
69 DWORD FirstThunk;
70 } IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
71
72 typedef struct _IMAGE_THUNK_DATA64
73 {
74 union {
75 ULONGLONG ForwarderString;
76 ULONGLONG Function;
77 ULONGLONG Ordinal;
78 ULONGLONG AddressOfData;
79 } u1;
80 } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
81
82 typedef struct _RUNTIME_FUNCTION
83 {
84 ULONG FunctionStart;
85 ULONG FunctionEnd;
86 ULONG UnwindInfo;
87 } RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
88
89 typedef union _UNWIND_CODE
90 {
91 struct
92 {
93 UBYTE CodeOffset;
94 UBYTE UnwindOp:4;
95 UBYTE OpInfo:4;
96 };
97 USHORT FrameOffset;
98 } UNWIND_CODE, *PUNWIND_CODE;
99
100 typedef struct _UNWIND_INFO
101 {
102 UBYTE Version:3;
103 UBYTE Flags:5;
104 UBYTE SizeOfProlog;
105 UBYTE CountOfCodes;
106 UBYTE FrameRegister:4;
107 UBYTE FrameOffset:4;
108 UNWIND_CODE UnwindCode[1];
109 /* union {
110 OPTIONAL ULONG ExceptionHandler;
111 OPTIONAL ULONG FunctionEntry;
112 };
113 OPTIONAL ULONG ExceptionData[];
114 */
115 } UNWIND_INFO, *PUNWIND_INFO;
116
117 typedef struct _C_SCOPE_TABLE_ENTRY
118 {
119 ULONG Begin;
120 ULONG End;
121 ULONG Handler;
122 ULONG Target;
123 } C_SCOPE_TABLE_ENTRY, *PC_SCOPE_TABLE_ENTRY;
124
125 typedef struct _C_SCOPE_TABLE
126 {
127 ULONG NumEntries;
128 C_SCOPE_TABLE_ENTRY Table[1];
129 } C_SCOPE_TABLE, *PC_SCOPE_TABLE;
130
131
132 typedef struct
133 {
134 IMAGE_SECTION_HEADER *psh;
135 char *pName;
136 void *p;
137 ULONG idx;
138 } SECTION;
139
140 typedef struct
141 {
142 char* FilePtr;
143 size_t cbInFileSize;
144 size_t cbNewFileSize;
145
146 /* PE data pointers */
147 PIMAGE_DOS_HEADER DosHeader;
148 PIMAGE_FILE_HEADER FileHeader;
149 PIMAGE_OPTIONAL_HEADER64 OptionalHeader;
150 PIMAGE_SECTION_HEADER SectionHeaders;
151 PIMAGE_BASE_RELOCATION Relocations;
152 void *Symbols;
153 char *Strings;
154 ULONG64 ImageBase;
155 ULONG HeaderSize;
156
157 /* Sections */
158 ULONG AllSections;
159 ULONG UsedSections;
160
161 SECTION eh_frame;
162 SECTION pdata;
163 SECTION xdata;
164
165 char *AlignBuf;
166
167 ULONG cFuncs;
168 ULONG cUWOP;
169 ULONG cScopes;
170
171 } FILE_INFO, *PFILE_INFO;
172
173
174
175 #endif // !_RSYM64_H