30 #define __UPX_P_ELF_H 1 40 template <
class THalf,
class TWord,
class TXword,
class TAddr,
class TOff>
48 typedef THalf Section;
54 template <
class TElfITypes>
56 typedef typename TElfITypes::Half Half;
57 typedef typename TElfITypes::Word Word;
58 typedef typename TElfITypes::Addr Addr;
59 typedef typename TElfITypes::Off Off;
61 unsigned char e_ident[16];
76 # define WANT_EHDR_ENUM 1 77 # include "p_elf_enum.h" 81 template <
class TElfITypes>
83 typedef typename TElfITypes::Xword Xword;
84 typedef typename TElfITypes::Addr Addr;
89 # define WANT_DYN_ENUM 1 90 # include "p_elf_enum.h" 94 template <
class TElfITypes>
96 typedef typename TElfITypes::Xword Xword;
97 typedef typename TElfITypes::Addr Addr;
101 __packed_struct_end()
104 template <
class TElfITypes>
105 __packed_struct(Rela)
106 typedef typename TElfITypes::Xword Xword;
107 typedef typename TElfITypes::Addr Addr;
112 __packed_struct_end()
115 template <
class TElfITypes>
116 __packed_struct(External_Note)
117 typedef typename TElfITypes::Word Word;
124 __packed_struct_end()
136 template <
class TElfITypes>
137 __packed_struct(Phdr)
138 typedef typename TElfITypes::Word Word;
139 typedef typename TElfITypes::Addr Addr;
140 typedef typename TElfITypes::Off Off;
151 # define WANT_PHDR_ENUM 1 152 # include "p_elf_enum.h" 153 __packed_struct_end()
156 template <
class TElfITypes>
157 __packed_struct(Shdr)
158 typedef typename TElfITypes::Word Word;
159 typedef typename TElfITypes::Addr Addr;
160 typedef typename TElfITypes::Off Off;
173 # define WANT_SHDR_ENUM 1 174 # include "p_elf_enum.h" 175 __packed_struct_end()
178 template <
class TElfITypes>
180 typedef typename TElfITypes::Word Word;
181 typedef typename TElfITypes::Addr Addr;
182 typedef typename TElfITypes::Section Section;
187 unsigned char st_info;
188 unsigned char st_other;
191 # define WANT_SYM_ENUM 1 192 # include "p_elf_enum.h" 194 static unsigned int get_st_bind(
unsigned x) {
return 0xf & (x>>4); }
195 static unsigned int get_st_type(
unsigned x) {
return 0xf & x ; }
196 static unsigned char make_st_info(
unsigned bind,
unsigned type)
197 {
return (
unsigned char) (((bind<<4) + (0xf & type)) & 0xff); }
198 __packed_struct_end()
210 template <
class TElfITypes>
211 __packed_struct(Phdr)
212 typedef typename TElfITypes::Word Word;
213 typedef typename TElfITypes::Xword Xword;
214 typedef typename TElfITypes::Addr Addr;
215 typedef typename TElfITypes::Off Off;
226 # define WANT_PHDR_ENUM 1 227 # include "p_elf_enum.h" 228 __packed_struct_end()
231 template <
class TElfITypes>
232 __packed_struct(Shdr)
233 typedef typename TElfITypes::Word Word;
234 typedef typename TElfITypes::Xword Xword;
235 typedef typename TElfITypes::Addr Addr;
236 typedef typename TElfITypes::Off Off;
249 # define WANT_SHDR_ENUM 1 250 # include "p_elf_enum.h" 251 __packed_struct_end()
254 template <
class TElfITypes>
256 typedef typename TElfITypes::Word Word;
257 typedef typename TElfITypes::Xword Xword;
258 typedef typename TElfITypes::Addr Addr;
259 typedef typename TElfITypes::Section Section;
262 unsigned char st_info;
263 unsigned char st_other;
268 # define WANT_SYM_ENUM 1 269 # include "p_elf_enum.h" 271 static unsigned int get_st_bind(
unsigned x) {
return 0xf & (x>>4); }
272 static unsigned int get_st_type(
unsigned x) {
return 0xf & x ; }
273 static unsigned char make_st_info(
unsigned bind,
unsigned type)
274 {
return (
unsigned char) (((bind<<4) + (0xf & type)) & 0xff); }
275 __packed_struct_end()
290 typedef TP BeLePolicy;
293 typedef typename TP::U16 TE16;
294 typedef typename TP::U32 TE32;
295 typedef typename TP::U64 TE64;
299 typedef N_Elf ::Ehdr<ElfITypes> Ehdr;
300 typedef N_Elf32::Phdr<ElfITypes> Phdr;
301 typedef N_Elf32::Shdr<ElfITypes> Shdr;
302 typedef N_Elf ::Dyn <ElfITypes> Dyn;
303 typedef N_Elf ::Rel <ElfITypes> Rel;
304 typedef N_Elf ::Rela<ElfITypes> Rela;
305 typedef N_Elf32::Sym <ElfITypes> Sym;
306 typedef N_Elf ::External_Note<ElfITypes> External_Note;
308 static void compileTimeAssertions() {
309 BeLePolicy::compileTimeAssertions();
310 COMPILE_TIME_ASSERT(
sizeof(Ehdr) == 52)
311 COMPILE_TIME_ASSERT(
sizeof(Phdr) == 32)
312 COMPILE_TIME_ASSERT(
sizeof(Shdr) == 40)
313 COMPILE_TIME_ASSERT(
sizeof(Dyn) == 8)
314 COMPILE_TIME_ASSERT(
sizeof(Rel) == 8)
315 COMPILE_TIME_ASSERT(
sizeof(Rela) == 12)
316 COMPILE_TIME_ASSERT(
sizeof(Sym) == 16)
317 COMPILE_TIME_ASSERT_ALIGNED1(Ehdr)
318 COMPILE_TIME_ASSERT_ALIGNED1(Phdr)
319 COMPILE_TIME_ASSERT_ALIGNED1(Shdr)
320 COMPILE_TIME_ASSERT_ALIGNED1(Dyn)
321 COMPILE_TIME_ASSERT_ALIGNED1(Rel)
322 COMPILE_TIME_ASSERT_ALIGNED1(Rela)
323 COMPILE_TIME_ASSERT_ALIGNED1(Sym)
331 typedef TP BeLePolicy;
334 typedef typename TP::U16 TE16;
335 typedef typename TP::U32 TE32;
336 typedef typename TP::U64 TE64;
340 typedef N_Elf ::Ehdr<ElfITypes> Ehdr;
341 typedef N_Elf64::Phdr<ElfITypes> Phdr;
342 typedef N_Elf64::Shdr<ElfITypes> Shdr;
343 typedef N_Elf ::Dyn <ElfITypes> Dyn;
344 typedef N_Elf ::Rel <ElfITypes> Rel;
345 typedef N_Elf ::Rela<ElfITypes> Rela;
346 typedef N_Elf64::Sym <ElfITypes> Sym;
347 typedef N_Elf ::External_Note<ElfITypes> External_Note;
349 static void compileTimeAssertions() {
350 BeLePolicy::compileTimeAssertions();
351 COMPILE_TIME_ASSERT(
sizeof(Ehdr) == 64)
352 COMPILE_TIME_ASSERT(
sizeof(Phdr) == 56)
353 COMPILE_TIME_ASSERT(
sizeof(Shdr) == 64)
354 COMPILE_TIME_ASSERT(
sizeof(Dyn) == 16)
355 COMPILE_TIME_ASSERT(
sizeof(Rel) == 16)
356 COMPILE_TIME_ASSERT(
sizeof(Rela) == 24)
357 COMPILE_TIME_ASSERT(
sizeof(Sym) == 24)
358 COMPILE_TIME_ASSERT_ALIGNED1(Ehdr)
359 COMPILE_TIME_ASSERT_ALIGNED1(Phdr)
360 COMPILE_TIME_ASSERT_ALIGNED1(Shdr)
361 COMPILE_TIME_ASSERT_ALIGNED1(Dyn)
362 COMPILE_TIME_ASSERT_ALIGNED1(Rel)
363 COMPILE_TIME_ASSERT_ALIGNED1(Rela)
364 COMPILE_TIME_ASSERT_ALIGNED1(Sym)
384 typedef ElfClass_Host32::Ehdr Elf32_Ehdr;
385 typedef ElfClass_Host32::Phdr Elf32_Phdr;
386 typedef ElfClass_Host32::Shdr Elf32_Shdr;
387 typedef ElfClass_Host32::Dyn Elf32_Dyn;
388 typedef ElfClass_Host32::Rel Elf32_Rel;
389 typedef ElfClass_Host32::Rela Elf32_Rela;
390 typedef ElfClass_Host32::Sym Elf32_Sym;
391 typedef ElfClass_Host32::External_Note Elf32_External_Note;
393 typedef ElfClass_Host64::Ehdr Elf64_Ehdr;
394 typedef ElfClass_Host64::Phdr Elf64_Phdr;
395 typedef ElfClass_Host64::Shdr Elf64_Shdr;
396 typedef ElfClass_Host64::Dyn Elf64_Dyn;
397 typedef ElfClass_Host64::Rel Elf64_Rel;
398 typedef ElfClass_Host64::Rela Elf64_Rela;
399 typedef ElfClass_Host64::Sym Elf64_Sym;
400 typedef ElfClass_Host64::External_Note Elf64_External_Note;
402 typedef ElfClass_BE32::Ehdr Elf_BE32_Ehdr;
403 typedef ElfClass_BE32::Phdr Elf_BE32_Phdr;
404 typedef ElfClass_BE32::Shdr Elf_BE32_Shdr;
405 typedef ElfClass_BE32::Dyn Elf_BE32_Dyn;
406 typedef ElfClass_BE32::Rel Elf_BE32_Rel;
407 typedef ElfClass_BE32::Rela Elf_BE32_Rela;
408 typedef ElfClass_BE32::Sym Elf_BE32_Sym;
409 typedef ElfClass_BE32::External_Note Elf_BE32_External_Note;
411 typedef ElfClass_BE64::Ehdr Elf_BE64_Ehdr;
412 typedef ElfClass_BE64::Phdr Elf_BE64_Phdr;
413 typedef ElfClass_BE64::Shdr Elf_BE64_Shdr;
414 typedef ElfClass_BE64::Dyn Elf_BE64_Dyn;
415 typedef ElfClass_BE64::Rel Elf_BE64_Rel;
416 typedef ElfClass_BE64::Rela Elf_BE64_Rela;
417 typedef ElfClass_BE64::Sym Elf_BE64_Sym;
418 typedef ElfClass_BE64::External_Note Elf_BE64_External_Note;
420 typedef ElfClass_LE32::Ehdr Elf_LE32_Ehdr;
421 typedef ElfClass_LE32::Phdr Elf_LE32_Phdr;
422 typedef ElfClass_LE32::Shdr Elf_LE32_Shdr;
423 typedef ElfClass_LE32::Dyn Elf_LE32_Dyn;
424 typedef ElfClass_LE32::Rel Elf_LE32_Rel;
425 typedef ElfClass_LE32::Rela Elf_LE32_Rela;
426 typedef ElfClass_LE32::Sym Elf_LE32_Sym;
427 typedef ElfClass_LE32::External_Note Elf_LE32_External_Note;
429 typedef ElfClass_LE64::Ehdr Elf_LE64_Ehdr;
430 typedef ElfClass_LE64::Phdr Elf_LE64_Phdr;
431 typedef ElfClass_LE64::Shdr Elf_LE64_Shdr;
432 typedef ElfClass_LE64::Dyn Elf_LE64_Dyn;
433 typedef ElfClass_LE64::Rel Elf_LE64_Rel;
434 typedef ElfClass_LE64::Rela Elf_LE64_Rela;
435 typedef ElfClass_LE64::Sym Elf_LE64_Sym;
436 typedef ElfClass_LE64::External_Note Elf_LE64_External_Note;