Skip to main content

ElfLibrary

Struct ElfLibrary 

Source
pub struct ElfLibrary { /* private fields */ }
Expand description

Represents a successfully loaded and relocated dynamic library.

This is the primary interface for interacting with a loaded library, providing methods to look up symbols and inspect metadata.

Implementations§

Source§

impl ElfLibrary

Source

pub fn dl_iterate_phdr<F>(callback: F) -> Result<()>
where F: FnMut(&DlPhdrInfo<'_>) -> Result<()>,

Iterate over the program headers of all dynamic libraries.

Source§

impl ElfLibrary

Source

pub fn dladdr(addr: usize) -> Option<DlInfo>

determines whether the address specified in addr is located in one of the shared objects loaded by the calling application. If it is, then dladdr returns information about the shared object and symbol that overlaps addr.

Source§

impl ElfLibrary

Source

pub fn this() -> ElfLibrary

Get the main executable as an ElfLibrary. It is the same as dlopen(NULL, RTLD_NOW).

Source

pub fn dlopen(path: impl AsFilename, flags: OpenFlags) -> Result<ElfLibrary>

Load a shared library from a specified path. It is the same as dlopen.

§Example

let path = "/path/to/library.so";
let lib = ElfLibrary::dlopen(path, OpenFlags::RTLD_LOCAL).expect("Failed to load library");
Source

pub fn dlopen_from_binary( bytes: &[u8], path: impl AsFilename, flags: OpenFlags, ) -> Result<ElfLibrary>

Load a shared library from bytes. It is the same as dlopen. However, it can also be used in the no_std environment, and it will look for dependent libraries in those manually opened dynamic libraries.

Source§

impl ElfLibrary

Source

pub fn name(&self) -> &str

Get the name of the dynamic library.

Source

pub fn cname(&self) -> *const c_char

Get the C-style name of the dynamic library.

Source

pub fn shortname(&self) -> &str

Get the short name of the dynamic library.

Source

pub fn flags(&self) -> OpenFlags

Get the current flags of the dynamic library from the global registry.

Source

pub fn base(&self) -> usize

Get the base address of the dynamic library.

Source

pub fn mapped_len(&self) -> usize

Gets the memory length of the elf object map.

Source

pub fn phdrs(&self) -> Option<&[ElfPhdr]>

Get the program headers of the dynamic library.

Source

pub fn needed_libs(&self) -> &[String]

Get the needed libs’ name of the elf object.

Source

pub unsafe fn get<'lib, T>(&'lib self, name: &str) -> Result<Symbol<'lib, T>>

Get a pointer to a function or static variable by symbol name.

The symbol is interpreted as-is; no mangling is done. This means that symbols like x::y are most likely invalid.

§Safety

Users of this API must specify the correct type of the function or variable loaded.

§Examples
unsafe {
    let awesome_function: Symbol<unsafe extern fn(f64) -> f64> =
        lib.get("awesome_function").unwrap();
    awesome_function(0.42);
}

A static variable may also be loaded and inspected:

unsafe {
    let awesome_variable: Symbol<*mut f64> = lib.get("awesome_variable").unwrap();
    **awesome_variable = 42.0;
};

Trait Implementations§

Source§

impl Clone for ElfLibrary

Source§

fn clone(&self) -> ElfLibrary

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ElfLibrary

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Drop for ElfLibrary

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.