goblin::mach

Struct MachO

Source
pub struct MachO<'a> {
    pub header: Header,
    pub load_commands: Vec<LoadCommand>,
    pub segments: Segments<'a>,
    pub symbols: Option<Symbols<'a>>,
    pub libs: Vec<&'a str>,
    pub rpaths: Vec<&'a str>,
    pub entry: u64,
    pub old_style_entry: bool,
    pub name: Option<&'a str>,
    pub little_endian: bool,
    pub is_64: bool,
    /* private fields */
}
Expand description

A cross-platform, zero-copy, endian-aware, 32/64 bit Mach-o binary parser

Fields§

§header: Header

The mach-o header

§load_commands: Vec<LoadCommand>

The load commands tell the kernel and dynamic linker how to use/interpret this binary

§segments: Segments<'a>

The load command “segments” - typically the pieces of the binary that are loaded into memory

§symbols: Option<Symbols<'a>>

The “Nlist” style symbols in this binary - strippable

§libs: Vec<&'a str>

The dylibs this library depends on

§rpaths: Vec<&'a str>

The runtime search paths for dylibs this library depends on

§entry: u64

The entry point (as a virtual memory address), 0 if none

§old_style_entry: bool

Whether entry refers to an older LC_UNIXTHREAD instead of the newer LC_MAIN entrypoint

§name: Option<&'a str>

The name of the dylib, if any

§little_endian: bool

Are we a little-endian binary?

§is_64: bool

Are we a 64-bit binary

Implementations§

Source§

impl<'a> MachO<'a>

Source

pub fn is_object_file(&self) -> bool

Is this a relocatable object file?

Source

pub fn symbols(&self) -> SymbolIterator<'a>

Return an iterator over all the symbols in this binary

Source

pub fn relocations( &self, ) -> Result<Vec<(usize, RelocationIterator<'_>, Section)>>

Return a vector of the relocations in this binary

Source

pub fn exports(&self) -> Result<Vec<Export<'_>>>

Return the exported symbols in this binary (if any)

Source

pub fn imports(&self) -> Result<Vec<Import<'_>>>

Return the imported symbols in this binary that dyld knows about (if any)

Source

pub fn parse(bytes: &'a [u8], offset: usize) -> Result<MachO<'a>>

Parses the Mach-o binary from bytes at offset

Source

pub fn parse_lossy(bytes: &'a [u8], offset: usize) -> Result<MachO<'a>>

Parses the Mach-o binary from bytes at offset in lossy mode

Trait Implementations§

Source§

impl<'a> Debug for MachO<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for MachO<'a>

§

impl<'a> RefUnwindSafe for MachO<'a>

§

impl<'a> Send for MachO<'a>

§

impl<'a> Sync for MachO<'a>

§

impl<'a> Unpin for MachO<'a>

§

impl<'a> UnwindSafe for MachO<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.