16#ifndef LIEF_MACHO_SECTION_H
17#define LIEF_MACHO_SECTION_H
64 static constexpr auto FLAGS_MASK = uint32_t(0xffffff00u);
67 enum class TYPE: uint64_t {
109 Section(
const details::section_32& section_cmd);
110 Section(
const details::section_64& section_cmd);
148 return relocations_offset_;
153 return nbof_relocations_;
211 std::unique_ptr<SpanStream>
stream()
const;
236 relocations_offset_ =
offset;
239 nbof_relocations_ = nb_reloc;
242 flags_ = flags_ |
flags;
281 std::string segment_name_;
282 uint64_t original_size_ = 0;
284 uint32_t relocations_offset_ = 0;
285 uint32_t nbof_relocations_ = 0;
287 uint32_t reserved1_ = 0;
288 uint32_t reserved2_ = 0;
289 uint32_t reserved3_ = 0;
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
Class that represents a Mach-O relocation.
Definition MachO/Relocation.hpp:40
span< const uint8_t > content() const override
section's content
void relocation_offset(uint32_t offset)
Definition MachO/Section.hpp:235
Section(const Section ©)
uint32_t reserved1() const
According to the official loader.h file, this value is reserved for offset or index.
Definition MachO/Section.hpp:171
Section(std::string name, content_t content)
void address(uint64_t address)
Definition MachO/Section.hpp:229
ref_iterator< relocations_t &, Relocation * > it_relocations
Iterator which outputs Relocation&.
Definition MachO/Section.hpp:59
std::vector< FLAGS > flags_list() const
Return the Section::flags as a list of Section::FLAGS.
Section & operator+=(FLAGS flag)
Definition MachO/Section.hpp:267
void add(FLAGS flag)
Append a Section::FLAGS to the current section.
void alignment(uint32_t align)
Definition MachO/Section.hpp:232
it_const_relocations relocations() const
Definition MachO/Section.hpp:224
std::vector< std::unique_ptr< Relocation > > relocations_t
Internal container for storing Mach-O Relocation.
Definition MachO/Section.hpp:56
uint32_t raw_flags() const
Section flags without applying the SECTION_FLAGS_MASK mask.
Definition MachO/Section.hpp:192
SegmentCommand * segment()
The segment associated with this section or a nullptr if not present.
Definition MachO/Section.hpp:203
void type(TYPE type)
Definition MachO/Section.hpp:245
void swap(Section &other) noexcept
friend class BinaryParser
Definition MachO/Section.hpp:48
friend std::ostream & operator<<(std::ostream &os, const Section §ion)
void flags(std::vector< FLAGS > flags)
std::vector< uint8_t > content_t
Definition MachO/Section.hpp:53
uint32_t relocation_offset() const
Offset of the relocation table. This value should be 0 for executable and libraries as the relocation...
Definition MachO/Section.hpp:147
const std::string & segment_name() const
Return the name of the segment linked to this section.
friend class SegmentCommand
Definition MachO/Section.hpp:50
void clear(uint8_t v)
Clear the content of this section by filling its values with the byte provided in parameter.
Section(const details::section_32 §ion_cmd)
uint64_t address() const
Virtual base address of the section.
Definition MachO/Section.hpp:131
bool has_segment() const
Check if this section is correctly linked with a MachO::SegmentCommand.
Definition MachO/Section.hpp:197
uint32_t reserved3() const
This value is only present for 64 bits Mach-O files. In that case, the value is reserved.
Definition MachO/Section.hpp:183
std::unique_ptr< SpanStream > stream() const
Return a stream over the content of this section.
void remove(FLAGS flag)
Remove a Section::FLAGS to the current section.
Section(const details::section_64 §ion_cmd)
friend class Binary
Definition MachO/Section.hpp:49
void content(const content_t &data) override
Update the content of the section.
FLAGS
Definition MachO/Section.hpp:93
@ LIVE_SUPPORT
Blocks are live if they reference live blocks.
Definition MachO/Section.hpp:98
@ NO_DEAD_STRIP
No dead stripping.
Definition MachO/Section.hpp:97
@ SOME_INSTRUCTIONS
Section contains some machine instructions.
Definition MachO/Section.hpp:102
@ STRIP_STATIC_SYMS
Ok to strip static symbols in this section in files with the MY_DYLDLINK flag.
Definition MachO/Section.hpp:96
@ PURE_INSTRUCTIONS
Section contains only true machine instructions.
Definition MachO/Section.hpp:94
@ LOC_RELOC
Section has local relocation entries.
Definition MachO/Section.hpp:104
@ SELF_MODIFYING_CODE
Used with i386 code stubs written on by dyld.
Definition MachO/Section.hpp:99
@ EXT_RELOC
Section has external relocation entries.
Definition MachO/Section.hpp:103
@ DEBUG_INFO
A debug section.
Definition MachO/Section.hpp:100
@ NO_TOC
Section contains coalesced symbols that are not to be in a ranlib table of contents.
Definition MachO/Section.hpp:95
void reserved3(uint32_t reserved3)
Definition MachO/Section.hpp:254
void reserved1(uint32_t reserved1)
Definition MachO/Section.hpp:248
uint32_t alignment() const
Section alignment as a power of 2.
Definition MachO/Section.hpp:136
it_relocations relocations()
Return an iterator over the MachO::Relocation associated with this section.
Definition MachO/Section.hpp:221
TYPE type() const
Type of the section. This value can help to determine the purpose of the section (e....
Definition MachO/Section.hpp:165
bool has(FLAGS flag) const
Check if the section has the given Section::FLAGS flag.
uint32_t numberof_relocations() const
Number of relocations associated with this section.
Definition MachO/Section.hpp:152
const_ref_iterator< const relocations_t &, const Relocation * > it_const_relocations
Iterator which outputs const Relocation&.
Definition MachO/Section.hpp:62
TYPE
Definition MachO/Section.hpp:67
@ INIT_FUNC_OFFSETS
Section with 32-bit offsets to initializer functions.
Definition MachO/Section.hpp:90
@ THREAD_LOCAL_INIT_FUNCTION_POINTERS
Section with thread local variable initialization pointers to functions.
Definition MachO/Section.hpp:89
@ THREAD_LOCAL_VARIABLES
Section with thread local variable structure data.
Definition MachO/Section.hpp:87
@ LAZY_SYMBOL_POINTERS
Section with lazy symbol pointers.
Definition MachO/Section.hpp:75
@ IS_4BYTE_LITERALS
Section with 4 byte literals.
Definition MachO/Section.hpp:71
@ LAZY_DYLIB_SYMBOL_POINTERS
Section with lazy symbol pointers to lazy loaded dylibs.
Definition MachO/Section.hpp:84
@ ZEROFILL
Zero fill on demand section.
Definition MachO/Section.hpp:69
@ LITERAL_POINTERS
Section with pointers to literals.
Definition MachO/Section.hpp:73
@ GB_ZEROFILL
Zero fill on demand section (that can be larger than 4 gigabytes).
Definition MachO/Section.hpp:80
@ NON_LAZY_SYMBOL_POINTERS
Section with non-lazy symbol pointers.
Definition MachO/Section.hpp:74
@ THREAD_LOCAL_VARIABLE_POINTERS
Section with pointers to thread local structures.
Definition MachO/Section.hpp:88
@ REGULAR
Regular section.
Definition MachO/Section.hpp:68
@ COALESCED
Section contains symbols that are to be coalesced.
Definition MachO/Section.hpp:79
@ IS_8BYTE_LITERALS
Section with 8 byte literals.
Definition MachO/Section.hpp:72
@ INTERPOSING
Section with only pairs of function pointers for interposing.
Definition MachO/Section.hpp:81
@ THREAD_LOCAL_REGULAR
Thread local data section.
Definition MachO/Section.hpp:85
@ MOD_TERM_FUNC_POINTERS
Section with only function pointers for termination.
Definition MachO/Section.hpp:78
@ SYMBOL_STUBS
Section with symbol stubs, byte size of stub in the Reserved2 field.
Definition MachO/Section.hpp:76
@ IS_16BYTE_LITERALS
Section with only 16 byte literals.
Definition MachO/Section.hpp:82
@ THREAD_LOCAL_ZEROFILL
Thread local zerofill section.
Definition MachO/Section.hpp:86
@ MOD_INIT_FUNC_POINTERS
Section with only function pointers for initialization.
Definition MachO/Section.hpp:77
@ CSTRING_LITERALS
Section with literal C strings.
Definition MachO/Section.hpp:70
@ DTRACE_DOF
Section contains DTrace Object Format.
Definition MachO/Section.hpp:83
void numberof_relocations(uint32_t nb_reloc)
Definition MachO/Section.hpp:238
static constexpr auto TYPE_MASK
Definition MachO/Section.hpp:65
static constexpr auto FLAGS_MASK
Definition MachO/Section.hpp:64
Section & operator-=(FLAGS flag)
Definition MachO/Section.hpp:271
const SegmentCommand * segment() const
Definition MachO/Section.hpp:206
Section & operator=(Section copy)
void flags(uint32_t flags)
Definition MachO/Section.hpp:241
Section(std::string name)
void accept(Visitor &visitor) const override
uint32_t reserved2() const
According to the official loader.h file, this value is reserved for count or sizeof.
Definition MachO/Section.hpp:177
void reserved2(uint32_t reserved2)
Definition MachO/Section.hpp:251
FLAGS flags() const
Section's flags masked with SECTION_FLAGS_MASK (see: Section::FLAGS).
Definition MachO/Section.hpp:159
void segment_name(const std::string &name)
Class which represents a LoadCommand::TYPE::SEGMENT / LoadCommand::TYPE::SEGMENT_64 command.
Definition SegmentCommand.hpp:50
Class which represents an abstracted section.
Definition Abstract/Section.hpp:29
virtual std::string name() const
section's name
Definition Abstract/Section.hpp:44
virtual uint64_t offset() const
Offset in the binary.
Definition Abstract/Section.hpp:70
virtual uint64_t virtual_address() const
Address where the section should be mapped.
Definition Abstract/Section.hpp:75
Definition SpanStream.hpp:32
Definition Visitor.hpp:210
Iterator which returns reference on container's values.
Definition iterators.hpp:46
#define ENABLE_BITMASK_OPERATORS(X)
Definition enums.hpp:24
Definition endianness_support.hpp:59
Namespace related to the LIEF's Mach-O module.
Definition Abstract/Header.hpp:36
const char * to_string(BuildToolVersion::TOOLS tool)
LIEF namespace.
Definition Abstract/Binary.hpp:40
uint64_t align(uint64_t value, uint64_t align_on)
Definition utils.hpp:28
tcb::span< ElementType, Extent > span
Definition span.hpp:22
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:257
#define LIEF_API
Definition visibility.h:41