LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
LIEF::MachO::ThreadLocalVariables Class Reference

This class represents a MachO section with type Section::TYPE::THREAD_LOCAL_VARIABLES (S_THREAD_LOCAL_VARIABLES). More...

#include <ThreadLocalVariables.hpp>

Inheritance diagram for LIEF::MachO::ThreadLocalVariables:
Collaboration diagram for LIEF::MachO::ThreadLocalVariables:

Classes

struct  Thunk
 Descriptor for a single thread-local variable. More...
class  Iterator
 Random-access iterator that materializes Thunk values on the fly from the raw section content. More...

Public Types

using thunks_it = iterator_range<Iterator>
Public Types inherited from LIEF::MachO::Section
enum class  TYPE : uint64_t {
  REGULAR = 0x00u , ZEROFILL = 0x01u , CSTRING_LITERALS = 0x02u , IS_4BYTE_LITERALS = 0x03u ,
  IS_8BYTE_LITERALS = 0x04u , LITERAL_POINTERS = 0x05u , NON_LAZY_SYMBOL_POINTERS = 0x06u , LAZY_SYMBOL_POINTERS = 0x07u ,
  SYMBOL_STUBS = 0x08u , MOD_INIT_FUNC_POINTERS = 0x09u , MOD_TERM_FUNC_POINTERS = 0x0au , COALESCED = 0x0bu ,
  GB_ZEROFILL = 0x0cu , INTERPOSING = 0x0du , IS_16BYTE_LITERALS = 0x0eu , DTRACE_DOF = 0x0fu ,
  LAZY_DYLIB_SYMBOL_POINTERS = 0x10u , THREAD_LOCAL_REGULAR = 0x11u , THREAD_LOCAL_ZEROFILL = 0x12u , THREAD_LOCAL_VARIABLES = 0x13u ,
  THREAD_LOCAL_VARIABLE_POINTERS = 0x14u , THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15u , INIT_FUNC_OFFSETS = 0x16u
}
enum class  FLAGS : uint64_t {
  PURE_INSTRUCTIONS = 0x80000000u , NO_TOC = 0x40000000u , STRIP_STATIC_SYMS = 0x20000000u , NO_DEAD_STRIP = 0x10000000u ,
  LIVE_SUPPORT = 0x08000000u , SELF_MODIFYING_CODE = 0x04000000u , DEBUG_INFO = 0x02000000u , SOME_INSTRUCTIONS = 0x00000400u ,
  EXT_RELOC = 0x00000200u , LOC_RELOC = 0x00000100u
}
using content_t = std::vector<uint8_t>
using relocations_t = std::vector<std::unique_ptr<Relocation>>
 Internal container for storing Mach-O Relocation.
using it_relocations = ref_iterator<relocations_t&, Relocation*>
 Iterator which outputs Relocation&.
using it_const_relocations
 Iterator which outputs const Relocation&.
Public Types inherited from LIEF::Object
template<class T>
using output_t = add_pointer_t<decay_t<T>>
template<class T>
using output_const_t = add_pointer_t<add_const_t<decay_t<T>>>

Public Member Functions

 ThreadLocalVariables ()
 ThreadLocalVariables (const ThreadLocalVariables &)=default
 ThreadLocalVariables (ThreadLocalVariables &&) noexcept=default
ThreadLocalVariablesoperator= (const ThreadLocalVariables &)=default
ThreadLocalVariablesoperator= (ThreadLocalVariables &&) noexcept=default
std::unique_ptr< Sectionclone () const override
thunks_it thunks () const
 Return an iterator range over the Thunk descriptors stored in this section.
size_t nb_thunks () const
 Number of Thunk descriptors in this section.
optional< Thunkget (size_t idx) const
 Access the Thunk at the given idx, or return an empty optional if the index is out of range.
void set (size_t idx, const Thunk &thunk)
 Change the Thunk at the given idx.
optional< Thunkoperator[] (size_t idx) const
 Access the Thunk at the given idx.
 ~ThreadLocalVariables () override=default
 Section (const details::section_32 &sec)
 Section (const details::section_64 &sec)
 Section (Section &&)
Public Member Functions inherited from LIEF::MachO::Section
 Section (const details::section_32 &sec)
 Section (const details::section_64 &sec)
 Section (Section &&)
Sectionoperator= (Section &&)
 ~Section () override
span< const uint8_t > content () const override
 section's content
span< uint8_t > content ()
void content (const content_t &data) override
 Update the content of the section.
const std::string & segment_name () const
 Return the name of the segment linked to this section.
uint64_t address () const
 Virtual base address of the section.
uint32_t alignment () const
 Section alignment as a power of 2.
uint32_t relocation_offset () const
 Offset of the relocation table. This value should be 0 for executable and libraries as the relocations are managed by the DyldInfo::rebase.
uint32_t numberof_relocations () const
 Number of relocations associated with this section.
FLAGS flags () const
 Section's flags masked with SECTION_FLAGS_MASK (see: Section::FLAGS).
TYPE type () const
 Type of the section. This value can help to determine the purpose of the section (e.g. TYPE::INTERPOSING).
uint32_t reserved1 () const
 According to the official loader.h file, this value is reserved for offset or index.
uint32_t reserved2 () const
 According to the official loader.h file, this value is reserved for count or sizeof.
uint32_t reserved3 () const
 This value is only present for 64 bits Mach-O files. In that case, the value is reserved.
std::vector< FLAGSflags_list () const
 Return the Section::flags as a list of Section::FLAGS.
uint32_t raw_flags () const
 Section flags without applying the SECTION_FLAGS_MASK mask.
bool has_segment () const
 Check if this section is correctly linked with a MachO::SegmentCommand.
SegmentCommandsegment ()
 The segment associated with this section or a nullptr if not present.
const SegmentCommandsegment () const
std::unique_ptr< SpanStreamstream () const
 Return a stream over the content of this section.
void clear (uint8_t v)
 Clear the content of this section by filling its values with the byte provided in parameter.
it_relocations relocations ()
 Return an iterator over the MachO::Relocation associated with this section.
it_const_relocations relocations () const
void segment_name (const std::string &name)
void address (uint64_t address)
void alignment (uint32_t align)
void relocation_offset (uint32_t offset)
void numberof_relocations (uint32_t nb_reloc)
void flags (uint32_t flags)
void flags (std::vector< FLAGS > flags)
void type (TYPE type)
void reserved1 (uint32_t reserved1)
void reserved2 (uint32_t reserved2)
void reserved3 (uint32_t reserved3)
bool has (FLAGS flag) const
 Check if the section has the given Section::FLAGS flag.
void add (FLAGS flag)
 Append a Section::FLAGS to the current section.
void remove (FLAGS flag)
 Remove a Section::FLAGS to the current section.
Sectionoperator+= (FLAGS flag)
Sectionoperator-= (FLAGS flag)
template<class T>
const T * cast () const
template<class T>
T * cast ()
void accept (Visitor &visitor) const override
Public Member Functions inherited from LIEF::Section
 Section ()=default
 Section (std::string name)
 ~Section () override=default
Sectionoperator= (const Section &)=default
 Section (const Section &)=default
virtual std::string name () const
 section's name
virtual const std::string & fullname () const
 Return the complete section's name which might trailing (0) bytes.
virtual void size (uint64_t size)
 Change the section size.
virtual uint64_t size () const
 section's size (size in the binary, not the virtual size)
virtual uint64_t offset () const
 Offset in the binary.
virtual uint64_t virtual_address () const
 Address where the section should be mapped.
virtual void virtual_address (uint64_t virtual_address)
virtual void name (std::string name)
 Change the section's name.
virtual void offset (uint64_t offset)
double entropy () const
 Section's entropy.
size_t search (uint64_t integer, size_t pos, size_t size) const
size_t search (const std::vector< uint8_t > &pattern, size_t pos=0) const
size_t search (const std::string &pattern, size_t pos=0) const
size_t search (uint64_t integer, size_t pos=0) const
std::vector< size_t > search_all (uint64_t v, size_t size) const
std::vector< size_t > search_all (uint64_t v) const
std::vector< size_t > search_all (const std::string &v) const
void accept (Visitor &visitor) const override
 Method so that the visitor can visit us.
Public Member Functions inherited from LIEF::Object
 Object ()
 Object (const Object &other)
Objectoperator= (const Object &other)
 Object (Object &&other) noexcept=default
Objectoperator= (Object &&other) noexcept=default
template<class T>
output_t< T > as ()
template<class T>
output_const_t< T > as () const
virtual bool operator== (const Object &other) const
virtual bool operator!= (const Object &other) const
virtual ~Object ()

Static Public Member Functions

static bool classof (const Section *section)
Static Public Member Functions inherited from LIEF::MachO::Section
static std::unique_ptr< Sectioncreate (const details::section_32 &sec)
static std::unique_ptr< Sectioncreate (const details::section_64 &sec)
static std::unique_ptr< Sectioncreate (std::string name, const content_t &content, TYPE type=TYPE::REGULAR)
static std::unique_ptr< Sectioncreate (std::string name, TYPE type=TYPE::REGULAR)

Additional Inherited Members

Static Public Attributes inherited from LIEF::MachO::Section
static constexpr auto FLAGS_MASK = uint32_t(0xffffff00u)
static constexpr auto TYPE_MASK = uint32_t(0xff)
Static Public Attributes inherited from LIEF::Section
static constexpr size_t npos = -1

Detailed Description

This class represents a MachO section with type Section::TYPE::THREAD_LOCAL_VARIABLES (S_THREAD_LOCAL_VARIABLES).

Such a section contains an array of thread-local variable descriptors (Thunk) that the dynamic linker (dyld) uses to lazily initialize thread-local storage (TLS) on first access.

Each descriptor holds a pointer to the initializer function, a TLS key, and the offset of the variable in the TLS block.

Member Typedef Documentation

◆ thunks_it

Constructor & Destructor Documentation

◆ ThreadLocalVariables() [1/3]

LIEF::MachO::ThreadLocalVariables::ThreadLocalVariables ( )

◆ ThreadLocalVariables() [2/3]

LIEF::MachO::ThreadLocalVariables::ThreadLocalVariables ( const ThreadLocalVariables & )
default

◆ ThreadLocalVariables() [3/3]

LIEF::MachO::ThreadLocalVariables::ThreadLocalVariables ( ThreadLocalVariables && )
defaultnoexcept

◆ ~ThreadLocalVariables()

LIEF::MachO::ThreadLocalVariables::~ThreadLocalVariables ( )
overridedefault

Member Function Documentation

◆ classof()

bool LIEF::MachO::ThreadLocalVariables::classof ( const Section * section)
inlinestatic

◆ clone()

std::unique_ptr< Section > LIEF::MachO::ThreadLocalVariables::clone ( ) const
inlineoverridevirtual

Reimplemented from LIEF::MachO::Section.

References ThreadLocalVariables().

◆ get()

optional< Thunk > LIEF::MachO::ThreadLocalVariables::get ( size_t idx) const

Access the Thunk at the given idx, or return an empty optional if the index is out of range.

Referenced by operator[]().

◆ nb_thunks()

size_t LIEF::MachO::ThreadLocalVariables::nb_thunks ( ) const

Number of Thunk descriptors in this section.

Referenced by thunks().

◆ operator=() [1/2]

ThreadLocalVariables & LIEF::MachO::ThreadLocalVariables::operator= ( const ThreadLocalVariables & )
default

◆ operator=() [2/2]

ThreadLocalVariables & LIEF::MachO::ThreadLocalVariables::operator= ( ThreadLocalVariables && )
defaultnoexcept

◆ operator[]()

optional< Thunk > LIEF::MachO::ThreadLocalVariables::operator[] ( size_t idx) const
inline

Access the Thunk at the given idx.

References get().

◆ Section() [1/3]

LIEF::MachO::Section::Section ( const details::section_32 & sec)

◆ Section() [2/3]

LIEF::MachO::Section::Section ( const details::section_64 & sec)

◆ Section() [3/3]

◆ set()

void LIEF::MachO::ThreadLocalVariables::set ( size_t idx,
const Thunk & thunk )

Change the Thunk at the given idx.

◆ thunks()

thunks_it LIEF::MachO::ThreadLocalVariables::thunks ( ) const
inline

Return an iterator range over the Thunk descriptors stored in this section.

References LIEF::make_range(), and nb_thunks().


The documentation for this class was generated from the following file: