pub struct SectionTable<'data, Elf: FileHeader, R = &'data [u8]>where
R: ReadRef<'data>,{
sections: &'data [Elf::SectionHeader],
strings: StringTable<'data, R>,
}
Expand description
The table of section headers in an ELF file.
Also includes the string table used for the section names.
Returned by FileHeader::sections
.
Fields§
§sections: &'data [Elf::SectionHeader]
§strings: StringTable<'data, R>
Implementations§
source§impl<'data, Elf: FileHeader, R: ReadRef<'data>> SectionTable<'data, Elf, R>
impl<'data, Elf: FileHeader, R: ReadRef<'data>> SectionTable<'data, Elf, R>
sourcepub fn new(
sections: &'data [Elf::SectionHeader],
strings: StringTable<'data, R>,
) -> Self
pub fn new( sections: &'data [Elf::SectionHeader], strings: StringTable<'data, R>, ) -> Self
Create a new section table.
sourcepub fn iter(&self) -> Iter<'data, Elf::SectionHeader>
pub fn iter(&self) -> Iter<'data, Elf::SectionHeader>
Iterate over the section headers.
This includes the null section at index 0, which you will usually need to skip.
sourcepub fn enumerate(
&self,
) -> impl Iterator<Item = (SectionIndex, &'data Elf::SectionHeader)>
pub fn enumerate( &self, ) -> impl Iterator<Item = (SectionIndex, &'data Elf::SectionHeader)>
Iterate over the section headers and their indices.
This includes the null section at index 0, which you will usually need to skip.
sourcepub fn section(&self, index: SectionIndex) -> Result<&'data Elf::SectionHeader>
pub fn section(&self, index: SectionIndex) -> Result<&'data Elf::SectionHeader>
Get the section header at the given index.
Returns an error for the null section at index 0.
sourcepub fn section_by_name(
&self,
endian: Elf::Endian,
name: &[u8],
) -> Option<(SectionIndex, &'data Elf::SectionHeader)>
pub fn section_by_name( &self, endian: Elf::Endian, name: &[u8], ) -> Option<(SectionIndex, &'data Elf::SectionHeader)>
Return the section header with the given name.
Ignores sections with invalid names.
sourcepub fn section_name(
&self,
endian: Elf::Endian,
section: &Elf::SectionHeader,
) -> Result<&'data [u8]>
pub fn section_name( &self, endian: Elf::Endian, section: &Elf::SectionHeader, ) -> Result<&'data [u8]>
Return the section name for the given section header.
sourcepub fn strings(
&self,
endian: Elf::Endian,
data: R,
index: SectionIndex,
) -> Result<StringTable<'data, R>>
pub fn strings( &self, endian: Elf::Endian, data: R, index: SectionIndex, ) -> Result<StringTable<'data, R>>
Return the string table at the given section index.
Returns an empty string table if the index is 0. Returns an error if the section is not a string table.
sourcepub fn symbols(
&self,
endian: Elf::Endian,
data: R,
sh_type: u32,
) -> Result<SymbolTable<'data, Elf, R>>
pub fn symbols( &self, endian: Elf::Endian, data: R, sh_type: u32, ) -> Result<SymbolTable<'data, Elf, R>>
Return the symbol table of the given section type.
Returns an empty symbol table if the symbol table does not exist.
sourcepub fn symbol_table_by_index(
&self,
endian: Elf::Endian,
data: R,
index: SectionIndex,
) -> Result<SymbolTable<'data, Elf, R>>
pub fn symbol_table_by_index( &self, endian: Elf::Endian, data: R, index: SectionIndex, ) -> Result<SymbolTable<'data, Elf, R>>
Return the symbol table at the given section index.
Returns an error if the section is not a symbol table.
sourcepub fn relocation_sections(
&self,
endian: Elf::Endian,
symbol_section: SectionIndex,
) -> Result<RelocationSections>
pub fn relocation_sections( &self, endian: Elf::Endian, symbol_section: SectionIndex, ) -> Result<RelocationSections>
Create a mapping from section index to associated relocation sections.
sourcepub fn dynamic(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(&'data [Elf::Dyn], SectionIndex)>>
pub fn dynamic( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(&'data [Elf::Dyn], SectionIndex)>>
Return the contents of a dynamic section.
Also returns the linked string table index.
Returns Ok(None)
if there is no SHT_DYNAMIC
section.
Returns Err
for invalid values.
sourcepub fn hash_header(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<&'data HashHeader<Elf::Endian>>>
pub fn hash_header( &self, endian: Elf::Endian, data: R, ) -> Result<Option<&'data HashHeader<Elf::Endian>>>
Return the header of a SysV hash section.
Returns Ok(None)
if there is no SysV GNU hash section.
Returns Err
for invalid values.
sourcepub fn hash(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(HashTable<'data, Elf>, SectionIndex)>>
pub fn hash( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(HashTable<'data, Elf>, SectionIndex)>>
Return the contents of a SysV hash section.
Also returns the linked symbol table index.
Returns Ok(None)
if there is no SysV hash section.
Returns Err
for invalid values.
sourcepub fn gnu_hash_header(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<&'data GnuHashHeader<Elf::Endian>>>
pub fn gnu_hash_header( &self, endian: Elf::Endian, data: R, ) -> Result<Option<&'data GnuHashHeader<Elf::Endian>>>
Return the header of a GNU hash section.
Returns Ok(None)
if there is no GNU hash section.
Returns Err
for invalid values.
sourcepub fn gnu_hash(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(GnuHashTable<'data, Elf>, SectionIndex)>>
pub fn gnu_hash( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(GnuHashTable<'data, Elf>, SectionIndex)>>
Return the contents of a GNU hash section.
Also returns the linked symbol table index.
Returns Ok(None)
if there is no GNU hash section.
Returns Err
for invalid values.
sourcepub fn gnu_versym(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(&'data [Versym<Elf::Endian>], SectionIndex)>>
pub fn gnu_versym( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(&'data [Versym<Elf::Endian>], SectionIndex)>>
Return the contents of a SHT_GNU_VERSYM
section.
Also returns the linked symbol table index.
Returns Ok(None)
if there is no SHT_GNU_VERSYM
section.
Returns Err
for invalid values.
sourcepub fn gnu_verdef(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(VerdefIterator<'data, Elf>, SectionIndex)>>
pub fn gnu_verdef( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(VerdefIterator<'data, Elf>, SectionIndex)>>
Return the contents of a SHT_GNU_VERDEF
section.
Also returns the linked string table index.
Returns Ok(None)
if there is no SHT_GNU_VERDEF
section.
Returns Err
for invalid values.
sourcepub fn gnu_verneed(
&self,
endian: Elf::Endian,
data: R,
) -> Result<Option<(VerneedIterator<'data, Elf>, SectionIndex)>>
pub fn gnu_verneed( &self, endian: Elf::Endian, data: R, ) -> Result<Option<(VerneedIterator<'data, Elf>, SectionIndex)>>
Return the contents of a SHT_GNU_VERNEED
section.
Also returns the linked string table index.
Returns Ok(None)
if there is no SHT_GNU_VERNEED
section.
Returns Err
for invalid values.
Trait Implementations§
source§impl<'data, Elf: Clone + FileHeader, R> Clone for SectionTable<'data, Elf, R>
impl<'data, Elf: Clone + FileHeader, R> Clone for SectionTable<'data, Elf, R>
source§fn clone(&self) -> SectionTable<'data, Elf, R>
fn clone(&self) -> SectionTable<'data, Elf, R>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'data, Elf: Debug + FileHeader, R> Debug for SectionTable<'data, Elf, R>
impl<'data, Elf: Debug + FileHeader, R> Debug for SectionTable<'data, Elf, R>
source§impl<'data, Elf: FileHeader, R: ReadRef<'data>> Default for SectionTable<'data, Elf, R>
impl<'data, Elf: FileHeader, R: ReadRef<'data>> Default for SectionTable<'data, Elf, R>
impl<'data, Elf: Copy + FileHeader, R> Copy for SectionTable<'data, Elf, R>
Auto Trait Implementations§
impl<'data, Elf, R> Freeze for SectionTable<'data, Elf, R>where
R: Freeze,
impl<'data, Elf, R> RefUnwindSafe for SectionTable<'data, Elf, R>
impl<'data, Elf, R> Send for SectionTable<'data, Elf, R>
impl<'data, Elf, R> Sync for SectionTable<'data, Elf, R>
impl<'data, Elf, R> Unpin for SectionTable<'data, Elf, R>where
R: Unpin,
impl<'data, Elf, R> UnwindSafe for SectionTable<'data, Elf, R>
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)