The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | Private Member Functions | Static Private Member Functions | Friends | List of all members
Elf Class Reference

#include <Elf.h>

+ Inheritance diagram for Elf:
+ Collaboration diagram for Elf:

Classes

struct  Elf32SectionHeader_t
 
struct  Elf32Symbol_t
 
struct  ElfDyn_t
 
struct  ElfHash_t
 
struct  ElfHeader_t
 
struct  ElfProgramHeader_t
 
struct  ElfRel_t
 
struct  ElfRela_t
 
struct  ElfSectionHeader_t
 
struct  ElfSymbol_t
 
struct  ExecutableMetadata
 

Public Types

enum class  ExecutableValidationResult {
  Valid , Malformed , WrongArchitecture , UnsupportedType ,
  UnsupportedLayout , MultipleInterpreters
}
 

Public Member Functions

 Elf ()
 
virtual ~Elf ()
 
 Elf (const Elf &)
 
bool validate (uint8_t *pBuffer, size_t length)
 
bool create (uint8_t *pBuffer, size_t length)
 
bool createNeededOnly (uint8_t *pBuffer, size_t length)
 
bool loadModule (uint8_t *pBuffer, size_t length, uintptr_t &loadBase, size_t &loadSize, SymbolTable *pSymbolTableCopy=0)
 
bool finaliseModule (uint8_t *pBuffer, size_t length)
 
bool allocate (uint8_t *pBuffer, size_t length, uintptr_t &loadBase, SymbolTable *pSymtab=0, bool bAllocate=true, size_t *pSize=0)
 
bool load (uint8_t *pBuffer, size_t length, uintptr_t loadBase, SymbolTable *pSymtab=0, uintptr_t nStart=0, uintptr_t nEnd=~0, bool relocate=true, uintptr_t destinationBase=0)
 
List< char * > & neededLibraries ()
 
String & getInterpreter ()
 
uintptr_t getLastAddress ()
 
uintptr_t getInitFunc ()
 
uintptr_t getFiniFunc ()
 
template<class T = ElfSymbol_t>
const char * lookupSymbol (uintptr_t addr, uintptr_t *startAddr, T *symbolTable)
 
const char * lookupSymbol (uintptr_t addr, uintptr_t *startAddr)
 
uintptr_t lookupSymbol (const char *pName)
 
uintptr_t lookupDynamicSymbolAddress (const char *str, uintptr_t loadBase)
 
uintptr_t applySpecificRelocation (uintptr_t off, SymbolTable *pSymtab, uintptr_t loadBase, SymbolTable::Policy policy=SymbolTable::LocalFirst)
 
uintptr_t getGlobalOffsetTable ()
 
size_t getPltSize ()
 
void populateSymbolTable (SymbolTable *pSymtab, uintptr_t loadBase)
 
void preallocateSymbols (SymbolTable *pSymtabOverride=nullptr, SymbolTable *pAdditionalSymtab=nullptr)
 
SymbolTable * getSymbolTable ()
 
uintptr_t getEntryPoint ()
 
uintptr_t debugFrameTable ()
 
uintptr_t debugFrameTableLength ()
 
void setName (const String &s)
 
const String & getName () const
 

Static Public Member Functions

static ExecutableValidationResult validateExecutableHeader (const uint8_t *pBuffer, size_t length, size_t fileSize, ExecutableMetadata &metadata)
 
static ExecutableValidationResult validateExecutableProgramHeaders (const uint8_t *pBuffer, size_t length, size_t fileSize, ExecutableMetadata &metadata)
 
static ExecutableValidationResult validateExecutableInterpreter (const uint8_t *pBuffer, size_t length, const ExecutableMetadata &metadata)
 
static bool extractEntryPoint (uint8_t *pBuffer, size_t length, uintptr_t &entry)
 
static bool extractInformation (uint8_t *pBuffer, size_t length, size_t &phdrCount, size_t &phdrEntrySize, uintptr_t &phdrAddress)
 

Static Public Attributes

static constexpr size_t MaximumProgramHeaderTableSize = 65536
 
static constexpr size_t MaximumInterpreterSize = 4096
 

Protected Attributes

struct Elf::ElfHeader_t PACKED
 
struct Elf::ElfProgramHeader_t PACKED
 
struct Elf::ElfSectionHeader_t PACKED
 
struct Elf::Elf32SectionHeader_t PACKED
 
struct Elf::ElfSymbol_t PACKED
 
struct Elf::Elf32Symbol_t PACKED
 
struct Elf::ElfDyn_t PACKED
 
struct Elf::ElfRel_t PACKED
 
struct Elf::ElfRela_t PACKED
 
ElfSymbol_t * m_pSymbolTable
 
size_t m_nSymbolTableSize
 
char * m_pStringTable
 
size_t m_nStringTableSize
 
char * m_pShstrtab
 
size_t m_nShstrtabSize
 
uintptr_t * m_pGotTable
 
ElfRel_t * m_pRelTable
 
ElfRela_t * m_pRelaTable
 
size_t m_nRelTableSize
 
size_t m_nRelaTableSize
 
ElfRel_t * m_pPltRelTable
 
ElfRela_t * m_pPltRelaTable
 
bool m_bUsesRela
 
uint32_t * m_pDebugTable
 
size_t m_nDebugTableSize
 
ElfSymbol_t * m_pDynamicSymbolTable
 
size_t m_nDynamicSymbolTableSize
 
char * m_pDynamicStringTable
 
size_t m_nDynamicStringTableSize
 
ElfSectionHeader_t * m_pSectionHeaders
 
size_t m_nSectionHeaders
 
ElfProgramHeader_t * m_pProgramHeaders
 
size_t m_nProgramHeaders
 
size_t m_nPltSize
 
uintptr_t m_nEntry
 
List< char * > m_NeededLibraries
 
SymbolTable m_SymbolTable
 
uintptr_t m_InitFunc
 
uintptr_t m_FiniFunc
 
String m_sInterpreter
 
String m_Name
 
uintptr_t m_LoadBase
 

Private Member Functions

bool relocate (uint8_t *pBuffer, uintptr_t length)
 
bool relocateModinfo (uint8_t *pBuffer, uintptr_t length)
 
bool applyRelocation (ElfRel_t rel, ElfSectionHeader_t *pSh, SymbolTable *pSymtab=0, uintptr_t loadBase=0, SymbolTable::Policy policy=SymbolTable::LocalFirst, uintptr_t destinationAddress=0, uintptr_t destinationEnd=0)
 
bool applyRelocation (ElfRela_t rela, ElfSectionHeader_t *pSh, SymbolTable *pSymtab=0, uintptr_t loadBase=0, SymbolTable::Policy policy=SymbolTable::LocalFirst, uintptr_t destinationAddress=0, uintptr_t destinationEnd=0)
 
void rebaseDynamic ()
 
Elf & operator= (const Elf &)
 

Static Private Member Functions

template<typename T >
static T * elfCopy (uint8_t *, ElfProgramHeader_t *, size_t, T *, size_t)
 

Friends

class PosixSubsystem
 
class ModuleImage
 

Detailed Description

Provides an implementation of a 32-bit Executable and Linker format file parser. The ELF data can be loaded either by supplying an entire ELF file in a buffer, or by supplying details of each section seperately.

Definition at line 201 of file Elf.h.

Member Enumeration Documentation

◆ ExecutableValidationResult

enum class Elf::ExecutableValidationResult
strong

Definition at line 212 of file Elf.h.

Constructor & Destructor Documentation

◆ Elf() [1/2]

Elf::Elf ( )

Default constructor - loads no data.

Definition at line 77 of file linker/Elf.cc.

◆ ~Elf()

Elf::~Elf ( )
virtual

Destructor.

Definition at line 110 of file linker/Elf.cc.

◆ Elf() [2/2]

Elf::Elf ( const Elf &  elf)

The copy-constructor

Definition at line 126 of file linker/Elf.cc.

References List< T, nodePoolSize >::begin(), SymbolTable::copyTable(), and List< T, nodePoolSize >::end().

Member Function Documentation

◆ allocate()

bool Elf::allocate ( uint8_t *  pBuffer,
size_t  length,
uintptr_t &  loadBase,
SymbolTable *  pSymtab = 0,
bool  bAllocate = true,
size_t *  pSize = 0 
)

Performs the prerequisite allocation for any normal ELF file - library or executable. For a library, this allocates loadBase, and allocates memory for the entire object - this is not filled however.

Note
If bAllocate is false, the memory will NOT be allocated.
Todo:
Don't rely on this. Look at nchain in the hash table.

Definition at line 777 of file linker/Elf.cc.

References PhysicalMemoryManager::allocatePage(), VirtualAddressSpace::Execute, PhysicalMemoryManager::getPageSize(), Process::getParent(), Hex, ProcessorBase::information(), SymbolTable::insert(), SymbolTable::insertMultiple(), PhysicalMemoryManager::instance(), preallocateSymbols(), and VirtualAddressSpace::Write.

Referenced by loadModule(), DynamicLinker::loadObject(), and DynamicLinker::loadProgram().

+ Here is the caller graph for this function:

◆ applyRelocation() [1/2]

bool Elf::applyRelocation ( ElfRel_t  rel,
ElfSectionHeader_t *  pSh,
SymbolTable *  pSymtab = 0,
uintptr_t  loadBase = 0,
SymbolTable::Policy  policy = SymbolTable::LocalFirst,
uintptr_t  destinationAddress = 0,
uintptr_t  destinationEnd = 0 
)
private

Applies one relocation. This overload performs a relocation without addend (REL).

Parameters
relThe relocation entry to apply.
pShA pointer to the section that the relocation entry refers to.
pSymtabThe symbol table to use for lookups.
loadBaseFor a relocatable object, the address at which it is loaded.
policyLookup policy.
Note
Defined in core/processor/.../Elf.cc

Definition at line 19 of file core/processor/arm64/Elf.cc.

Referenced by applySpecificRelocation(), and load().

+ Here is the caller graph for this function:

◆ applyRelocation() [2/2]

bool Elf::applyRelocation ( ElfRela_t  rela,
ElfSectionHeader_t *  pSh,
SymbolTable *  pSymtab = 0,
uintptr_t  loadBase = 0,
SymbolTable::Policy  policy = SymbolTable::LocalFirst,
uintptr_t  destinationAddress = 0,
uintptr_t  destinationEnd = 0 
)
private

Applies one relocation. This overload performs a relocation with addend (RELA).

Parameters
relThe relocation entry to apply.
pShA pointer to the section that the relocation entry refers to.
pSymtabThe symbol table to use for lookups.
loadBaseFor a relocatable object, the address at which it is loaded.
policyLookup policy.
Note
Defined in core/processor/.../Elf.cc

Definition at line 25 of file core/processor/arm64/Elf.cc.

References Dec, KernelElf::instance(), SymbolTable::lookup(), and SymbolTable::NotOriginatingElf.

◆ applySpecificRelocation()

uintptr_t Elf::applySpecificRelocation ( uintptr_t  off,
SymbolTable *  pSymtab,
uintptr_t  loadBase,
SymbolTable::Policy  policy = SymbolTable::LocalFirst 
)

Applies the n'th relocation in the relocation table. Used by PLT entries.

Definition at line 1233 of file linker/Elf.cc.

References applyRelocation().

◆ create()

bool Elf::create ( uint8_t *  pBuffer,
size_t  length 
)

Constructs an Elf object, and assumes the given pointer to be to a contiguous region of memory containing an ELF object.

Definition at line 304 of file linker/Elf.cc.

References List< T, nodePoolSize >::begin(), elfCopy(), List< T, nodePoolSize >::end(), Hex, and List< T, nodePoolSize >::pushBack().

Referenced by DynamicLinker::loadObject(), and DynamicLinker::loadProgram().

+ Here is the caller graph for this function:

◆ createNeededOnly()

bool Elf::createNeededOnly ( uint8_t *  pBuffer,
size_t  length 
)

Merely loads "needed libraries" and then returns success or failure.

Definition at line 203 of file linker/Elf.cc.

References List< T, nodePoolSize >::begin(), elfCopy(), EMIT_IF, List< T, nodePoolSize >::end(), Hex, and List< T, nodePoolSize >::pushBack().

Referenced by DynamicLinker::loadObject(), and DynamicLinker::loadProgram().

+ Here is the caller graph for this function:

◆ debugFrameTable()

uintptr_t Elf::debugFrameTable ( )

Definition at line 1259 of file linker/Elf.cc.

◆ debugFrameTableLength()

uintptr_t Elf::debugFrameTableLength ( )

Definition at line 1263 of file linker/Elf.cc.

◆ elfCopy()

template<typename T >
T * Elf::elfCopy ( uint8_t *  pBuffer,
Elf::ElfProgramHeader_t *  pProgramHeaders,
size_t  nProgramHeaders,
T *  pCurrent,
size_t  size 
)
staticprivate

Helper function: iterates through all program headers given to find where pCurrent resides, then copies that data into a new buffer and returns it.

Definition at line 62 of file linker/Elf.cc.

Referenced by create(), and createNeededOnly().

+ Here is the caller graph for this function:

◆ extractEntryPoint()

bool Elf::extractEntryPoint ( uint8_t *  pBuffer,
size_t  length,
uintptr_t &  entry 
)
static

Extracts only the entry point from an ELF file at the given buffer.

Todo:
check magic

Definition at line 1034 of file linker/Elf.cc.

◆ extractInformation()

bool Elf::extractInformation ( uint8_t *  pBuffer,
size_t  length,
size_t &  phdrCount,
size_t &  phdrEntrySize,
uintptr_t &  phdrAddress 
)
static

Extracts information about the ELF file at the given buffer.

Todo:
check magic

Definition at line 1045 of file linker/Elf.cc.

◆ finaliseModule()

bool Elf::finaliseModule ( uint8_t *  pBuffer,
size_t  length 
)

Finalises a module - applies all relocations except those in the .modinfo section. At this point it is assumed that all of this module's dependencies have been loaded.

The load base must be given again for reentrancy reasons.

Definition at line 736 of file linker/Elf.cc.

References VirtualAddressSpace::Execute, PhysicalMemoryManager::getPageSize(), ProcessorBase::information(), VirtualAddressSpace::KernelMode, VirtualAddressSpace::setFlags(), and VirtualAddressSpace::Write.

◆ getEntryPoint()

uintptr_t Elf::getEntryPoint ( )

Returns the entry point of the file.

Definition at line 1134 of file linker/Elf.cc.

◆ getFiniFunc()

uintptr_t Elf::getFiniFunc ( )
inline

Definition at line 327 of file Elf.h.

◆ getGlobalOffsetTable()

uintptr_t Elf::getGlobalOffsetTable ( )

Gets the address of the global offset table.

Returns
Address of the GOT, or 0 if none was found.

Definition at line 1130 of file linker/Elf.cc.

Referenced by DynamicLinker::initPlt().

+ Here is the caller graph for this function:

◆ getInitFunc()

uintptr_t Elf::getInitFunc ( )
inline

Definition at line 324 of file Elf.h.

◆ getInterpreter()

String & Elf::getInterpreter ( )

Returns the name of the interpreter set aside for this program, or an empty string.

Definition at line 1271 of file linker/Elf.cc.

Referenced by DynamicLinker::loadProgram().

+ Here is the caller graph for this function:

◆ getLastAddress()

uintptr_t Elf::getLastAddress ( )

Returns the virtual address of the last byte to be written. Used to calculate the sbrk memory breakpoint.

Definition at line 1059 of file linker/Elf.cc.

◆ getName()

const String & Elf::getName ( ) const
inline

Gets the friendly name.

Definition at line 389 of file Elf.h.

◆ getPltSize()

size_t Elf::getPltSize ( )

Returns the size of the Procedure Linkage table.

Definition at line 1275 of file linker/Elf.cc.

◆ getSymbolTable()

SymbolTable * Elf::getSymbolTable ( )
inline

Definition at line 373 of file Elf.h.

◆ load()

bool Elf::load ( uint8_t *  pBuffer,
size_t  length,
uintptr_t  loadBase,
SymbolTable *  pSymtab = 0,
uintptr_t  nStart = 0,
uintptr_t  nEnd = ~0,
bool  relocate = true,
uintptr_t  destinationBase = 0 
)

Loads (part) of a 'normal' file. This could be an executable or a library. By default the entire file is loaded (memory copied and relocated) but this can be changed using the nStart and nEnd parameters. This allows for lazy loading.

Note
PLT relocations are not performed here - they are defined in a different section to the standard REL and RELA entries, so must be done specifically (via applySpecificRelocation). destinationBase can redirect writes for nStart to a private staging mapping without changing the logical addresses used by relocations.

Definition at line 925 of file linker/Elf.cc.

References applyRelocation(), ProcessorBase::flushDCacheAndInvalidateICache(), Hex, and SymbolTable::LocalFirst.

◆ loadModule()

bool Elf::loadModule ( uint8_t *  pBuffer,
size_t  length,
uintptr_t &  loadBase,
size_t &  loadSize,
SymbolTable *  pSymbolTableCopy = 0 
)

Maps memory at a specified address, loads code there and applies relocations only for the .modinfo section. Intended use is for loading kernel modules only, there is no provision for dynamic relocations.

Todo:
Figure out how to map to the pages loaded by GRUB instead of copying into newly-allocated pages here.
Todo:
we should handle hidden symbols better so they are only needed for relocation and not tracked forever

Definition at line 519 of file linker/Elf.cc.

References allocate(), PhysicalMemoryManager::allocatePage(), PhysicalMemoryManager::getPageSize(), Hex, ProcessorBase::information(), SymbolTable::insert(), KernelElf::instance(), PhysicalMemoryManager::instance(), VirtualAddressSpace::isMapped(), VirtualAddressSpace::KernelMode, VirtualAddressSpace::map(), populateSymbolTable(), preallocateSymbols(), rebaseDynamic(), and VirtualAddressSpace::Write.

◆ lookupDynamicSymbolAddress()

uintptr_t Elf::lookupDynamicSymbolAddress ( const char *  str,
uintptr_t  loadBase 
)

Same as lookupSymbol, but acts on the dynamic symbol table instead of the normal one.

Definition at line 1122 of file linker/Elf.cc.

References SymbolTable::lookup().

◆ lookupSymbol() [1/3]

uintptr_t Elf::lookupSymbol ( const char *  pName)

Returns the start address of the symbol with name 'pName'.

Definition at line 1118 of file linker/Elf.cc.

References SymbolTable::lookup().

◆ lookupSymbol() [2/3]

const char * Elf::lookupSymbol ( uintptr_t  addr,
uintptr_t *  startAddr 
)

Default implementation which just uses the normal internal symbol table.

Definition at line 1064 of file linker/Elf.cc.

References lookupSymbol().

◆ lookupSymbol() [3/3]

template<class T >
const char * Elf::lookupSymbol ( uintptr_t  addr,
uintptr_t *  startAddr,
T *  symbolTable 
)

Returns the name of the symbol which contains 'addr', and also the starting address of that symbol in 'startAddr' if startAddr != 0.

Parameters
[in]addrThe address to look up.
[out]startAddrThe starting address of the found symbol (optional).
Returns
The symbol name, as a C string.

Definition at line 1072 of file linker/Elf.cc.

Referenced by LookupCommand::execute(), and lookupSymbol().

+ Here is the caller graph for this function:

◆ neededLibraries()

List< char * > & Elf::neededLibraries ( )

Returns a list of required libraries before this object will load.

Definition at line 1267 of file linker/Elf.cc.

Referenced by DynamicLinker::loadObject(), and DynamicLinker::loadProgram().

+ Here is the caller graph for this function:

◆ operator=()

Elf & Elf::operator= ( const Elf &  )
private

The assignment operator

Note
currently not implemented

◆ populateSymbolTable()

void Elf::populateSymbolTable ( SymbolTable *  pSymtab,
uintptr_t  loadBase 
)

Adds all the symbols in this Elf into the given symbol table, adjusted by loadBase.

Parameters
pSymtabSymbol table to populate.
loadBaseOffset to adjust each value by.
Todo:
Don't rely on this. Look at nchain in the hash table.

Definition at line 1279 of file linker/Elf.cc.

References SymbolTable::insert(), and preallocateSymbols().

Referenced by loadModule().

+ Here is the caller graph for this function:

◆ preallocateSymbols()

void Elf::preallocateSymbols ( SymbolTable *  pSymtabOverride = nullptr,
SymbolTable *  pAdditionalSymtab = nullptr 
)

Preallocate space for the symbols in this ELF in the symbol table.

Definition at line 1326 of file linker/Elf.cc.

References SymbolTable::hasPreallocated(), SymbolTable::preallocate(), and SymbolTable::preallocateAdditional().

Referenced by allocate(), loadModule(), and populateSymbolTable().

+ Here is the caller graph for this function:

◆ rebaseDynamic()

void Elf::rebaseDynamic ( )
private

Rebase all dynamic section pointers to the m_LoadBase value.

Definition at line 1390 of file linker/Elf.cc.

Referenced by loadModule().

+ Here is the caller graph for this function:

◆ relocate()

bool Elf::relocate ( uint8_t *  pBuffer,
uintptr_t  length 
)
private

Definition at line 1138 of file linker/Elf.cc.

◆ relocateModinfo()

bool Elf::relocateModinfo ( uint8_t *  pBuffer,
uintptr_t  length 
)
private

Definition at line 1187 of file linker/Elf.cc.

◆ setName()

void Elf::setName ( const String &  s)
inline

Sets a friendly name for debugging.

Definition at line 384 of file Elf.h.

◆ validate()

bool Elf::validate ( uint8_t *  pBuffer,
size_t  length 
)

Validates the ELF object at the given location.

Definition at line 285 of file linker/Elf.cc.

◆ validateExecutableHeader()

Elf::ExecutableValidationResult Elf::validateExecutableHeader ( const uint8_t *  pBuffer,
size_t  length,
size_t  fileSize,
ExecutableMetadata &  metadata 
)
static

Validates an executable ELF header and reports the bounded metadata required to read its program header table.

Definition at line 82 of file Elf-validation.cc.

Referenced by PosixSubsystem::prepareExecutable().

+ Here is the caller graph for this function:

◆ validateExecutableInterpreter()

Elf::ExecutableValidationResult Elf::validateExecutableInterpreter ( const uint8_t *  pBuffer,
size_t  length,
const ExecutableMetadata &  metadata 
)
static

Validates the bounded PT_INTERP contents described by metadata.

Definition at line 241 of file Elf-validation.cc.

Referenced by PosixSubsystem::prepareExecutable().

+ Here is the caller graph for this function:

◆ validateExecutableProgramHeaders()

Elf::ExecutableValidationResult Elf::validateExecutableProgramHeaders ( const uint8_t *  pBuffer,
size_t  length,
size_t  fileSize,
ExecutableMetadata &  metadata 
)
static

Validates an executable's program headers and reports its load and interpreter metadata. The buffer begins at programHeaderOffset.

Definition at line 131 of file Elf-validation.cc.

Referenced by PosixSubsystem::loadElf(), and PosixSubsystem::prepareExecutable().

+ Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ ModuleImage

friend class ModuleImage
friend

Definition at line 205 of file Elf.h.

◆ PosixSubsystem

friend class PosixSubsystem
friend

Definition at line 204 of file Elf.h.

Member Data Documentation

◆ m_bUsesRela

bool Elf::m_bUsesRela
protected

Definition at line 569 of file Elf.h.

◆ m_FiniFunc

uintptr_t Elf::m_FiniFunc
protected

Definition at line 585 of file Elf.h.

◆ m_InitFunc

uintptr_t Elf::m_InitFunc
protected

Definition at line 584 of file Elf.h.

◆ m_LoadBase

uintptr_t Elf::m_LoadBase
protected

Definition at line 589 of file Elf.h.

◆ m_Name

String Elf::m_Name
protected

Definition at line 588 of file Elf.h.

◆ m_nDebugTableSize

size_t Elf::m_nDebugTableSize
protected

Definition at line 571 of file Elf.h.

◆ m_nDynamicStringTableSize

size_t Elf::m_nDynamicStringTableSize
protected

Definition at line 575 of file Elf.h.

◆ m_nDynamicSymbolTableSize

size_t Elf::m_nDynamicSymbolTableSize
protected

Definition at line 573 of file Elf.h.

◆ m_NeededLibraries

List<char*> Elf::m_NeededLibraries
protected

Definition at line 582 of file Elf.h.

◆ m_nEntry

uintptr_t Elf::m_nEntry
protected

Definition at line 581 of file Elf.h.

◆ m_nPltSize

size_t Elf::m_nPltSize
protected

Definition at line 580 of file Elf.h.

◆ m_nProgramHeaders

size_t Elf::m_nProgramHeaders
protected

Definition at line 579 of file Elf.h.

◆ m_nRelaTableSize

size_t Elf::m_nRelaTableSize
protected

Definition at line 566 of file Elf.h.

◆ m_nRelTableSize

size_t Elf::m_nRelTableSize
protected

Definition at line 565 of file Elf.h.

◆ m_nSectionHeaders

size_t Elf::m_nSectionHeaders
protected

Definition at line 577 of file Elf.h.

◆ m_nShstrtabSize

size_t Elf::m_nShstrtabSize
protected

Definition at line 561 of file Elf.h.

◆ m_nStringTableSize

size_t Elf::m_nStringTableSize
protected

Definition at line 559 of file Elf.h.

◆ m_nSymbolTableSize

size_t Elf::m_nSymbolTableSize
protected

Definition at line 557 of file Elf.h.

◆ m_pDebugTable

uint32_t* Elf::m_pDebugTable
protected

Definition at line 570 of file Elf.h.

◆ m_pDynamicStringTable

char* Elf::m_pDynamicStringTable
protected

Definition at line 574 of file Elf.h.

◆ m_pDynamicSymbolTable

ElfSymbol_t* Elf::m_pDynamicSymbolTable
protected

Definition at line 572 of file Elf.h.

◆ m_pGotTable

uintptr_t* Elf::m_pGotTable
protected

Definition at line 562 of file Elf.h.

◆ m_pPltRelaTable

ElfRela_t* Elf::m_pPltRelaTable
protected

Definition at line 568 of file Elf.h.

◆ m_pPltRelTable

ElfRel_t* Elf::m_pPltRelTable
protected

Definition at line 567 of file Elf.h.

◆ m_pProgramHeaders

ElfProgramHeader_t* Elf::m_pProgramHeaders
protected

Definition at line 578 of file Elf.h.

◆ m_pRelaTable

ElfRela_t* Elf::m_pRelaTable
protected

Definition at line 564 of file Elf.h.

◆ m_pRelTable

ElfRel_t* Elf::m_pRelTable
protected

Definition at line 563 of file Elf.h.

◆ m_pSectionHeaders

ElfSectionHeader_t* Elf::m_pSectionHeaders
protected

Definition at line 576 of file Elf.h.

◆ m_pShstrtab

char* Elf::m_pShstrtab
protected

Definition at line 560 of file Elf.h.

◆ m_pStringTable

char* Elf::m_pStringTable
protected

Definition at line 558 of file Elf.h.

◆ m_pSymbolTable

ElfSymbol_t* Elf::m_pSymbolTable
protected

Definition at line 556 of file Elf.h.

◆ m_sInterpreter

String Elf::m_sInterpreter
protected

Definition at line 586 of file Elf.h.

◆ m_SymbolTable

SymbolTable Elf::m_SymbolTable
protected

Definition at line 583 of file Elf.h.

◆ MaximumInterpreterSize

constexpr size_t Elf::MaximumInterpreterSize = 4096
staticconstexpr

Definition at line 235 of file Elf.h.

◆ MaximumProgramHeaderTableSize

constexpr size_t Elf::MaximumProgramHeaderTableSize = 65536
staticconstexpr

Definition at line 234 of file Elf.h.


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