pub struct ElfFile<'data, Elf, R = &'data [u8]>where
Elf: FileHeader,
R: ReadRef<'data>,{
pub(super) endian: Elf::Endian,
pub(super) data: R,
pub(super) header: &'data Elf,
pub(super) segments: &'data [Elf::ProgramHeader],
pub(super) sections: SectionTable<'data, Elf, R>,
pub(super) relocations: RelocationSections,
pub(super) symbols: SymbolTable<'data, Elf, R>,
pub(super) dynamic_symbols: SymbolTable<'data, Elf, R>,
}
Expand description
A partially parsed ELF file.
Most functionality is provided by the Object
trait implementation.
Fields§
§endian: Elf::Endian
§data: R
§header: &'data Elf
§segments: &'data [Elf::ProgramHeader]
§sections: SectionTable<'data, Elf, R>
§relocations: RelocationSections
§symbols: SymbolTable<'data, Elf, R>
§dynamic_symbols: SymbolTable<'data, Elf, R>
Implementations§
source§impl<'data, Elf, R> ElfFile<'data, Elf, R>where
Elf: FileHeader,
R: ReadRef<'data>,
impl<'data, Elf, R> ElfFile<'data, Elf, R>where
Elf: FileHeader,
R: ReadRef<'data>,
sourcepub fn raw_header(&self) -> &'data Elf
👎Deprecated: Use elf_header
instead
pub fn raw_header(&self) -> &'data Elf
elf_header
insteadReturns the raw ELF file header.
sourcepub fn raw_segments(&self) -> &'data [Elf::ProgramHeader]
👎Deprecated: Use elf_program_headers
instead
pub fn raw_segments(&self) -> &'data [Elf::ProgramHeader]
elf_program_headers
insteadReturns the raw ELF segments.
sourcepub fn elf_header(&self) -> &'data Elf
pub fn elf_header(&self) -> &'data Elf
Get the raw ELF file header.
sourcepub fn elf_program_headers(&self) -> &'data [Elf::ProgramHeader]
pub fn elf_program_headers(&self) -> &'data [Elf::ProgramHeader]
Get the raw ELF program headers.
Returns an empty slice if the file has no program headers.
sourcepub fn elf_section_table(&self) -> &SectionTable<'data, Elf, R>
pub fn elf_section_table(&self) -> &SectionTable<'data, Elf, R>
Get the ELF section table.
Returns an empty section table if the file has no section headers.
sourcepub fn elf_symbol_table(&self) -> &SymbolTable<'data, Elf, R>
pub fn elf_symbol_table(&self) -> &SymbolTable<'data, Elf, R>
Get the ELF symbol table.
Returns an empty symbol table if the file has no symbol table.
sourcepub fn elf_dynamic_symbol_table(&self) -> &SymbolTable<'data, Elf, R>
pub fn elf_dynamic_symbol_table(&self) -> &SymbolTable<'data, Elf, R>
Get the ELF dynamic symbol table.
Returns an empty symbol table if the file has no dynamic symbol table.
sourcepub fn elf_relocation_sections(&self) -> &RelocationSections
pub fn elf_relocation_sections(&self) -> &RelocationSections
Get a mapping for linked relocation sections.
fn raw_section_by_name<'file>( &'file self, section_name: &[u8], ) -> Option<ElfSection<'data, 'file, Elf, R>>
fn zdebug_section_by_name<'file>( &'file self, _section_name: &[u8], ) -> Option<ElfSection<'data, 'file, Elf, R>>
Trait Implementations§
source§impl<'data, Elf, R> Debug for ElfFile<'data, Elf, R>where
Elf: FileHeader + Debug,
R: ReadRef<'data> + Debug,
Elf::Endian: Debug,
Elf::ProgramHeader: Debug,
impl<'data, Elf, R> Debug for ElfFile<'data, Elf, R>where
Elf: FileHeader + Debug,
R: ReadRef<'data> + Debug,
Elf::Endian: Debug,
Elf::ProgramHeader: Debug,
source§impl<'data, Elf, R> Object<'data> for ElfFile<'data, Elf, R>where
Elf: FileHeader,
R: ReadRef<'data>,
impl<'data, Elf, R> Object<'data> for ElfFile<'data, Elf, R>where
Elf: FileHeader,
R: ReadRef<'data>,
§type Segment<'file> = ElfSegment<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type Segment<'file> = ElfSegment<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
A loadable segment in the object file.
§type SegmentIterator<'file> = ElfSegmentIterator<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type SegmentIterator<'file> = ElfSegmentIterator<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
An iterator for the loadable segments in the object file.
§type Section<'file> = ElfSection<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type Section<'file> = ElfSection<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
A section in the object file.
§type SectionIterator<'file> = ElfSectionIterator<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type SectionIterator<'file> = ElfSectionIterator<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
An iterator for the sections in the object file.
§type Comdat<'file> = ElfComdat<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type Comdat<'file> = ElfComdat<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
A COMDAT section group in the object file.
§type ComdatIterator<'file> = ElfComdatIterator<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type ComdatIterator<'file> = ElfComdatIterator<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
An iterator for the COMDAT section groups in the object file.
§type Symbol<'file> = ElfSymbol<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type Symbol<'file> = ElfSymbol<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
A symbol in the object file.
§type SymbolIterator<'file> = ElfSymbolIterator<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type SymbolIterator<'file> = ElfSymbolIterator<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
An iterator for symbols in the object file.
§type SymbolTable<'file> = ElfSymbolTable<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type SymbolTable<'file> = ElfSymbolTable<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
A symbol table in the object file.
§type DynamicRelocationIterator<'file> = ElfDynamicRelocationIterator<'data, 'file, Elf, R>
where
Self: 'file,
'data: 'file
type DynamicRelocationIterator<'file> = ElfDynamicRelocationIterator<'data, 'file, Elf, R> where Self: 'file, 'data: 'file
An iterator for the dynamic relocations in the file. Read more
source§fn architecture(&self) -> Architecture
fn architecture(&self) -> Architecture
Get the architecture type of the file.
source§fn is_little_endian(&self) -> bool
fn is_little_endian(&self) -> bool
Return true if the file is little endian, false if it is big endian.
source§fn kind(&self) -> ObjectKind
fn kind(&self) -> ObjectKind
Return the kind of this object.
source§fn segments(&self) -> ElfSegmentIterator<'data, '_, Elf, R> ⓘ
fn segments(&self) -> ElfSegmentIterator<'data, '_, Elf, R> ⓘ
Get an iterator for the loadable segments in the file. Read more
source§fn section_by_name_bytes<'file>(
&'file self,
section_name: &[u8],
) -> Option<ElfSection<'data, 'file, Elf, R>>
fn section_by_name_bytes<'file>( &'file self, section_name: &[u8], ) -> Option<ElfSection<'data, 'file, Elf, R>>
Like
Self::section_by_name
, but allows names that are not UTF-8.source§fn section_by_index(
&self,
index: SectionIndex,
) -> Result<ElfSection<'data, '_, Elf, R>>
fn section_by_index( &self, index: SectionIndex, ) -> Result<ElfSection<'data, '_, Elf, R>>
Get the section at the given index. Read more
source§fn sections(&self) -> ElfSectionIterator<'data, '_, Elf, R> ⓘ
fn sections(&self) -> ElfSectionIterator<'data, '_, Elf, R> ⓘ
Get an iterator for the sections in the file.
source§fn comdats(&self) -> ElfComdatIterator<'data, '_, Elf, R> ⓘ
fn comdats(&self) -> ElfComdatIterator<'data, '_, Elf, R> ⓘ
Get an iterator for the COMDAT section groups in the file.
source§fn symbol_by_index(
&self,
index: SymbolIndex,
) -> Result<ElfSymbol<'data, '_, Elf, R>>
fn symbol_by_index( &self, index: SymbolIndex, ) -> Result<ElfSymbol<'data, '_, Elf, R>>
Get the debugging symbol at the given index. Read more
source§fn symbols(&self) -> ElfSymbolIterator<'data, '_, Elf, R> ⓘ
fn symbols(&self) -> ElfSymbolIterator<'data, '_, Elf, R> ⓘ
Get an iterator for the debugging symbols in the file. Read more
source§fn symbol_table(&self) -> Option<ElfSymbolTable<'data, '_, Elf, R>>
fn symbol_table(&self) -> Option<ElfSymbolTable<'data, '_, Elf, R>>
Get the debugging symbol table, if any.
source§fn dynamic_symbols(&self) -> ElfSymbolIterator<'data, '_, Elf, R> ⓘ
fn dynamic_symbols(&self) -> ElfSymbolIterator<'data, '_, Elf, R> ⓘ
Get an iterator for the dynamic linking symbols in the file. Read more
source§fn dynamic_symbol_table(&self) -> Option<ElfSymbolTable<'data, '_, Elf, R>>
fn dynamic_symbol_table(&self) -> Option<ElfSymbolTable<'data, '_, Elf, R>>
Get the dynamic linking symbol table, if any. Read more
source§fn dynamic_relocations<'file>(
&'file self,
) -> Option<ElfDynamicRelocationIterator<'data, 'file, Elf, R>>
fn dynamic_relocations<'file>( &'file self, ) -> Option<ElfDynamicRelocationIterator<'data, 'file, Elf, R>>
Get the dynamic relocations for this file. Read more
source§fn exports(&self) -> Result<Vec<Export<'data>>>
fn exports(&self) -> Result<Vec<Export<'data>>>
Get the exported symbols that expose both a name and an address. Read more
source§fn has_debug_symbols(&self) -> bool
fn has_debug_symbols(&self) -> bool
Return true if the file contains DWARF debug information sections, false if not.
source§fn build_id(&self) -> Result<Option<&'data [u8]>>
fn build_id(&self) -> Result<Option<&'data [u8]>>
The build ID from an ELF
NT_GNU_BUILD_ID
note.source§fn gnu_debuglink(&self) -> Result<Option<(&'data [u8], u32)>>
fn gnu_debuglink(&self) -> Result<Option<(&'data [u8], u32)>>
The filename and CRC from a
.gnu_debuglink
section.source§fn gnu_debugaltlink(&self) -> Result<Option<(&'data [u8], &'data [u8])>>
fn gnu_debugaltlink(&self) -> Result<Option<(&'data [u8], &'data [u8])>>
The filename and build ID from a
.gnu_debugaltlink
section.source§fn relative_address_base(&self) -> u64
fn relative_address_base(&self) -> u64
Get the base address used for relative virtual addresses. Read more
source§fn sub_architecture(&self) -> Option<SubArchitecture>
fn sub_architecture(&self) -> Option<SubArchitecture>
Get the sub-architecture type of the file if known. Read more
source§fn endianness(&self) -> Endianness
fn endianness(&self) -> Endianness
Get the endianness of the file.
source§fn section_by_name(&self, section_name: &str) -> Option<Self::Section<'_>>
fn section_by_name(&self, section_name: &str) -> Option<Self::Section<'_>>
Get the section named
section_name
, if such a section exists. Read moresource§fn symbol_by_name<'file>(
&'file self,
symbol_name: &str,
) -> Option<Self::Symbol<'file>>
fn symbol_by_name<'file>( &'file self, symbol_name: &str, ) -> Option<Self::Symbol<'file>>
Get the symbol named
symbol_name
, if the symbol exists.source§fn symbol_by_name_bytes<'file>(
&'file self,
symbol_name: &[u8],
) -> Option<Self::Symbol<'file>>
fn symbol_by_name_bytes<'file>( &'file self, symbol_name: &[u8], ) -> Option<Self::Symbol<'file>>
Like
Self::symbol_by_name
, but allows names that are not UTF-8.source§fn symbol_map(&self) -> SymbolMap<SymbolMapName<'data>>
fn symbol_map(&self) -> SymbolMap<SymbolMapName<'data>>
Construct a map from addresses to symbol names. Read more
source§fn object_map(&self) -> ObjectMap<'data>
fn object_map(&self) -> ObjectMap<'data>
Construct a map from addresses to symbol names and object file names. Read more
impl<'data, Elf, R> Sealed for ElfFile<'data, Elf, R>where
Elf: FileHeader,
R: ReadRef<'data>,
Auto Trait Implementations§
impl<'data, Elf, R> Freeze for ElfFile<'data, Elf, R>
impl<'data, Elf, R> RefUnwindSafe for ElfFile<'data, Elf, R>where
<Elf as FileHeader>::Endian: RefUnwindSafe,
R: RefUnwindSafe,
Elf: RefUnwindSafe,
<Elf as FileHeader>::ProgramHeader: RefUnwindSafe,
<Elf as FileHeader>::SectionHeader: RefUnwindSafe,
<Elf as FileHeader>::Sym: RefUnwindSafe,
impl<'data, Elf, R> Send for ElfFile<'data, Elf, R>where
<Elf as FileHeader>::Endian: Send + Sync,
R: Send,
Elf: Sync,
<Elf as FileHeader>::ProgramHeader: Sync,
<Elf as FileHeader>::SectionHeader: Sync,
<Elf as FileHeader>::Sym: Sync,
impl<'data, Elf, R> Sync for ElfFile<'data, Elf, R>where
<Elf as FileHeader>::Endian: Sync,
R: Sync,
Elf: Sync,
<Elf as FileHeader>::ProgramHeader: Sync,
<Elf as FileHeader>::SectionHeader: Sync,
<Elf as FileHeader>::Sym: Sync,
impl<'data, Elf, R> Unpin for ElfFile<'data, Elf, R>
impl<'data, Elf, R> UnwindSafe for ElfFile<'data, Elf, R>where
<Elf as FileHeader>::Endian: UnwindSafe + RefUnwindSafe,
R: UnwindSafe,
Elf: RefUnwindSafe,
<Elf as FileHeader>::ProgramHeader: RefUnwindSafe,
<Elf as FileHeader>::SectionHeader: RefUnwindSafe,
<Elf as FileHeader>::Sym: RefUnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more