LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
LIEF::PE::AuxiliaryWeakExternal Class Reference

"Weak externals" are a mechanism for object files that allows flexibility at link time. A module can contain an unresolved external symbol (sym1), but it can also include an auxiliary record that indicates that if sym1 is not present at link time, another external symbol (sym2) is used to resolve references instead. More...

#include <AuxiliaryWeakExternal.hpp>

Inheritance diagram for LIEF::PE::AuxiliaryWeakExternal:
Collaboration diagram for LIEF::PE::AuxiliaryWeakExternal:

Public Types

enum class  CHARACTERISTICS : uint32_t { SEARCH_NOLIBRARY = 1 , SEARCH_LIBRARY = 2 , SEARCH_ALIAS = 3 , ANTI_DEPENDENCY = 4 }
 
- Public Types inherited from LIEF::PE::AuxiliarySymbol
enum class  TYPE {
  UNKNOWN = 0 , CLR_TOKEN , FUNC_DEF , BF_AND_EF ,
  WEAK_EXTERNAL , FILE , SEC_DEF
}
 Type discriminator for the subclasses. More...
 

Public Member Functions

 AuxiliaryWeakExternal ()
 
 AuxiliaryWeakExternal (uint32_t sym_idx, uint32_t characteristics, std::vector< uint8_t > padding)
 
 AuxiliaryWeakExternal (const AuxiliaryWeakExternal &)=default
 
AuxiliaryWeakExternaloperator= (const AuxiliaryWeakExternal &)=default
 
 AuxiliaryWeakExternal (AuxiliaryWeakExternal &&)=default
 
AuxiliaryWeakExternaloperator= (AuxiliaryWeakExternal &&)=default
 
std::unique_ptr< AuxiliarySymbolclone () const override
 
uint32_t sym_idx () const
 The symbol-table index of sym2, the symbol to be linked if sym1 is not found.
 
CHARACTERISTICS characteristics () const
 
span< const uint8_t > padding () const
 
std::string to_string () const override
 
 ~AuxiliaryWeakExternal () override=default
 
- Public Member Functions inherited from LIEF::PE::AuxiliarySymbol
 AuxiliarySymbol ()=default
 
 AuxiliarySymbol (std::vector< uint8_t > payload)
 
 AuxiliarySymbol (const AuxiliarySymbol &)=default
 
AuxiliarySymboloperator= (const AuxiliarySymbol &)=default
 
 AuxiliarySymbol (AuxiliarySymbol &&)=default
 
AuxiliarySymboloperator= (AuxiliarySymbol &&)=default
 
 AuxiliarySymbol (TYPE ty)
 
TYPE type () const
 
span< const uint8_t > payload () const
 For unknown type only, return the raw representation of this symbol.
 
span< uint8_t > payload ()
 
virtual ~AuxiliarySymbol ()=default
 
template<class T >
const Tas () const
 Helper to downcast a AuxiliarySymbol into a concrete implementation.
 

Static Public Member Functions

static std::unique_ptr< AuxiliaryWeakExternalparse (const std::vector< uint8_t > &payload)
 
static bool classof (const AuxiliarySymbol *sym)
 
- Static Public Member Functions inherited from LIEF::PE::AuxiliarySymbol
static std::unique_ptr< AuxiliarySymbolparse (Symbol &sym, std::vector< uint8_t > payload)
 
static TYPE get_aux_type (const Symbol &sym)
 

Detailed Description

"Weak externals" are a mechanism for object files that allows flexibility at link time. A module can contain an unresolved external symbol (sym1), but it can also include an auxiliary record that indicates that if sym1 is not present at link time, another external symbol (sym2) is used to resolve references instead.

If a definition of sym1 is linked, then an external reference to the symbol is resolved normally. If a definition of sym1 is not linked, then all references to the weak external for sym1 refer to sym2 instead. The external symbol, sym2, must always be linked; typically, it is defined in the module that contains the weak reference to sym1.

Reference: https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#auxiliary-format-3-weak-externals

Member Enumeration Documentation

◆ CHARACTERISTICS

Enumerator
SEARCH_NOLIBRARY 

No library search for sym1 should be performed.

SEARCH_LIBRARY 

A library search for sym1 should be performed.

SEARCH_ALIAS 

sym1 is an alias for sym2

ANTI_DEPENDENCY 

Constructor & Destructor Documentation

◆ AuxiliaryWeakExternal() [1/4]

LIEF::PE::AuxiliaryWeakExternal::AuxiliaryWeakExternal ( )
inline

◆ AuxiliaryWeakExternal() [2/4]

LIEF::PE::AuxiliaryWeakExternal::AuxiliaryWeakExternal ( uint32_t sym_idx,
uint32_t characteristics,
std::vector< uint8_t > padding )
inline

◆ AuxiliaryWeakExternal() [3/4]

LIEF::PE::AuxiliaryWeakExternal::AuxiliaryWeakExternal ( const AuxiliaryWeakExternal & )
default

◆ AuxiliaryWeakExternal() [4/4]

LIEF::PE::AuxiliaryWeakExternal::AuxiliaryWeakExternal ( AuxiliaryWeakExternal && )
default

◆ ~AuxiliaryWeakExternal()

LIEF::PE::AuxiliaryWeakExternal::~AuxiliaryWeakExternal ( )
overridedefault

Member Function Documentation

◆ characteristics()

CHARACTERISTICS LIEF::PE::AuxiliaryWeakExternal::characteristics ( ) const
inline

◆ classof()

static bool LIEF::PE::AuxiliaryWeakExternal::classof ( const AuxiliarySymbol * sym)
inlinestatic

◆ clone()

std::unique_ptr< AuxiliarySymbol > LIEF::PE::AuxiliaryWeakExternal::clone ( ) const
inlineoverridevirtual

Reimplemented from LIEF::PE::AuxiliarySymbol.

◆ operator=() [1/2]

AuxiliaryWeakExternal & LIEF::PE::AuxiliaryWeakExternal::operator= ( AuxiliaryWeakExternal && )
default

◆ operator=() [2/2]

AuxiliaryWeakExternal & LIEF::PE::AuxiliaryWeakExternal::operator= ( const AuxiliaryWeakExternal & )
default

◆ padding()

span< const uint8_t > LIEF::PE::AuxiliaryWeakExternal::padding ( ) const
inline

◆ parse()

static std::unique_ptr< AuxiliaryWeakExternal > LIEF::PE::AuxiliaryWeakExternal::parse ( const std::vector< uint8_t > & payload)
static

◆ sym_idx()

uint32_t LIEF::PE::AuxiliaryWeakExternal::sym_idx ( ) const
inline

The symbol-table index of sym2, the symbol to be linked if sym1 is not found.

◆ to_string()

std::string LIEF::PE::AuxiliaryWeakExternal::to_string ( ) const
overridevirtual

Reimplemented from LIEF::PE::AuxiliarySymbol.


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