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 RELACOUNT = 0x6FFFFFF9,
90 RELCOUNT = 0x6FFFFFFA,
94 VERDEFNUM = 0x6FFFFFFD,
96 VERNEEDNUM = 0x6FFFFFFF,
99 ANDROID_REL_OFFSET = 0x6000000D,
100 ANDROID_REL_SIZE = 0x6000000E,
101 ANDROID_REL = 0x6000000F,
102 ANDROID_RELSZ = 0x60000010,
103 ANDROID_RELA = 0x60000011,
104 ANDROID_RELASZ = 0x60000012,
105 ANDROID_RELR = 0x6FFFE000,
106 ANDROID_RELRSZ = 0x6FFFE001,
107 ANDROID_RELRENT = 0x6FFFE003,
108 ANDROID_RELRCOUNT = 0x6FFFE005,
147 MIPS_DYNSTR_ALIGN =
MIPS_DISC + 0x7000002B,
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
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