Iros
 
Loading...
Searching...
No Matches
program_header.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/exec/elf/types.h"
5
6namespace di::exec {
8 Null = 0,
9 Load = 1,
12 Note = 4,
13 Shlib = 5,
15 Tls = 7,
16 GnuEhFrame = 0x6474e550,
17 GnuStack = 0x6474e551,
18 GnuRelRo = 0x6474e552,
19 GnuProperty = 0x6474e552,
20};
21
27
29
30template<ElfFormat format = ElfFormat::Native>
32
33template<ElfFormat format>
34requires(!elf_format_64bit(format))
36private:
37 constexpr static auto endian = elf_format_endian(format);
38
39 using Types = ElfTypes<format>;
40 using Byte = Types::Byte;
41 using Half = Types::Half;
42 using Word = Types::Word;
43 using Addr = Types::Addr;
44 using Off = Types::Off;
45
46public:
48 Off offset;
54 Word align;
55};
56
57template<ElfFormat format>
58requires(elf_format_64bit(format))
60private:
61 constexpr static auto endian = elf_format_endian(format);
62
63 using Types = ElfTypes<format>;
64 using Byte = Types::Byte;
65 using Half = Types::Half;
66 using Word = Types::Word;
67 using Addr = Types::Addr;
68 using Off = Types::Off;
69 using Xword = Types::Xword;
70
71public:
74 Off offset;
75 Addr virtual_addr;
76 Addr physical_addr;
77 Xword file_size;
79 Xword align;
80};
81}
#define DI_DEFINE_ENUM_BITWISE_OPERATIONS(Type)
Definition bitwise_enum.h:5
Definition program_header.h:31
Addr virtual_addr
Definition program_header.h:49
StaticEndian< ElfProgramHeaderFlags, endian > flags
Definition program_header.h:53
Off offset
Definition program_header.h:48
Word align
Definition program_header.h:54
Word memory_size
Definition program_header.h:52
Addr physical_addr
Definition program_header.h:50
Word file_size
Definition program_header.h:51
StaticEndian< ElfProgramHeaderType, endian > type
Definition program_header.h:47
meta::Conditional< endian==Endian::Little, LittleEndian< T >, BigEndian< T > > StaticEndian
Definition static_endian.h:9
Definition format.h:5
ElfProgramHeaderType
Definition program_header.h:7
@ GnuProperty
Definition program_header.h:19
@ Note
Definition program_header.h:12
@ GnuEhFrame
Definition program_header.h:16
@ Shlib
Definition program_header.h:13
@ GnuRelRo
Definition program_header.h:18
@ Dynamic
Definition program_header.h:10
@ GnuStack
Definition program_header.h:17
@ Null
Definition program_header.h:8
@ Interpreter
Definition program_header.h:11
@ Tls
Definition program_header.h:15
@ ProgramHeader
Definition program_header.h:14
@ Load
Definition program_header.h:9
ElfProgramHeaderFlags
Definition program_header.h:22
@ Executable
Definition program_header.h:23
@ Readable
Definition program_header.h:25
@ Writable
Definition program_header.h:24
Definition bounded_format_context.h:7
std::byte Byte
Definition byte.h:63
__INT32_TYPE__ i32
Definition integers.h:16
Definition types.h:8
di::Byte Byte
Definition types.h:19
StaticEndian< u32, endian > Word
Definition types.h:15
StaticEndian< meta::Conditional< is_64bit, u64, u32 >, endian > Addr
Definition types.h:12
StaticEndian< u16, endian > Half
Definition types.h:14
StaticEndian< u64, endian > Xword
Definition types.h:17
StaticEndian< meta::Conditional< is_64bit, i64, i32 >, endian > Off
Definition types.h:13