16#ifndef LIEF_MACHO_FUNCTION_VARIANT_FIXUPS_COMMAND_H
17#define LIEF_MACHO_FUNCTION_VARIANT_FIXUPS_COMMAND_H
36struct linkedit_data_command;
106 return variant_index_;
127 return pac_diversity_;
148 variant_index_ = value;
156 pac_address_ = value;
164 pac_diversity_ = value;
174 const Fixup& fixup) {
180 uint32_t seg_offset_ = 0;
181 uint32_t seg_index_ = 0;
182 uint32_t variant_index_ = 0;
183 bool pac_auth_ =
false;
184 bool pac_address_ =
false;
185 uint8_t pac_key_ = 0;
186 uint16_t pac_diversity_ = 0;
209 return std::unique_ptr<FunctionVariantFixups>(
225 data_offset_ = offset;
253 fixups_.push_back(fixup);
259 std::ostream&
print(std::ostream& os)
const override;
268 uint32_t data_offset_ = 0;
269 uint32_t data_size_ = 0;
271 std::vector<Fixup> fixups_;
Class used to parse a single binary (i.e. non-FAT).
Definition BinaryParser.hpp:79
A single relocation associated with a function-variant. It mirrors the FunctionVariantFixups::Interna...
Definition FunctionVariantFixups.hpp:69
uint32_t variant_index() const
Index of the FunctionVariants runtime table used to resolve the slot.
Definition FunctionVariantFixups.hpp:105
uint8_t pac_key() const
Pointer-authentication key used to sign the slot.
Definition FunctionVariantFixups.hpp:121
void segment(SegmentCommand &seg)
Definition FunctionVariantFixups.hpp:167
Fixup(const Fixup &)=default
std::string to_string() const
Fixup(const details::function_variant_fixup_t &raw)
uint32_t seg_offset() const
Offset of the slot to fix up, relative to the segment designated by seg_index().
Definition FunctionVariantFixups.hpp:95
void pac_key(uint8_t value)
Definition FunctionVariantFixups.hpp:159
void seg_index(uint32_t value)
Definition FunctionVariantFixups.hpp:143
void pac_address(bool value)
Definition FunctionVariantFixups.hpp:155
SegmentCommand * segment()
SegmentCommand referenced by seg_index() if it could be resolved.
Definition FunctionVariantFixups.hpp:131
void pac_auth(bool value)
Definition FunctionVariantFixups.hpp:151
Fixup & operator=(const Fixup &)=default
Fixup(Fixup &&) noexcept=default
uint32_t seg_index() const
Index of the segment that owns the slot to fix up.
Definition FunctionVariantFixups.hpp:100
uint16_t pac_diversity() const
Pointer-authentication diversity (discriminator) of the slot.
Definition FunctionVariantFixups.hpp:126
friend std::ostream & operator<<(std::ostream &os, const Fixup &fixup)
Definition FunctionVariantFixups.hpp:173
void variant_index(uint32_t value)
Definition FunctionVariantFixups.hpp:147
Fixup(uint32_t seg_offset, uint32_t seg_index, uint32_t variant_index, bool pac_auth, bool pac_address, uint8_t pac_key, uint16_t pac_diversity)
Definition FunctionVariantFixups.hpp:72
bool pac_auth() const
Whether the slot is signed with pointer authentication (arm64e).
Definition FunctionVariantFixups.hpp:110
void pac_diversity(uint16_t value)
Definition FunctionVariantFixups.hpp:163
const SegmentCommand * segment() const
Definition FunctionVariantFixups.hpp:135
bool pac_address() const
Whether the pointer-authentication signature mixes the storage address (address diversity).
Definition FunctionVariantFixups.hpp:116
void seg_offset(uint32_t value)
Definition FunctionVariantFixups.hpp:139
static bool classof(const LoadCommand *cmd)
Definition FunctionVariantFixups.hpp:261
void data_offset(uint32_t offset)
Definition FunctionVariantFixups.hpp:224
FunctionVariantFixups & add(Fixup fixup)
Append a new Fixup.
Definition FunctionVariantFixups.hpp:252
friend class BinaryParser
Definition FunctionVariantFixups.hpp:61
uint32_t data_size() const
Size of the payload.
Definition FunctionVariantFixups.hpp:220
it_fixups fixups()
Iterator over the different Fixup entries.
Definition FunctionVariantFixups.hpp:243
void data_size(uint32_t size)
Definition FunctionVariantFixups.hpp:228
FunctionVariantFixups()=default
static std::vector< Fixup > parse_payload(SpanStream &stream)
FunctionVariantFixups(FunctionVariantFixups &&) noexcept=default
ref_iterator< fixups_t & > it_fixups
Iterator that outputs Fixup&.
Definition FunctionVariantFixups.hpp:193
uint32_t data_offset() const
Offset in the __LINKEDIT SegmentCommand where the payload starts.
Definition FunctionVariantFixups.hpp:215
std::ostream & print(std::ostream &os) const override
friend class LinkEdit
Definition FunctionVariantFixups.hpp:62
~FunctionVariantFixups() override=default
span< uint8_t > content()
Definition FunctionVariantFixups.hpp:238
span< const uint8_t > content() const
Return the data slice in the __LINKEDIT segment referenced by data_offset and data_size.
Definition FunctionVariantFixups.hpp:234
std::unique_ptr< LoadCommand > clone() const override
Definition FunctionVariantFixups.hpp:208
it_const_fixups fixups() const
Definition FunctionVariantFixups.hpp:247
std::vector< Fixup > fixups_t
Definition FunctionVariantFixups.hpp:190
const_ref_iterator< const fixups_t & > it_const_fixups
Iterator that outputs const Fixup&.
Definition FunctionVariantFixups.hpp:196
Definition LinkEdit.hpp:47
uint32_t size() const
Size of the command (should be greater than sizeof(load_command)).
Definition LoadCommand.hpp:135
LoadCommand::TYPE command() const
Command type.
Definition LoadCommand.hpp:130
@ FUNCTION_VARIANT_FIXUPS
Definition LoadCommand.hpp:104
Class which represents a LoadCommand::TYPE::SEGMENT / LoadCommand::TYPE::SEGMENT_64 command.
Definition SegmentCommand.hpp:52
Definition SpanStream.hpp:32
Iterator which returns reference on container's values.
Definition iterators.hpp:47
#define LIEF_LIFETIMEBOUND
Definition compiler_attributes.hpp:72
Definition endianness_support.hpp:60
Namespace related to the LIEF's Mach-O module.
Definition Abstract/Header.hpp:36
LIEF namespace.
Definition Abstract/Binary.hpp:41
tcb::span< ElementType, Extent > span
Definition span.hpp:22
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which returns a const ref on container's values.
Definition iterators.hpp:320
Definition FunctionVariantFixups.hpp:42
uint32_t pac_auth
Definition FunctionVariantFixups.hpp:46
uint32_t pac_diversity
Definition FunctionVariantFixups.hpp:49
uint32_t variant_index
Definition FunctionVariantFixups.hpp:45
uint32_t seg_index
Definition FunctionVariantFixups.hpp:44
uint32_t pac_address
Definition FunctionVariantFixups.hpp:47
uint32_t pac_key
Definition FunctionVariantFixups.hpp:48
uint32_t seg_offset
Definition FunctionVariantFixups.hpp:43
#define LIEF_API
Definition visibility.h:45
#define LIEF_LOCAL
Definition visibility.h:46