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 {
48 UNKNOWN = uint64_t(-1),
88 GNU_HASH = 0x6FFFFEF5,
89 TLSDESC_PLT = 0x6FFFFEF6,
90 TLSDESC_GOT = 0x6FFFFEF7,
91 RELACOUNT = 0x6FFFFFF9,
92 RELCOUNT = 0x6FFFFFFA,
96 VERDEFNUM = 0x6FFFFFFD,
98 VERNEEDNUM = 0x6FFFFFFF,
100 AUXILIARY = 0x7ffffffd,
104 ANDROID_REL_OFFSET = 0x6000000D,
105 ANDROID_REL_SIZE = 0x6000000E,
106 ANDROID_REL = 0x6000000F,
107 ANDROID_RELSZ = 0x60000010,
108 ANDROID_RELA = 0x60000011,
109 ANDROID_RELASZ = 0x60000012,
110 ANDROID_RELR = 0x6FFFE000,
111 ANDROID_RELRSZ = 0x6FFFE001,
112 ANDROID_RELRENT = 0x6FFFE003,
113 ANDROID_RELRCOUNT = 0x6FFFE005,
152 MIPS_DYNSTR_ALIGN =
MIPS_DISC + 0x7000002B,
243 virtual std::unique_ptr<DynamicEntry>
clone()
const {
244 return std::unique_ptr<DynamicEntry>(
new DynamicEntry(*
this));
271 virtual std::ostream&
print(std::ostream& os)
const;
277 return entry.
print(os);
282 static_assert(std::is_base_of<DynamicEntry, T>::value,
283 "Require DynamicEntry inheritance");
284 if (T::classof(
this)) {
285 return static_cast<const T*
>(
this);
292 return const_cast<T*
>(
static_cast<const DynamicEntry*
>(
this)->cast<T>());
296 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
const T * cast() const
Definition DynamicEntry.hpp:281
virtual std::ostream & print(std::ostream &os) const
void tag(TAG tag)
Definition DynamicEntry.hpp:261
static constexpr uint64_t HEXAGON_DISC
Definition DynamicEntry.hpp:40
virtual std::unique_ptr< DynamicEntry > clone() const
Definition DynamicEntry.hpp:243
~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:249
void value(uint64_t value)
Definition DynamicEntry.hpp:265
T * cast()
Definition DynamicEntry.hpp:291
uint64_t value() const
Return the entry's value.
Definition DynamicEntry.hpp:257
static constexpr uint64_t PPC64_DISC
Definition DynamicEntry.hpp:42
friend std::ostream & operator<<(std::ostream &os, const DynamicEntry &entry)
Definition DynamicEntry.hpp:276
static std::unique_ptr< DynamicEntry > create(TAG tag)
Definition DynamicEntry.hpp:239
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:229
Definition Visitor.hpp:212
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