1 // copyright (c) 2017-2021 hors<horsicq@gmail.com>
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 
10 // The above copyright notice and this permission notice shall be included in all
11 // copies or substantial portions of the Software.
12 
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 // SOFTWARE.
20 //
21 #ifndef ELF_DEFS_H
22 #define ELF_DEFS_H
23 
24 #include "../formatwidget.h"
25 #include "xelf.h"
26 
27 namespace SELF
28 {
29 enum TYPE
30 {
31     TYPE_HEX=0,
32     TYPE_DISASM,
33     TYPE_HASH,
34     TYPE_STRINGS,
35     TYPE_SIGNATURES,
36     TYPE_MEMORYMAP,
37     TYPE_ENTROPY,
38     TYPE_HEURISTICSCAN,
39     TYPE_Elf_Ehdr,
40     TYPE_Elf_Shdr,
41     TYPE_Elf_Phdr,
42     TYPE_Elf_DynamicArrayTags,
43     TYPE_LIBRARIES,
44     TYPE_INTERPRETER,
45     TYPE_NOTES,
46     TYPE_RUNPATH,
47     TYPE_STRINGTABLE,
48     TYPE_SYMBOLTABLE,
49     TYPE_Elf_Rela,
50     TYPE_Elf_Rel,
51     __TYPE_size
52 };
53 }
54 
55 namespace N_Elf_Ehdr
56 {
57 enum DATA
58 {
59     ei_mag=0,
60     ei_class,
61     ei_data,
62     ei_version,
63     ei_osabi,
64     ei_abiversion,
65     ei_pad_0,
66     ei_pad_1,
67     ei_pad_2,
68     ei_pad_3,
69     ei_pad_4,
70     ei_pad_5,
71     ei_pad_6,
72     e_type,
73     e_machine,
74     e_version,
75     e_entry,
76     e_phoff,
77     e_shoff,
78     e_flags,
79     e_ehsize,
80     e_phentsize,
81     e_phnum,
82     e_shentsize,
83     e_shnum,
84     e_shstrndx,
85     __data_size
86 };
87 
88 extern const FW_DEF::HEADER_RECORD records32[__data_size];
89 extern const FW_DEF::HEADER_RECORD records64[__data_size];
90 }
91 
92 namespace N_Elf_Shdr
93 {
94 enum DATA
95 {
96     sh_name=0,
97     sh_type,
98     sh_flags,
99     sh_addr,
100     sh_offset,
101     sh_size,
102     sh_link,
103     sh_info,
104     sh_addralign,
105     sh_entsize,
106     __data_size
107 };
108 
109 extern const FW_DEF::HEADER_RECORD records32[__data_size];
110 extern const FW_DEF::HEADER_RECORD records64[__data_size];
111 
112 enum CB
113 {
114     CB_TYPE=0,
115     CB_FLAGS,
116     __CB_size
117 };
118 
119 enum INV
120 {
121     INV_VirtualAddress,
122     INV_PointerToRawData,
123     __INV_size
124 };
125 }
126 
127 namespace N_Elf_Phdr32
128 {
129 enum DATA
130 {
131     p_type=0,
132     p_offset,
133     p_vaddr,
134     p_paddr,
135     p_filesz,
136     p_memsz,
137     p_flags,
138     p_align,
139     __data_size
140 };
141 
142 extern const FW_DEF::HEADER_RECORD records[__data_size];
143 
144 enum CB
145 {
146     CB_TYPE=0,
147     CB_FLAGS,
148     __CB_size
149 };
150 
151 enum INV
152 {
153     INV_VirtualAddress,
154     INV_PointerToRawData,
155     __INV_size
156 };
157 }
158 
159 namespace N_Elf_Phdr64
160 {
161 enum DATA
162 {
163     p_type=0,
164     p_flags,
165     p_offset,
166     p_vaddr,
167     p_paddr,
168     p_filesz,
169     p_memsz,
170     p_align,
171     __data_size
172 };
173 
174 extern const FW_DEF::HEADER_RECORD records[__data_size];
175 }
176 
177 namespace N_Elf_DynamicArrayTags
178 {
179 enum DATA
180 {
181     d_tag=0,
182     d_value,
183     __data_size
184 };
185 
186 extern const FW_DEF::HEADER_RECORD records32[__data_size];
187 extern const FW_DEF::HEADER_RECORD records64[__data_size];
188 
189 enum CB
190 {
191     CB_TAG=0,
192     __CB_size
193 };
194 
195 enum INV
196 {
197     INV_VirtualAddress,
198     INV_PointerToRawData,
199     __INV_size
200 };
201 }
202 
203 namespace N_ELF_LIBRARIES
204 {
205 enum DATA
206 {
207     library_name=0,
208     __data_size
209 };
210 
211 extern const FW_DEF::HEADER_RECORD records[__data_size];
212 }
213 
214 namespace N_ELF_INTERPRETER
215 {
216 enum DATA
217 {
218     interpreter=0,
219     __data_size
220 };
221 
222 extern const FW_DEF::HEADER_RECORD records[__data_size];
223 }
224 
225 namespace N_ELF_NOTES
226 {
227 enum DATA
228 {
229     type=0,
230     name,
231     __data_size
232 };
233 
234 extern const FW_DEF::HEADER_RECORD records[__data_size];
235 }
236 
237 namespace N_ELF_RUNPATH
238 {
239 enum DATA
240 {
241     runpath=0,
242     __data_size
243 };
244 
245 extern const FW_DEF::HEADER_RECORD records[__data_size];
246 }
247 
248 namespace N_Elf32_Sym
249 {
250 enum DATA
251 {
252     st_name=0,
253     st_value,
254     st_size,
255     st_info,
256     st_other,
257     st_shndx,
258     __data_size
259 };
260 
261 extern const FW_DEF::HEADER_RECORD records[__data_size];
262 
263 enum CB
264 {
265     __CB_size
266 };
267 
268 enum INV
269 {
270     __INV_size
271 };
272 }
273 
274 namespace N_Elf64_Sym
275 {
276 enum DATA
277 {
278     st_name,
279     st_info,
280     st_other,
281     st_shndx,
282     st_value,
283     st_size,
284     __data_size
285 };
286 
287 extern const FW_DEF::HEADER_RECORD records[__data_size];
288 }
289 
290 namespace N_Elf_Rela
291 {
292 enum DATA
293 {
294     r_offset,
295     r_info,
296     r_addend,
297     __data_size
298 };
299 
300 extern const FW_DEF::HEADER_RECORD records32[__data_size];
301 extern const FW_DEF::HEADER_RECORD records64[__data_size];
302 
303 enum CB
304 {
305     __CB_size
306 };
307 
308 enum INV
309 {
310     __INV_size
311 };
312 }
313 
314 namespace N_Elf_Rel
315 {
316 enum DATA
317 {
318     r_offset,
319     r_info,
320     __data_size
321 };
322 
323 extern const FW_DEF::HEADER_RECORD records32[__data_size];
324 extern const FW_DEF::HEADER_RECORD records64[__data_size];
325 
326 enum CB
327 {
328     __CB_size
329 };
330 
331 enum INV
332 {
333     __INV_size
334 };
335 }
336 
337 #endif // ELF_DEFS_H
338