LIEF: Library to Instrument Executable Formats Version 0.17.0
|
Class which represents an ELF symbol. More...
#include <Symbol.hpp>
Public Types | |
enum class | BINDING { LOCAL = 0 , GLOBAL = 1 , WEAK = 2 , GNU_UNIQUE = 10 } |
enum class | TYPE { NOTYPE = 0 , OBJECT = 1 , FUNC = 2 , SECTION = 3 , FILE = 4 , COMMON = 5 , TLS = 6 , GNU_IFUNC = 10 } |
Type of the symbol. This enum matches the STT_xxx values of the ELF specs. More... | |
enum class | VISIBILITY { DEFAULT = 0 , INTERNAL = 1 , HIDDEN = 2 , PROTECTED = 3 } |
Visibility of the symbol. This enum matches the STV_xxx values of the official ELF specs. More... | |
enum | SECTION_INDEX { UNDEF = 0 , ABS = 0xfff1 , COMMON = 0xfff2 } |
Special section indices. More... | |
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 | |
Symbol (std::string name) | |
Symbol ()=default | |
~Symbol () override=default | |
Symbol & | operator= (Symbol other) |
Symbol (const Symbol &other) | |
void | swap (Symbol &other) |
TYPE | type () const |
The symbol's type provides a general classification for the associated entity. | |
BINDING | binding () const |
The symbol's binding determines the linkage visibility and behavior. | |
uint8_t | information () const |
This member specifies the symbol's type and binding attributes. | |
uint8_t | other () const |
Alias for visibility() | |
uint16_t | section_idx () const |
ELF::Section index associated with the symbol. | |
VISIBILITY | visibility () const |
Symbol visibility. | |
Section * | section () |
Section associated with the symbol or a nullptr if it does not exist. | |
const Section * | section () const |
uint64_t | value () const override |
This member has slightly different interpretations: | |
uint64_t | size () const override |
Symbol size. | |
uint16_t | shndx () const |
bool | has_version () const |
Check if this symbols has a symbol version . | |
SymbolVersion * | symbol_version () |
Return the SymbolVersion associated with this symbol. If there is no symbol version, return a nullptr. | |
const SymbolVersion * | symbol_version () const |
bool | is_local () const |
bool | is_global () const |
bool | is_weak () const |
std::string | demangled_name () const |
Symbol's unmangled name. If not available, it returns an empty string. | |
void | type (TYPE type) |
void | binding (BINDING binding) |
void | other (uint8_t other) |
void | visibility (VISIBILITY visibility) |
void | information (uint8_t info) |
void | shndx (uint16_t idx) |
void | value (uint64_t value) override |
void | size (uint64_t size) override |
bool | is_exported () const |
Check if the current symbol is exported. | |
void | set_exported (bool flag=true) |
Set whether or not the symbol is exported. | |
bool | is_imported () const |
Check if the current symbol is imported. | |
void | set_imported (bool flag=true) |
Set whether or not the symbol is imported. | |
bool | is_static () const |
True if the symbol is a static one. | |
bool | is_function () const |
True if the symbol represent a function. | |
bool | is_variable () const |
True if the symbol represent a variable. | |
void | accept (Visitor &visitor) const override |
Public Member Functions inherited from LIEF::Symbol | |
Symbol ()=default | |
Symbol (std::string name) | |
Symbol (std::string name, uint64_t value) | |
Symbol (std::string name, uint64_t value, uint64_t size) | |
Symbol (const Symbol &)=default | |
Symbol & | operator= (const Symbol &)=default |
~Symbol () override=default | |
void | swap (Symbol &other) noexcept |
virtual const std::string & | name () const |
Return the symbol's name. | |
virtual std::string & | name () |
virtual void | name (std::string name) |
Set symbol name. | |
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) | |
Object & | operator= (const Object &other) |
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 BINDING | binding_from (uint32_t value, ARCH) |
static TYPE | type_from (uint32_t value, ARCH) |
static uint8_t | to_value (BINDING binding) |
static uint8_t | to_value (TYPE type) |
Class which represents an ELF symbol.
|
strong |
|
strong |
Type of the symbol. This enum matches the STT_xxx
values of the ELF specs.
Enumerator | |
---|---|
NOTYPE | Symbol's type is not specified. |
OBJECT | Symbol is a data object (variable, array, etc.) |
FUNC | Symbol is executable code (function, etc.) |
SECTION | Symbol refers to a section. |
FILE | Local, absolute symbol that refers to a file. |
COMMON | An uninitialized common block. |
TLS | Thread local data object. |
GNU_IFUNC | GNU indirect function. |
|
strong |
Visibility of the symbol. This enum matches the STV_xxx
values of the official ELF specs.
|
inline |
|
default |
|
overridedefault |
LIEF::ELF::Symbol::Symbol | ( | const Symbol & | other | ) |
|
overridevirtual |
Implements LIEF::Object.
|
inline |
The symbol's binding determines the linkage visibility and behavior.
|
inline |
std::string LIEF::ELF::Symbol::demangled_name | ( | ) | const |
Symbol's unmangled name. If not available, it returns an empty string.
|
inline |
Check if this symbols has a symbol version .
uint8_t LIEF::ELF::Symbol::information | ( | ) | const |
This member specifies the symbol's type and binding attributes.
void LIEF::ELF::Symbol::information | ( | uint8_t | info | ) |
bool LIEF::ELF::Symbol::is_exported | ( | ) | const |
Check if the current symbol is exported.
|
inline |
True if the symbol represent a function.
|
inline |
bool LIEF::ELF::Symbol::is_imported | ( | ) | const |
Check if the current symbol is imported.
|
inline |
|
inline |
True if the symbol is a static one.
|
inline |
True if the symbol represent a variable.
|
inline |
|
inline |
Alias for visibility()
|
inline |
|
inline |
Section associated with the symbol or a nullptr if it does not exist.
|
inline |
|
inline |
ELF::Section index associated with the symbol.
void LIEF::ELF::Symbol::set_exported | ( | bool | flag = true | ) |
Set whether or not the symbol is exported.
void LIEF::ELF::Symbol::set_imported | ( | bool | flag = true | ) |
Set whether or not the symbol is imported.
|
inline |
|
inline |
|
inlineoverridevirtual |
Symbol size.
Many symbols have associated sizes. For example, a data object's size is the number of bytes contained in the object. This member holds 0
if the symbol has no size or an unknown size.
Reimplemented from LIEF::Symbol.
|
inlineoverridevirtual |
Reimplemented from LIEF::Symbol.
void LIEF::ELF::Symbol::swap | ( | Symbol & | other | ) |
|
inline |
Return the SymbolVersion associated with this symbol. If there is no symbol version, return a nullptr.
|
inline |
|
inlinestatic |
|
inlinestatic |
|
inline |
The symbol's type provides a general classification for the associated entity.
|
inline |
|
inlineoverridevirtual |
This member has slightly different interpretations:
value
holds alignment constraints for a symbol for which section index is SHN_COMMONvalue
holds a section offset for a defined symbol. That is, value
is an offset from the beginning of the section associated with this symbol.value
holds a virtual address. To make these files's symbols more useful for the dynamic linker, the section offset (file interpretation) gives way to a virtual address (memory interpretation) for which the section number is irrelevant. Reimplemented from LIEF::Symbol.
|
inlineoverridevirtual |
Reimplemented from LIEF::Symbol.
|
inline |
Symbol visibility.
|
inline |