elb-dl

Crates.ioelb-dl
lib.rselb-dl
version0.3.2
created_at2025-03-30 20:45:44.180697+00
updated_at2025-04-19 20:20:59.691462+00
descriptionA library that resolves ELF dependencies without loading and executing them.
homepagehttps://github.com/igankevich/elb
repositoryhttps://github.com/igankevich/elb
max_upload_size
id1612748
size58,772
Ivan Gankevich (igankevich)

documentation

https://docs.rs/elb-dl

README

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(())
}
Commit count: 7

cargo fmt