[][src]Trait object::read::elf::FileHeader

pub trait FileHeader: Debug + Pod {
    type Word: Into<u64>;
    type Sword: Into<i64>;
    type Endian: Endian;
    type ProgramHeader: ProgramHeader<Endian = Self::Endian>;
    type SectionHeader: SectionHeader<Endian = Self::Endian>;
    type CompressionHeader: CompressionHeader<Endian = Self::Endian>;
    type NoteHeader: NoteHeader<Endian = Self::Endian>;
    type Sym: Sym<Endian = Self::Endian>;
    type Rel: Clone + Pod;
    type Rela: Rela<Endian = Self::Endian> + From<Self::Rel>;
    fn is_type_64(&self) -> bool;
fn e_ident(&self) -> &Ident;
fn e_type(&self, endian: Self::Endian) -> u16;
fn e_machine(&self, endian: Self::Endian) -> u16;
fn e_version(&self, endian: Self::Endian) -> u32;
fn e_entry(&self, endian: Self::Endian) -> Self::Word;
fn e_phoff(&self, endian: Self::Endian) -> Self::Word;
fn e_shoff(&self, endian: Self::Endian) -> Self::Word;
fn e_flags(&self, endian: Self::Endian) -> u32;
fn e_ehsize(&self, endian: Self::Endian) -> u16;
fn e_phentsize(&self, endian: Self::Endian) -> u16;
fn e_phnum(&self, endian: Self::Endian) -> u16;
fn e_shentsize(&self, endian: Self::Endian) -> u16;
fn e_shnum(&self, endian: Self::Endian) -> u16;
fn e_shstrndx(&self, endian: Self::Endian) -> u16; fn parse<'data>(data: Bytes<'data>) -> Result<&'data Self> { ... }
fn is_supported(&self) -> bool { ... }
fn is_class_32(&self) -> bool { ... }
fn is_class_64(&self) -> bool { ... }
fn is_little_endian(&self) -> bool { ... }
fn is_big_endian(&self) -> bool { ... }
fn endian(&self) -> Result<Self::Endian> { ... }
fn section_0<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<Option<&'data Self::SectionHeader>> { ... }
fn phnum<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<usize> { ... }
fn shnum<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<usize> { ... }
fn shstrndx<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<u32> { ... }
fn program_headers<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<&'data [Self::ProgramHeader]> { ... }
fn section_headers<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<&'data [Self::SectionHeader]> { ... }
fn section_strings<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>,
        sections: &[Self::SectionHeader]
    ) -> Result<StringTable<'data>> { ... }
fn sections<'data>(
        &self,
        endian: Self::Endian,
        data: Bytes<'data>
    ) -> Result<SectionTable<'data, Self>> { ... } }

A trait for generic access to FileHeader32 and FileHeader64.

Associated Types

type Word: Into<u64>

type Sword: Into<i64>

type Endian: Endian

type ProgramHeader: ProgramHeader<Endian = Self::Endian>

type SectionHeader: SectionHeader<Endian = Self::Endian>

type CompressionHeader: CompressionHeader<Endian = Self::Endian>

type NoteHeader: NoteHeader<Endian = Self::Endian>

type Sym: Sym<Endian = Self::Endian>

type Rel: Clone + Pod

type Rela: Rela<Endian = Self::Endian> + From<Self::Rel>

Loading content...

Required methods

fn is_type_64(&self) -> bool

Return true if this type is a 64-bit header.

This is a property of the type, not a value in the header data.

fn e_ident(&self) -> &Ident

fn e_type(&self, endian: Self::Endian) -> u16

fn e_machine(&self, endian: Self::Endian) -> u16

fn e_version(&self, endian: Self::Endian) -> u32

fn e_entry(&self, endian: Self::Endian) -> Self::Word

fn e_phoff(&self, endian: Self::Endian) -> Self::Word

fn e_shoff(&self, endian: Self::Endian) -> Self::Word

fn e_flags(&self, endian: Self::Endian) -> u32

fn e_ehsize(&self, endian: Self::Endian) -> u16

fn e_phentsize(&self, endian: Self::Endian) -> u16

fn e_phnum(&self, endian: Self::Endian) -> u16

fn e_shentsize(&self, endian: Self::Endian) -> u16

fn e_shnum(&self, endian: Self::Endian) -> u16

fn e_shstrndx(&self, endian: Self::Endian) -> u16

Loading content...

Provided methods

fn parse<'data>(data: Bytes<'data>) -> Result<&'data Self>

Read the file header.

Also checks that the ident field in the file header is a supported format.

fn is_supported(&self) -> bool

Check that the ident field in the file header is a supported format.

This checks the magic number, version, class, and endianness.

fn is_class_32(&self) -> bool

fn is_class_64(&self) -> bool

fn is_little_endian(&self) -> bool

fn is_big_endian(&self) -> bool

fn endian(&self) -> Result<Self::Endian>

fn section_0<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<Option<&'data Self::SectionHeader>>

Return the first section header, if present.

Section 0 is a special case because getting the section headers normally requires shnum, but shnum may be in the first section header.

fn phnum<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<usize>

Return the e_phnum field of the header. Handles extended values.

Returns Err for invalid values.

fn shnum<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<usize>

Return the e_shnum field of the header. Handles extended values.

Returns Err for invalid values.

fn shstrndx<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<u32>

Return the e_shstrndx field of the header. Handles extended values.

Returns Err for invalid values (including if the index is 0).

fn program_headers<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<&'data [Self::ProgramHeader]>

Return the slice of program headers.

Returns Ok(&[]) if there are no program headers. Returns Err for invalid values.

fn section_headers<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<&'data [Self::SectionHeader]>

Return the slice of section headers.

Returns Ok(&[]) if there are no section headers. Returns Err for invalid values.

fn section_strings<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>,
    sections: &[Self::SectionHeader]
) -> Result<StringTable<'data>>

Return the string table for the section headers.

fn sections<'data>(
    &self,
    endian: Self::Endian,
    data: Bytes<'data>
) -> Result<SectionTable<'data, Self>>

Return the section table.

Loading content...

Implementors

impl<Endian: Endian> FileHeader for FileHeader32<Endian>[src]

type Word = u32

type Sword = i32

type Endian = Endian

type ProgramHeader = ProgramHeader32<Endian>

type SectionHeader = SectionHeader32<Endian>

type CompressionHeader = CompressionHeader32<Endian>

type NoteHeader = NoteHeader32<Endian>

type Sym = Sym32<Endian>

type Rel = Rel32<Endian>

type Rela = Rela32<Endian>

impl<Endian: Endian> FileHeader for FileHeader64<Endian>[src]

type Word = u64

type Sword = i64

type Endian = Endian

type ProgramHeader = ProgramHeader64<Endian>

type SectionHeader = SectionHeader64<Endian>

type CompressionHeader = CompressionHeader64<Endian>

type NoteHeader = NoteHeader32<Endian>

type Sym = Sym64<Endian>

type Rel = Rel64<Endian>

type Rela = Rela64<Endian>

Loading content...