Struct object::write::Object[][src]

pub struct Object {
    pub flags: FileFlags,
    pub mangling: Mangling,
    // some fields omitted
}
Expand description

A writable object file.

Fields

flags: FileFlags

File flags that are specific to each file format.

mangling: Mangling

The symbol name mangling scheme.

Implementations

impl Object[src]

pub fn new(
    format: BinaryFormat,
    architecture: Architecture,
    endian: Endianness
) -> Object
[src]

Create an empty object file.

pub fn format(&self) -> BinaryFormat[src]

Return the file format.

pub fn architecture(&self) -> Architecture[src]

Return the architecture.

pub fn mangling(&self) -> Mangling[src]

Return the current mangling setting.

pub fn set_mangling(&mut self, mangling: Mangling)[src]

Specify the mangling setting.

pub fn segment_name(&self, segment: StandardSegment) -> &'static [u8][src]

Return the name for a standard segment.

This will vary based on the file format.

pub fn section(&self, section: SectionId) -> &Section[src]

Get the section with the given SectionId.

pub fn section_mut(&mut self, section: SectionId) -> &mut Section[src]

Mutably get the section with the given SectionId.

pub fn append_section_data(
    &mut self,
    section: SectionId,
    data: &[u8],
    align: u64
) -> u64
[src]

Append data to an existing section. Returns the section offset of the data.

pub fn append_section_bss(
    &mut self,
    section: SectionId,
    size: u64,
    align: u64
) -> u64
[src]

Append zero-initialized data to an existing section. Returns the section offset of the data.

pub fn section_id(&mut self, section: StandardSection) -> SectionId[src]

Return the SectionId of a standard section.

If the section doesn’t already exist then it is created.

pub fn add_section(
    &mut self,
    segment: Vec<u8>,
    name: Vec<u8>,
    kind: SectionKind
) -> SectionId
[src]

Add a new section and return its SectionId.

This also creates a section symbol.

pub fn add_subsection(
    &mut self,
    section: StandardSection,
    name: &[u8],
    data: &[u8],
    align: u64
) -> (SectionId, u64)
[src]

Add a subsection. Returns the SectionId and section offset of the data.

pub fn comdat(&self, comdat: ComdatId) -> &Comdat[src]

Get the COMDAT section group with the given ComdatId.

pub fn comdat_mut(&mut self, comdat: ComdatId) -> &mut Comdat[src]

Mutably get the COMDAT section group with the given ComdatId.

pub fn add_comdat(&mut self, comdat: Comdat) -> ComdatId[src]

Add a new COMDAT section group and return its ComdatId.

pub fn symbol_id(&self, name: &[u8]) -> Option<SymbolId>[src]

Get the SymbolId of the symbol with the given name.

pub fn symbol(&self, symbol: SymbolId) -> &Symbol[src]

Get the symbol with the given SymbolId.

pub fn symbol_mut(&mut self, symbol: SymbolId) -> &mut Symbol[src]

Mutably get the symbol with the given SymbolId.

pub fn add_symbol(&mut self, symbol: Symbol) -> SymbolId[src]

Add a new symbol and return its SymbolId.

pub fn has_uninitialized_tls(&self) -> bool[src]

Return true if the file format supports StandardSection::UninitializedTls.

pub fn has_common(&self) -> bool[src]

Return true if the file format supports StandardSection::Common.

pub fn add_common_symbol(
    &mut self,
    symbol: Symbol,
    size: u64,
    align: u64
) -> SymbolId
[src]

Add a new common symbol and return its SymbolId.

For Mach-O, this appends the symbol to the __common section.

pub fn add_file_symbol(&mut self, name: Vec<u8>) -> SymbolId[src]

Add a new file symbol and return its SymbolId.

pub fn section_symbol(&mut self, section_id: SectionId) -> SymbolId[src]

Get the symbol for a section.

pub fn add_symbol_data(
    &mut self,
    symbol_id: SymbolId,
    section: SectionId,
    data: &[u8],
    align: u64
) -> u64
[src]

Append data to an existing section, and update a symbol to refer to it.

For Mach-O, this also creates a __thread_vars entry for TLS symbols, and the symbol will indirectly point to the added data via the __thread_vars entry.

Returns the section offset of the data.

pub fn add_symbol_bss(
    &mut self,
    symbol_id: SymbolId,
    section: SectionId,
    size: u64,
    align: u64
) -> u64
[src]

Append zero-initialized data to an existing section, and update a symbol to refer to it.

For Mach-O, this also creates a __thread_vars entry for TLS symbols, and the symbol will indirectly point to the added data via the __thread_vars entry.

Returns the section offset of the data.

pub fn set_symbol_data(
    &mut self,
    symbol_id: SymbolId,
    section: SectionId,
    offset: u64,
    size: u64
)
[src]

Update a symbol to refer to the given data within a section.

For Mach-O, this also creates a __thread_vars entry for TLS symbols, and the symbol will indirectly point to the data via the __thread_vars entry.

pub fn symbol_section_and_offset(
    &mut self,
    symbol_id: SymbolId
) -> Option<(SymbolId, u64)>
[src]

Convert a symbol to a section symbol and offset.

Returns None if the symbol does not have a section.

pub fn add_relocation(
    &mut self,
    section: SectionId,
    relocation: Relocation
) -> Result<()>
[src]

Add a relocation to a section.

Relocations must only be added after the referenced symbols have been added and defined (if applicable).

pub fn write(&self) -> Result<Vec<u8>>[src]

Write the object to a Vec.

pub fn emit(&self, buffer: &mut dyn WritableBuffer) -> Result<()>[src]

Write the object to a WritableBuffer.

Trait Implementations

impl Debug for Object[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl RefUnwindSafe for Object

impl Send for Object

impl Sync for Object

impl Unpin for Object

impl UnwindSafe for Object

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.