Crate elb_dl

Source
Expand description

§elb-dl

Crates.io Version Docs dependency status

A library that resolves ELF dependencies without loading and executing them.

Based on elb crate.

§Examples

§Resolve immediate dependencies

use elb_dl::{DependencyTree, DynamicLoader, Error, glibc};

fn resolve_immediate() -> Result<(), Error> {
    let loader = DynamicLoader::options()
        .search_dirs(glibc::get_search_dirs("/")?)
        .new_loader();
    let mut tree = DependencyTree::new();
    let deps = loader.resolve_dependencies("/bin/sh", &mut tree)?;
    for path in deps.iter() {
        eprintln!("{:?}", path);
    }
    Ok(())
}

§Resolve dependencies recursively

use elb_dl::{DependencyTree, DynamicLoader, Error, glibc};
use std::collections::{BTreeSet, VecDeque};
use std::path::Path;

fn resolve_all() -> Result<(), Error> {
    let loader = DynamicLoader::options()
        .search_dirs(glibc::get_search_dirs("/")?)
        .new_loader();
    let mut tree = DependencyTree::new();
    let mut queue = VecDeque::new();
    queue.push_back(Path::new("/bin/sh").to_path_buf());
    while let Some(path) = queue.pop_front() {
        let deps = loader.resolve_dependencies(&path, &mut tree)?;
        queue.extend(deps);
    }
    // Print dependency table.
    for (dependent, dependencies) in tree.iter() {
        eprintln!("{dependent:?} => {dependencies:?}");
    }
    Ok(())
}

Modules§

glibcglibc
Functionality specific to GNU libc’s implementation of the dynamic loader.
muslmusl
Functionality specific to musl libc’s implementation of the dynamic loader.

Structs§

DependencyTree
Dependency table.
DynamicLoader
Dynamic loader.
ElfRelocatorrelocate
Relocates ELF together with its dependencies.
LoaderOptions
Dynamic loader options.

Enums§

Error
Dynamic loader error.
Libc
Dynamic linker implementation that we’re emulating.

Functions§

get_search_dirs_from_env
Get library search directories from the environment variables.