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

This auxiliary symbol exposes information about the associated section. More...

#include <AuxiliarySectionDefinition.hpp>

Inheritance diagram for LIEF::COFF::AuxiliarySectionDefinition:
Collaboration diagram for LIEF::COFF::AuxiliarySectionDefinition:

Public Types

enum class  COMDAT_SELECTION : uint8_t {
  NONE = 0 , NODUPLICATES = 1 , ANY , SAME_SIZE ,
  EXACT_MATCH , ASSOCIATIVE , LARGEST
}
 Values for the AuxiliarySectionDefinition::selection attribute. More...
 
- Public Types inherited from LIEF::COFF::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

 AuxiliarySectionDefinition ()
 
 AuxiliarySectionDefinition (uint32_t length, uint16_t nb_relocs, uint16_t nb_lines, uint32_t checksum, uint32_t sec_idx, uint8_t selection, uint8_t reserved)
 
 AuxiliarySectionDefinition (const AuxiliarySectionDefinition &)=default
 
AuxiliarySectionDefinitionoperator= (const AuxiliarySectionDefinition &)=default
 
 AuxiliarySectionDefinition (AuxiliarySectionDefinition &&)=default
 
AuxiliarySectionDefinitionoperator= (AuxiliarySectionDefinition &&)=default
 
std::unique_ptr< AuxiliarySymbolclone () const override
 
uint32_t length () const
 The size of section data. The same as SizeOfRawData in the section header.
 
uint16_t nb_relocs () const
 The number of relocation entries for the section.
 
uint16_t nb_line_numbers () const
 The number of line-number entries for the section.
 
uint32_t checksum () const
 The checksum for communal data. It is applicable if the IMAGE_SCN_LNK_COMDAT flag is set in the section header.
 
uint32_t section_idx () const
 One-based index into the section table for the associated section. This is used when the COMDAT selection setting is 5.
 
COMDAT_SELECTION selection () const
 The COMDAT selection number. This is applicable if the section is a COMDAT section.
 
uint8_t reserved () const
 Reserved value (should be 0)
 
std::string to_string () const override
 
 ~AuxiliarySectionDefinition () override=default
 
- Public Member Functions inherited from LIEF::COFF::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 T * as () const
 Helper to downcast a AuxiliarySymbol into a concrete implementation.
 
template<class T >
T * as ()
 

Static Public Member Functions

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

Detailed Description

This auxiliary symbol exposes information about the associated section.

It duplicates some information that are provided in the section header

Member Enumeration Documentation

◆ COMDAT_SELECTION

Values for the AuxiliarySectionDefinition::selection attribute.

See: https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#comdat-sections-object-only

Enumerator
NONE 
NODUPLICATES 

If this symbol is already defined, the linker issues a multiply defined symbol error.

ANY 

Any section that defines the same COMDAT symbol can be linked; the rest are removed.

SAME_SIZE 

The linker chooses an arbitrary section among the definitions for this symbol. If all definitions are not the same size, a multiply defined symbol error is issued.

EXACT_MATCH 

The linker chooses an arbitrary section among the definitions for this symbol. If all definitions do not match exactly, a multiply defined symbol error is issued.

ASSOCIATIVE 

The section is linked if a certain other COMDAT section is linked. This other section is indicated by the Number field of the auxiliary symbol record for the section definition. This setting is useful for definitions that have components in multiple sections (for example, code in one and data in another), but where all must be linked or discarded as a set. The other section this section is associated with must be a COMDAT section, which can be another associative COMDAT section. An associative COMDAT section's section association chain can't form a loop. The section association chain must eventually come to a COMDAT section that doesn't have COMDAT_SELECTION::ASSOCIATIVE set.

LARGEST 

The linker chooses the largest definition from among all of the definitions for this symbol. If multiple definitions have this size, the choice between them is arbitrary.

Constructor & Destructor Documentation

◆ AuxiliarySectionDefinition() [1/4]

LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition ( )
inline

◆ AuxiliarySectionDefinition() [2/4]

LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition ( uint32_t length,
uint16_t nb_relocs,
uint16_t nb_lines,
uint32_t checksum,
uint32_t sec_idx,
uint8_t selection,
uint8_t reserved )
inline

◆ AuxiliarySectionDefinition() [3/4]

LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition ( const AuxiliarySectionDefinition & )
default

◆ AuxiliarySectionDefinition() [4/4]

LIEF::COFF::AuxiliarySectionDefinition::AuxiliarySectionDefinition ( AuxiliarySectionDefinition && )
default

◆ ~AuxiliarySectionDefinition()

LIEF::COFF::AuxiliarySectionDefinition::~AuxiliarySectionDefinition ( )
overridedefault

Member Function Documentation

◆ checksum()

uint32_t LIEF::COFF::AuxiliarySectionDefinition::checksum ( ) const
inline

The checksum for communal data. It is applicable if the IMAGE_SCN_LNK_COMDAT flag is set in the section header.

◆ classof()

static bool LIEF::COFF::AuxiliarySectionDefinition::classof ( const AuxiliarySymbol * sym)
inlinestatic

◆ clone()

std::unique_ptr< AuxiliarySymbol > LIEF::COFF::AuxiliarySectionDefinition::clone ( ) const
inlineoverridevirtual

Reimplemented from LIEF::COFF::AuxiliarySymbol.

◆ length()

uint32_t LIEF::COFF::AuxiliarySectionDefinition::length ( ) const
inline

The size of section data. The same as SizeOfRawData in the section header.

◆ nb_line_numbers()

uint16_t LIEF::COFF::AuxiliarySectionDefinition::nb_line_numbers ( ) const
inline

The number of line-number entries for the section.

◆ nb_relocs()

uint16_t LIEF::COFF::AuxiliarySectionDefinition::nb_relocs ( ) const
inline

The number of relocation entries for the section.

◆ operator=() [1/2]

AuxiliarySectionDefinition & LIEF::COFF::AuxiliarySectionDefinition::operator= ( AuxiliarySectionDefinition && )
default

◆ operator=() [2/2]

AuxiliarySectionDefinition & LIEF::COFF::AuxiliarySectionDefinition::operator= ( const AuxiliarySectionDefinition & )
default

◆ parse()

static std::unique_ptr< AuxiliarySectionDefinition > LIEF::COFF::AuxiliarySectionDefinition::parse ( const std::vector< uint8_t > & payload)
static

◆ reserved()

uint8_t LIEF::COFF::AuxiliarySectionDefinition::reserved ( ) const
inline

Reserved value (should be 0)

◆ section_idx()

uint32_t LIEF::COFF::AuxiliarySectionDefinition::section_idx ( ) const
inline

One-based index into the section table for the associated section. This is used when the COMDAT selection setting is 5.

◆ selection()

COMDAT_SELECTION LIEF::COFF::AuxiliarySectionDefinition::selection ( ) const
inline

The COMDAT selection number. This is applicable if the section is a COMDAT section.

◆ to_string()

std::string LIEF::COFF::AuxiliarySectionDefinition::to_string ( ) const
overridevirtual

Reimplemented from LIEF::COFF::AuxiliarySymbol.


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