16#ifndef LIEF_MACHO_DYLD_CHAINED_FIXUPS_H
17#define LIEF_MACHO_DYLD_CHAINED_FIXUPS_H
33class ChainedBindingInfoList;
39struct linkedit_data_command;
40struct dyld_chained_fixups_header;
41struct dyld_chained_starts_in_segment;
63 struct chained_starts_in_segment {
91 operator<<(std::ostream& os,
const chained_starts_in_segment& info);
93 static chained_starts_in_segment
95 return chained_starts_in_segment(0,
segment);
105 const details::dyld_chained_starts_in_segment& info,
133 std::unique_ptr<LoadCommand>
clone()
const override {
151 data_offset_ = offset;
164 return all_bindings_;
169 return all_bindings_;
174 return chained_starts_in_segment_;
178 return chained_starts_in_segment_;
184 return fixups_version_;
192 return starts_offset_;
195 starts_offset_ = offset;
200 return imports_offset_;
203 imports_offset_ = offset;
208 return symbols_offset_;
211 symbols_offset_ = offset;
216 return imports_count_;
219 imports_count_ = cnt;
228 return symbols_format_;
231 symbols_format_ = fmt;
236 return imports_format_;
239 imports_format_ = fmt;
243 chained_starts_in_segment_.push_back(std::move(start_info));
244 return chained_starts_in_segment_.back();
249 std::ostream&
print(std::ostream& os)
const override;
256 LIEF_LOCAL void update_with(
const details::dyld_chained_fixups_header& header);
260 uint32_t data_offset_ = 0;
261 uint32_t data_size_ = 0;
267 uint32_t fixups_version_ = 0;
268 uint32_t starts_offset_ = 0;
269 uint32_t imports_offset_ = 0;
270 uint32_t symbols_offset_ = 0;
271 uint32_t imports_count_ = 0;
272 uint32_t symbols_format_ = 0;
275 chained_starts_in_segments_t chained_starts_in_segment_;
277 std::vector<std::unique_ptr<ChainedBindingInfoList>> internal_bindings_;
278 binding_info_t all_bindings_;
Class used to parse a single binary (i.e. non-FAT).
Definition BinaryParser.hpp:78
Class which represents a MachO binary.
Definition MachO/Binary.hpp:88
Definition BindingInfoIterator.hpp:32
Class used to rebuild a Mach-O file.
Definition MachO/Builder.hpp:63
This class represents a symbol binding operation associated with the LC_DYLD_CHAINED_FIXUPS command.
Definition ChainedBindingInfo.hpp:48
Definition DyldChainedFixupsCreator.hpp:41
Class that represents the LC_DYLD_CHAINED_FIXUPS command.
Definition DyldChainedFixups.hpp:49
uint32_t data_offset() const
Offset of the LC_DYLD_CHAINED_FIXUPS chained payload. This offset should point in the __LINKEDIT segm...
Definition DyldChainedFixups.hpp:141
it_const_binding_info bindings() const
Iterator over the bindings (ChainedBindingInfo) associated with this command.
Definition DyldChainedFixups.hpp:168
friend class BindingInfoIterator
Definition DyldChainedFixups.hpp:53
void imports_count(uint32_t cnt)
Definition DyldChainedFixups.hpp:218
void starts_offset(uint32_t offset)
Definition DyldChainedFixups.hpp:194
it_binding_info bindings()
Iterator over the bindings (ChainedBindingInfo) associated with this command.
Definition DyldChainedFixups.hpp:163
it_chained_starts_in_segments_t chained_starts_in_segments()
Iterator over the chained fixup metadata.
Definition DyldChainedFixups.hpp:173
it_const_chained_starts_in_segments_t chained_starts_in_segments() const
Definition DyldChainedFixups.hpp:177
friend class BinaryParser
Definition DyldChainedFixups.hpp:50
void data_size(uint32_t size)
Definition DyldChainedFixups.hpp:153
const_ref_iterator< const chained_starts_in_segments_t & > it_const_chained_starts_in_segments_t
Iterator that outputs const chained_starts_in_segment&.
Definition DyldChainedFixups.hpp:117
uint32_t data_size() const
Size of the LC_DYLD_CHAINED_FIXUPS payload.
Definition DyldChainedFixups.hpp:146
uint32_t symbols_offset() const
Offset of symbol strings in chain data.
Definition DyldChainedFixups.hpp:207
chained_starts_in_segment & add(chained_starts_in_segment start_info)
Definition DyldChainedFixups.hpp:242
void data_offset(uint32_t offset)
Definition DyldChainedFixups.hpp:150
uint32_t symbols_format() const
The compression algorithm (if any) used to store the symbols 0 means uncompressed while 1 means zlib ...
Definition DyldChainedFixups.hpp:227
friend class DyldChainedFixupsCreator
Definition DyldChainedFixups.hpp:55
ref_iterator< binding_info_t &, ChainedBindingInfo * > it_binding_info
Iterator which outputs DyldBindingInfo&.
Definition DyldChainedFixups.hpp:124
std::vector< chained_starts_in_segment > chained_starts_in_segments_t
Internal container for storing chained_starts_in_segment.
Definition DyldChainedFixups.hpp:110
span< const uint8_t > payload() const
Return the raw content of the command.
Definition DyldChainedFixups.hpp:158
friend class Builder
Definition DyldChainedFixups.hpp:51
uint32_t fixups_version() const
Chained fixups version. The loader (dyld v852.2) checks that this value is set to 0.
Definition DyldChainedFixups.hpp:183
const_ref_iterator< const binding_info_t &, ChainedBindingInfo * > it_const_binding_info
Iterator which outputs const DyldBindingInfo&.
Definition DyldChainedFixups.hpp:127
uint32_t imports_offset() const
Offset of imports table in chain data.
Definition DyldChainedFixups.hpp:199
uint32_t imports_count() const
Number of imported symbol names.
Definition DyldChainedFixups.hpp:215
friend class Binary
Definition DyldChainedFixups.hpp:54
friend class LinkEdit
Definition DyldChainedFixups.hpp:52
DYLD_CHAINED_FORMAT imports_format() const
The format of the imports (ChainedBindingInfo).
Definition DyldChainedFixups.hpp:235
void symbols_format(uint32_t fmt)
Definition DyldChainedFixups.hpp:230
void imports_format(DYLD_CHAINED_FORMAT fmt)
Definition DyldChainedFixups.hpp:238
~DyldChainedFixups() override
void accept(Visitor &visitor) const override
ref_iterator< chained_starts_in_segments_t & > it_chained_starts_in_segments_t
Iterator that outputs chained_starts_in_segment&.
Definition DyldChainedFixups.hpp:113
std::unique_ptr< LoadCommand > clone() const override
Definition DyldChainedFixups.hpp:133
void imports_offset(uint32_t offset)
Definition DyldChainedFixups.hpp:202
std::ostream & print(std::ostream &os) const override
void fixups_version(uint32_t version)
Definition DyldChainedFixups.hpp:186
void symbols_offset(uint32_t offset)
Definition DyldChainedFixups.hpp:210
std::vector< std::unique_ptr< ChainedBindingInfo > > binding_info_t
Internal container for storing DyldBindingInfo.
Definition DyldChainedFixups.hpp:121
static bool classof(const LoadCommand *cmd)
Definition DyldChainedFixups.hpp:251
uint32_t starts_offset() const
offset of dyld_chained_starts_in_image in chain_data
Definition DyldChainedFixups.hpp:191
DyldChainedFixups(const details::linkedit_data_command &cmd)
Definition LinkEdit.hpp:45
uint32_t size() const
Size of the command (should be greather than sizeof(load_command)).
Definition LoadCommand.hpp:133
LoadCommand::TYPE command() const
Command type.
Definition LoadCommand.hpp:128
@ DYLD_CHAINED_FIXUPS
Definition LoadCommand.hpp:99
Class which represents a LoadCommand::TYPE::SEGMENT / LoadCommand::TYPE::SEGMENT_64 command.
Definition SegmentCommand.hpp:51
Definition Visitor.hpp:212
Iterator which returns reference on container's values.
Definition iterators.hpp:45
Definition endianness_support.hpp:60
Namespace related to the LIEF's Mach-O module.
Definition Abstract/Header.hpp:36
DYLD_CHAINED_FORMAT
Definition DyldChainedFormat.hpp:22
@ IMPORT
Definition DyldChainedFormat.hpp:23
DYLD_CHAINED_PTR_FORMAT
Definition DyldChainedFormat.hpp:29
@ NONE
Definition DyldChainedFormat.hpp:30
LIEF namespace.
Definition Abstract/Binary.hpp:40
tcb::span< ElementType, Extent > span
Definition span.hpp:22
lief_version_t version()
Return the current version.
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which return const ref on container's values.
Definition iterators.hpp:286
Structure that mirrors the raw dyld_chained_starts_in_segment which aims at providing information abo...
Definition DyldChainedFixups.hpp:63
std::vector< uint16_t > chain_starts
Currently not supported.
Definition DyldChainedFixups.hpp:85
uint16_t page_size
Likely 0x1000 for x86/x86_64 architectures and 0x4000 for ARM64 architecture.
Definition DyldChainedFixups.hpp:68
uint64_t segment_offset
Offset of the segment's data from the beginning of the file (it should match SegmentCommand::file_off...
Definition DyldChainedFixups.hpp:70
friend class BinaryParser
Definition DyldChainedFixups.hpp:99
DYLD_CHAINED_PTR_FORMAT pointer_format
How pointers are encoded.
Definition DyldChainedFixups.hpp:75
friend std::ostream & operator<<(std::ostream &os, const chained_starts_in_segment &info)
friend class DyldChainedFixupsCreator
Definition DyldChainedFixups.hpp:100
uint32_t max_valid_pointer
for 32-bit OS, any value beyond this is not a pointer
Definition DyldChainedFixups.hpp:73
SegmentCommand & segment
Segment in which the rebase/bind fixups take place.
Definition DyldChainedFixups.hpp:88
std::vector< uint16_t > page_start
Offset in the SegmentCommand of the first element of the chain.
Definition DyldChainedFixups.hpp:83
static chained_starts_in_segment create_empty_chained(SegmentCommand &segment)
Definition DyldChainedFixups.hpp:94
uint32_t offset
Original offset of the structure, relative to DyldChainedFixups::starts_offset.
Definition DyldChainedFixups.hpp:64
size_t page_count() const
How many pages are in the page_start array.
Definition DyldChainedFixups.hpp:79
uint32_t size
sizeof(size) + sizeof(page_size) + ... + sizeof(pointer_format)
Definition DyldChainedFixups.hpp:66
#define LIEF_API
Definition visibility.h:43
#define LIEF_LOCAL
Definition visibility.h:44