16#ifndef LIEF_ELF_DYNAMIC_ENTRY_H
17#define LIEF_ELF_DYNAMIC_ENTRY_H
41 static constexpr uint64_t
PPC_DISC = 0x400000000;
47 enum class TAG : uint64_t {
238 virtual std::unique_ptr<DynamicEntry>
clone()
const {
239 return std::unique_ptr<DynamicEntry>(
new DynamicEntry(*
this));
266 virtual std::ostream&
print(std::ostream& os)
const;
272 return entry.
print(os);
277 static_assert(std::is_base_of<DynamicEntry, T>::value,
278 "Require DynamicEntry inheritance");
279 if (T::classof(
this)) {
280 return static_cast<const T*
>(
this);
287 return const_cast<T*
>(
static_cast<const DynamicEntry*
>(
this)->cast<T>());
291 TAG tag_ = TAG::DT_NULL_;
static constexpr uint64_t IA_64_DISC
Definition DynamicEntry.hpp:45
static constexpr uint64_t MIPS_DISC
Definition DynamicEntry.hpp:38
static constexpr uint64_t PPC_DISC
Definition DynamicEntry.hpp:41
DynamicEntry(const details::Elf32_Dyn &header, ARCH arch)
DynamicEntry(const details::Elf64_Dyn &header, ARCH arch)
static constexpr uint64_t AARCH64_DISC
Definition DynamicEntry.hpp:39
TAG
Definition DynamicEntry.hpp:47
@ SYMTAB_SHNDX
Definition DynamicEntry.hpp:82
@ MIPS_IVERSION
Definition DynamicEntry.hpp:114
@ IA_64_VMS_LNKFLAGS
Definition DynamicEntry.hpp:187
@ MIPS_XHASH
Definition DynamicEntry.hpp:157
@ MIPS_ICHECKSUM
Definition DynamicEntry.hpp:113
@ MIPS_RLD_TEXT_RESOLVE_ADDR
Definition DynamicEntry.hpp:149
@ SYMTAB
Definition DynamicEntry.hpp:55
@ HEXAGON_SYMSZ
Definition DynamicEntry.hpp:168
@ FINI_ARRAYSZ
Definition DynamicEntry.hpp:77
@ RELACOUNT
Definition DynamicEntry.hpp:89
@ MIPS_LIBLIST
Definition DynamicEntry.hpp:119
@ MIPS_FLAGS
Definition DynamicEntry.hpp:115
@ ANDROID_REL_SIZE
Definition DynamicEntry.hpp:100
@ ANDROID_RELR
Definition DynamicEntry.hpp:105
@ NEEDED
Definition DynamicEntry.hpp:50
@ HEXAGON_VER
Definition DynamicEntry.hpp:169
@ BIND_NOW
Definition DynamicEntry.hpp:73
@ MIPS_PROTECTED_GOTIDX
Definition DynamicEntry.hpp:144
@ VERNEEDNUM
Definition DynamicEntry.hpp:96
@ RISCV_VARIANT_CC
Definition DynamicEntry.hpp:178
@ RELRSZ
Definition DynamicEntry.hpp:83
@ IA_64_VMS_SYMVEC_OFFSET
Definition DynamicEntry.hpp:203
@ VERDEF
Definition DynamicEntry.hpp:93
@ MIPS_HIPAGENO
Definition DynamicEntry.hpp:126
@ MIPS_TIME_STAMP
Definition DynamicEntry.hpp:112
@ MIPS_PIXIE_INIT
Definition DynamicEntry.hpp:139
@ MIPS_RLD_MAP
Definition DynamicEntry.hpp:127
@ PPC64_OPT
Definition DynamicEntry.hpp:176
@ SONAME
Definition DynamicEntry.hpp:63
@ AARCH64_MEMTAG_HEAP
Definition DynamicEntry.hpp:163
@ MIPS_CXX_FLAGS
Definition DynamicEntry.hpp:138
@ MIPS_DELTA_CLASS_NO
Definition DynamicEntry.hpp:129
@ PPC_OPT
Definition DynamicEntry.hpp:173
@ RELASZ
Definition DynamicEntry.hpp:57
@ MIPS_AUX_DYNAMIC
Definition DynamicEntry.hpp:153
@ IA_64_VMS_SYMVEC_SEG
Definition DynamicEntry.hpp:204
@ PREINIT_ARRAY
Definition DynamicEntry.hpp:80
@ IA_64_VMS_VIR_MEM_BLK_SIZ
Definition DynamicEntry.hpp:188
@ ANDROID_RELRSZ
Definition DynamicEntry.hpp:106
@ MIPS_DYNSTR_ALIGN
Definition DynamicEntry.hpp:147
@ HASH
Definition DynamicEntry.hpp:53
@ HEXAGON_PLT
Definition DynamicEntry.hpp:170
@ IA_64_VMS_UNWIND_CODSEG
Definition DynamicEntry.hpp:199
@ IA_64_VMS_FIXUP_NEEDED
Definition DynamicEntry.hpp:194
@ MIPS_DELTA_INSTANCE
Definition DynamicEntry.hpp:130
@ RELR
Definition DynamicEntry.hpp:84
@ VERNEED
Definition DynamicEntry.hpp:95
@ RELAENT
Definition DynamicEntry.hpp:58
@ MIPS_DELTA_SYM_NO
Definition DynamicEntry.hpp:135
@ MIPS_CONFLICTNO
Definition DynamicEntry.hpp:121
@ FLAGS
Definition DynamicEntry.hpp:79
@ UNKNOWN
Definition DynamicEntry.hpp:48
@ MIPS_INTERFACE_SIZE
Definition DynamicEntry.hpp:148
@ VERSYM
Definition DynamicEntry.hpp:92
@ MIPS_BASE_ADDRESS
Definition DynamicEntry.hpp:116
@ IA_64_VMS_SUBTYPE
Definition DynamicEntry.hpp:185
@ AARCH64_MEMTAG_MODE
Definition DynamicEntry.hpp:162
@ MIPS_COMPACT_SIZE
Definition DynamicEntry.hpp:151
@ STRSZ
Definition DynamicEntry.hpp:59
@ STRTAB
Definition DynamicEntry.hpp:54
@ IA_64_VMS_UNWIND_INFOSEG
Definition DynamicEntry.hpp:200
@ MIPS_SYMTABNO
Definition DynamicEntry.hpp:123
@ MIPS_DELTA_INSTANCE_NO
Definition DynamicEntry.hpp:131
@ IA_64_VMS_PLTGOT_OFFSET
Definition DynamicEntry.hpp:212
@ MIPS_OPTIONS
Definition DynamicEntry.hpp:145
@ MIPS_RLD_VERSION
Definition DynamicEntry.hpp:111
@ MIPS_DELTA_CLASS
Definition DynamicEntry.hpp:128
@ MIPS_GP_VALUE
Definition DynamicEntry.hpp:152
@ MIPS_DELTA_CLASSSYM_NO
Definition DynamicEntry.hpp:137
@ IA_64_VMS_IDENT
Definition DynamicEntry.hpp:189
@ DEBUG_TAG
Definition DynamicEntry.hpp:70
@ AARCH64_MEMTAG_GLOBALS
Definition DynamicEntry.hpp:165
@ MIPS_LOCAL_GOTNO
Definition DynamicEntry.hpp:120
@ IA_64_VMS_LINKTIME
Definition DynamicEntry.hpp:201
@ ANDROID_REL
Definition DynamicEntry.hpp:101
@ ANDROID_RELSZ
Definition DynamicEntry.hpp:102
@ INIT_ARRAY
Definition DynamicEntry.hpp:74
@ IA_64_VMS_XLATED
Definition DynamicEntry.hpp:196
@ IA_64_VMS_UNWINDSZ
Definition DynamicEntry.hpp:198
@ AARCH64_MEMTAG_STACK
Definition DynamicEntry.hpp:164
@ IA_64_VMS_STACKSIZE
Definition DynamicEntry.hpp:197
@ ANDROID_RELRCOUNT
Definition DynamicEntry.hpp:108
@ AARCH64_BTI_PLT
Definition DynamicEntry.hpp:159
@ FLAGS_1
Definition DynamicEntry.hpp:91
@ TEXTREL
Definition DynamicEntry.hpp:71
@ MIPS_LOCALPAGE_GOTIDX
Definition DynamicEntry.hpp:141
@ MIPS_RLD_MAP_REL
Definition DynamicEntry.hpp:156
@ RELENT
Definition DynamicEntry.hpp:68
@ ANDROID_RELASZ
Definition DynamicEntry.hpp:104
@ PLTGOT
Definition DynamicEntry.hpp:52
@ MIPS_DELTA_RELOC
Definition DynamicEntry.hpp:132
@ SYMBOLIC
Definition DynamicEntry.hpp:65
@ IA_64_VMS_UNWIND_SEG
Definition DynamicEntry.hpp:206
@ IA_64_VMS_IMG_RELA_CNT
Definition DynamicEntry.hpp:191
@ ANDROID_REL_OFFSET
Definition DynamicEntry.hpp:99
@ IA_64_VMS_SYMVEC_CNT
Definition DynamicEntry.hpp:195
@ IA_64_VMS_IMGIOCNT
Definition DynamicEntry.hpp:186
@ MIPS_CONFLICT
Definition DynamicEntry.hpp:118
@ RELRENT
Definition DynamicEntry.hpp:85
@ JMPREL
Definition DynamicEntry.hpp:72
@ IA_64_VMS_FIXUP_RELA_CNT
Definition DynamicEntry.hpp:193
@ IA_64_VMS_IMG_RELA_OFF
Definition DynamicEntry.hpp:209
@ AARCH64_VARIANT_PCS
Definition DynamicEntry.hpp:161
@ IA_64_VMS_NEEDED_IDENT
Definition DynamicEntry.hpp:190
@ MIPS_HIDDEN_GOTIDX
Definition DynamicEntry.hpp:143
@ MIPS_PERF_SUFFIX
Definition DynamicEntry.hpp:150
@ RELCOUNT
Definition DynamicEntry.hpp:90
@ PLTRELSZ
Definition DynamicEntry.hpp:51
@ MIPS_DELTA_SYM
Definition DynamicEntry.hpp:134
@ MIPS_GOTSYM
Definition DynamicEntry.hpp:125
@ VERDEFNUM
Definition DynamicEntry.hpp:94
@ AARCH64_PAC_PLT
Definition DynamicEntry.hpp:160
@ MIPS_RWPLT
Definition DynamicEntry.hpp:155
@ IA_64_VMS_SEG_NO
Definition DynamicEntry.hpp:202
@ RELSZ
Definition DynamicEntry.hpp:67
@ ANDROID_RELA
Definition DynamicEntry.hpp:103
@ PPC64_GLINK
Definition DynamicEntry.hpp:175
@ MIPS_MSYM
Definition DynamicEntry.hpp:117
@ RELA
Definition DynamicEntry.hpp:56
@ FINI_ARRAY
Definition DynamicEntry.hpp:75
@ IA_64_VMS_SYSVER_OFFSET
Definition DynamicEntry.hpp:208
@ SYMENT
Definition DynamicEntry.hpp:60
@ MIPS_DELTA_RELOC_NO
Definition DynamicEntry.hpp:133
@ MIPS_INTERFACE
Definition DynamicEntry.hpp:146
@ RUNPATH
Definition DynamicEntry.hpp:78
@ IA_64_VMS_SEG_RELA_OFF
Definition DynamicEntry.hpp:210
@ IA_64_VMS_SEG_RELA_CNT
Definition DynamicEntry.hpp:192
@ IA_64_VMS_FIXUP_RELA_OFF
Definition DynamicEntry.hpp:211
@ IA_64_PLT_RESERVE
Definition DynamicEntry.hpp:184
@ ANDROID_RELRENT
Definition DynamicEntry.hpp:107
@ PLTREL
Definition DynamicEntry.hpp:69
@ X86_64_PLT
Definition DynamicEntry.hpp:180
@ DT_NULL_
Definition DynamicEntry.hpp:49
@ RPATH
Definition DynamicEntry.hpp:64
@ IA_64_VMS_FPMODE
Definition DynamicEntry.hpp:214
@ MIPS_LOCAL_GOTIDX
Definition DynamicEntry.hpp:142
@ REL
Definition DynamicEntry.hpp:66
@ X86_64_PLTSZ
Definition DynamicEntry.hpp:181
@ MIPS_UNREFEXTNO
Definition DynamicEntry.hpp:124
@ IA_64_VMS_UNWIND_OFFSET
Definition DynamicEntry.hpp:205
@ INIT_ARRAYSZ
Definition DynamicEntry.hpp:76
@ PREINIT_ARRAYSZ
Definition DynamicEntry.hpp:81
@ IA_64_VMS_PLTGOT_SEG
Definition DynamicEntry.hpp:213
@ MIPS_DELTA_CLASSSYM
Definition DynamicEntry.hpp:136
@ PPC_GOT
Definition DynamicEntry.hpp:172
@ MIPS_LIBLISTNO
Definition DynamicEntry.hpp:122
@ GNU_HASH
Definition DynamicEntry.hpp:88
@ IA_64_VMS_STRTAB_OFFSET
Definition DynamicEntry.hpp:207
@ INIT
Definition DynamicEntry.hpp:61
@ X86_64_PLTENT
Definition DynamicEntry.hpp:182
@ AARCH64_MEMTAG_GLOBALSSZ
Definition DynamicEntry.hpp:166
@ FINI
Definition DynamicEntry.hpp:62
@ MIPS_SYMBOL_LIB
Definition DynamicEntry.hpp:140
@ MIPS_PLTGOT
Definition DynamicEntry.hpp:154
const T * cast() const
Definition DynamicEntry.hpp:276
virtual std::ostream & print(std::ostream &os) const
void tag(TAG tag)
Definition DynamicEntry.hpp:256
static constexpr uint64_t HEXAGON_DISC
Definition DynamicEntry.hpp:40
virtual std::unique_ptr< DynamicEntry > clone() const
Definition DynamicEntry.hpp:238
~DynamicEntry() override=default
DynamicEntry & operator=(const DynamicEntry &)=default
void accept(Visitor &visitor) const override
static std::unique_ptr< DynamicEntry > create(TAG tag, uint64_t value)
static uint64_t to_value(TAG tag)
static constexpr uint64_t RISCV_DISC
Definition DynamicEntry.hpp:43
std::string to_string() const
TAG tag() const
Tag of the current entry. The most common tags are: DT_NEEDED, DT_INIT, ...
Definition DynamicEntry.hpp:244
void value(uint64_t value)
Definition DynamicEntry.hpp:260
T * cast()
Definition DynamicEntry.hpp:286
uint64_t value() const
Return the entry's value.
Definition DynamicEntry.hpp:252
static constexpr uint64_t PPC64_DISC
Definition DynamicEntry.hpp:42
friend std::ostream & operator<<(std::ostream &os, const DynamicEntry &entry)
Definition DynamicEntry.hpp:271
static std::unique_ptr< DynamicEntry > create(TAG tag)
Definition DynamicEntry.hpp:234
static TAG from_value(uint64_t value, ARCH arch)
DynamicEntry(const DynamicEntry &)=default
static constexpr uint64_t X86_64_DISC
Definition DynamicEntry.hpp:44
DynamicEntry(TAG tag, uint64_t value)
Definition DynamicEntry.hpp:224
Definition Visitor.hpp:210
Definition DynamicEntry.hpp:29
Namespace related to the LIEF's ELF module.
Definition Abstract/Header.hpp:28
const char * to_string(DynamicEntry::TAG e)
ARCH
Definition ELF/enums.hpp:30
LIEF namespace.
Definition Abstract/Binary.hpp:40
#define LIEF_API
Definition visibility.h:41