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 {
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
@ MIPS_LITERAL
Definition COFF/Relocation.hpp:124
@ I386_DIR16
Definition COFF/Relocation.hpp:51
@ I386_REL32
Definition COFF/Relocation.hpp:60
@ ARM_SECTION
Definition COFF/Relocation.hpp:89
@ AMD64_ADDR64
Definition COFF/Relocation.hpp:63
@ I386_SECREL
Definition COFF/Relocation.hpp:57
@ MIPS_REFHALF
Definition COFF/Relocation.hpp:118
@ ARM64_SECREL
Definition COFF/Relocation.hpp:106
@ MIPS_REFWORD
Definition COFF/Relocation.hpp:119
@ AMD64_SSPAN32
Definition COFF/Relocation.hpp:78
@ ARM64_PAGEOFFSET_12L
Definition COFF/Relocation.hpp:105
@ AMD64_REL32_1
Definition COFF/Relocation.hpp:67
@ ARM64_SECREL_HIGH12A
Definition COFF/Relocation.hpp:108
@ ARM_ADDR32
Definition COFF/Relocation.hpp:81
@ AMD64_REL32_3
Definition COFF/Relocation.hpp:69
@ MIPS_REFLO
Definition COFF/Relocation.hpp:122
@ ARM_BLX11
Definition COFF/Relocation.hpp:87
@ AMD64_SREL32
Definition COFF/Relocation.hpp:76
@ MIPS_REFWORDNB
Definition COFF/Relocation.hpp:130
@ MIPS_ABSOLUTE
Definition COFF/Relocation.hpp:117
@ MIPS_SECRELLO
Definition COFF/Relocation.hpp:127
@ ARM64_REL32
Definition COFF/Relocation.hpp:115
@ MIPS_GPREL
Definition COFF/Relocation.hpp:123
@ ARM64_TOKEN
Definition COFF/Relocation.hpp:110
@ I386_SECTION
Definition COFF/Relocation.hpp:56
@ MIPS_SECREL
Definition COFF/Relocation.hpp:126
@ ARM_BRANCH24T
Definition COFF/Relocation.hpp:94
@ AMD64_SECREL
Definition COFF/Relocation.hpp:73
@ ARM64_BRANCH19
Definition COFF/Relocation.hpp:113
@ UNKNOWN
Definition COFF/Relocation.hpp:49
@ AMD64_ADDR32
Definition COFF/Relocation.hpp:64
@ AMD64_PAIR
Definition COFF/Relocation.hpp:77
@ ARM_SECREL
Definition COFF/Relocation.hpp:90
@ ARM64_SECREL_LOW12L
Definition COFF/Relocation.hpp:109
@ ARM_BRANCH11
Definition COFF/Relocation.hpp:84
@ ARM_MOV32A
Definition COFF/Relocation.hpp:91
@ ARM64_BRANCH14
Definition COFF/Relocation.hpp:114
@ ARM_BLX24
Definition COFF/Relocation.hpp:86
@ ARM_BRANCH24
Definition COFF/Relocation.hpp:83
@ ARM64_REL21
Definition COFF/Relocation.hpp:103
@ AMD64_TOKEN
Definition COFF/Relocation.hpp:75
@ MIPS_SECTION
Definition COFF/Relocation.hpp:125
@ ARM64_ADDR32
Definition COFF/Relocation.hpp:99
@ ARM_PAIR
Definition COFF/Relocation.hpp:96
@ AMD64_SECTION
Definition COFF/Relocation.hpp:72
@ AMD64_REL32_5
Definition COFF/Relocation.hpp:71
@ ARM_REL32
Definition COFF/Relocation.hpp:88
@ AMD64_SECREL7
Definition COFF/Relocation.hpp:74
@ AMD64_ADDR32NB
Definition COFF/Relocation.hpp:65
@ MIPS_REFHI
Definition COFF/Relocation.hpp:121
@ ARM64_SECTION
Definition COFF/Relocation.hpp:111
@ I386_ABSOLUTE
Definition COFF/Relocation.hpp:50
@ AMD64_REL32_2
Definition COFF/Relocation.hpp:68
@ ARM64_SECREL_LOW12A
Definition COFF/Relocation.hpp:107
@ ARM64_PAGEOFFSET_12A
Definition COFF/Relocation.hpp:104
@ ARM64_ADDR32NB
Definition COFF/Relocation.hpp:100
@ AMD64_ABSOLUTE
Definition COFF/Relocation.hpp:62
@ ARM_BLX23T
Definition COFF/Relocation.hpp:95
@ MIPS_JMPADDR16
Definition COFF/Relocation.hpp:129
@ I386_REL16
Definition COFF/Relocation.hpp:52
@ MIPS_JMPADDR
Definition COFF/Relocation.hpp:120
@ ARM64_BRANCH26
Definition COFF/Relocation.hpp:101
@ I386_DIR32
Definition COFF/Relocation.hpp:53
@ ARM64_ADDR64
Definition COFF/Relocation.hpp:112
@ ARM_ADDR32NB
Definition COFF/Relocation.hpp:82
@ MIPS_SECRELHI
Definition COFF/Relocation.hpp:128
@ I386_DIR32NB
Definition COFF/Relocation.hpp:54
@ I386_TOKEN
Definition COFF/Relocation.hpp:58
@ AMD64_REL32_4
Definition COFF/Relocation.hpp:70
@ ARM_MOV32T
Definition COFF/Relocation.hpp:92
@ AMD64_REL32
Definition COFF/Relocation.hpp:66
@ ARM_ABSOLUTE
Definition COFF/Relocation.hpp:80
@ I386_SEG12
Definition COFF/Relocation.hpp:55
@ ARM64_PAGEBASE_REL21
Definition COFF/Relocation.hpp:102
@ MIPS_PAIR
Definition COFF/Relocation.hpp:131
@ ARM64_ABSOLUTE
Definition COFF/Relocation.hpp:98
@ I386_SECREL7
Definition COFF/Relocation.hpp:59
@ ARM_TOKEN
Definition COFF/Relocation.hpp:85
@ ARM_BRANCH20T
Definition COFF/Relocation.hpp:93
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