16#ifndef LIEF_COFF_RELOCATION_H
17#define LIEF_COFF_RELOCATION_H
38 static constexpr uint32_t
I386 = 1 << 17;
39 static constexpr uint32_t
X64 = 1 << 18;
40 static constexpr uint32_t
ARM = 1 << 19;
41 static constexpr uint32_t
ARM64 = 1 << 20;
42 static constexpr uint32_t
MIPS = 1 << 21;
48 enum class TYPE : uint32_t {
49 UNKNOWN = uint32_t(-1),
50 I386_ABSOLUTE =
I386 + 0x0000,
51 I386_DIR16 =
I386 + 0x0001,
52 I386_REL16 =
I386 + 0x0002,
53 I386_DIR32 =
I386 + 0x0006,
54 I386_DIR32NB =
I386 + 0x0007,
55 I386_SEG12 =
I386 + 0x0009,
56 I386_SECTION =
I386 + 0x000A,
57 I386_SECREL =
I386 + 0x000B,
58 I386_TOKEN =
I386 + 0x000C,
59 I386_SECREL7 =
I386 + 0x000D,
60 I386_REL32 =
I386 + 0x0014,
62 AMD64_ABSOLUTE =
X64 + 0x0000,
63 AMD64_ADDR64 =
X64 + 0x0001,
64 AMD64_ADDR32 =
X64 + 0x0002,
65 AMD64_ADDR32NB =
X64 + 0x0003,
66 AMD64_REL32 =
X64 + 0x0004,
67 AMD64_REL32_1 =
X64 + 0x0005,
68 AMD64_REL32_2 =
X64 + 0x0006,
69 AMD64_REL32_3 =
X64 + 0x0007,
70 AMD64_REL32_4 =
X64 + 0x0008,
71 AMD64_REL32_5 =
X64 + 0x0009,
72 AMD64_SECTION =
X64 + 0x000A,
73 AMD64_SECREL =
X64 + 0x000B,
74 AMD64_SECREL7 =
X64 + 0x000C,
75 AMD64_TOKEN =
X64 + 0x000D,
76 AMD64_SREL32 =
X64 + 0x000E,
77 AMD64_PAIR =
X64 + 0x000F,
78 AMD64_SSPAN32 =
X64 + 0x0010,
80 ARM_ABSOLUTE =
ARM + 0x0000,
81 ARM_ADDR32 =
ARM + 0x0001,
82 ARM_ADDR32NB =
ARM + 0x0002,
83 ARM_BRANCH24 =
ARM + 0x0003,
84 ARM_BRANCH11 =
ARM + 0x0004,
85 ARM_TOKEN =
ARM + 0x0005,
86 ARM_BLX24 =
ARM + 0x0008,
87 ARM_BLX11 =
ARM + 0x0009,
88 ARM_REL32 =
ARM + 0x000A,
89 ARM_SECTION =
ARM + 0x000E,
90 ARM_SECREL =
ARM + 0x000F,
91 ARM_MOV32A =
ARM + 0x0010,
92 ARM_MOV32T =
ARM + 0x0011,
93 ARM_BRANCH20T =
ARM + 0x0012,
94 ARM_BRANCH24T =
ARM + 0x0014,
95 ARM_BLX23T =
ARM + 0x0015,
96 ARM_PAIR =
ARM + 0x0016,
98 ARM64_ABSOLUTE =
ARM64 + 0x0000,
102 ARM64_PAGEBASE_REL21 =
ARM64 + 0x0004,
104 ARM64_PAGEOFFSET_12A =
ARM64 + 0x0006,
105 ARM64_PAGEOFFSET_12L =
ARM64 + 0x0007,
107 ARM64_SECREL_LOW12A =
ARM64 + 0x0009,
108 ARM64_SECREL_HIGH12A =
ARM64 + 0x000A,
109 ARM64_SECREL_LOW12L =
ARM64 + 0x000B,
129 MIPS_JMPADDR16 =
MIPS + 0x0010,
130 MIPS_REFWORDNB =
MIPS + 0x0022,
136 return (uint16_t)rtype;
142 case Header::MACHINE_TYPES::ARM64:
145 case Header::MACHINE_TYPES::AMD64:
148 case Header::MACHINE_TYPES::I386:
151 case Header::MACHINE_TYPES::ARM:
152 case Header::MACHINE_TYPES::ARMNT:
153 case Header::MACHINE_TYPES::THUMB:
156 case Header::MACHINE_TYPES::R4000:
166 static std::unique_ptr<Relocation>
parse(
207 Relocation() =
default;
208 uint32_t symbol_idx_ = 0;
211 Symbol* symbol_ =
nullptr;
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:33
Definition COFF/Parser.hpp:34
static constexpr uint32_t MIPS
Definition COFF/Relocation.hpp:42
TYPE type() const
Type of the relocation.
Definition COFF/Relocation.hpp:184
Section * section()
Section in which the relocation takes place.
Definition COFF/Relocation.hpp:189
static constexpr uint32_t X64
Definition COFF/Relocation.hpp:39
~Relocation() override=default
TYPE
The different relocation types.
Definition COFF/Relocation.hpp:48
@ UNKNOWN
Definition COFF/Relocation.hpp:49
static constexpr uint32_t ARM
Definition COFF/Relocation.hpp:40
static constexpr uint32_t I386
Definition COFF/Relocation.hpp:38
static constexpr uint32_t ARM64
Definition COFF/Relocation.hpp:41
static std::unique_ptr< Relocation > parse(BinaryStream &stream, Header::MACHINE_TYPES arch)
Create a relocation from the given stream.
static TYPE from_value(uint16_t value, Header::MACHINE_TYPES arch)
Create a relocation type from its raw value and the architecture.
Definition COFF/Relocation.hpp:140
friend std::ostream & operator<<(std::ostream &os, const Relocation &R)
Definition COFF/Relocation.hpp:199
uint32_t symbol_idx() const
Symbol index associated with this relocation.
Definition COFF/Relocation.hpp:170
const Symbol * symbol() const
Definition COFF/Relocation.hpp:179
std::string to_string() const
friend class Parser
Definition COFF/Relocation.hpp:36
Symbol * symbol()
Symbol associated with the relocation (if any).
Definition COFF/Relocation.hpp:175
static uint16_t to_value(TYPE rtype)
Convert a relocation enum type into a 16-bits value.
Definition COFF/Relocation.hpp:135
const Section * section() const
Definition COFF/Relocation.hpp:193
This class represents a COFF section.
Definition COFF/Section.hpp:39
This class represents a COFF symbol.
Definition COFF/Symbol.hpp:35
Class which represents an abstracted Relocation.
Definition Abstract/Relocation.hpp:27
Definition AuxiliarySymbol.hpp:29
const char * to_string(AuxiliarySectionDefinition::COMDAT_SELECTION e)
LIEF namespace.
Definition Abstract/Binary.hpp:40
#define LIEF_API
Definition visibility.h:41