| Crates.io | elb-dl |
| lib.rs | elb-dl |
| version | 0.3.2 |
| created_at | 2025-03-30 20:45:44.180697+00 |
| updated_at | 2025-04-19 20:20:59.691462+00 |
| description | A library that resolves ELF dependencies without loading and executing them. |
| homepage | https://github.com/igankevich/elb |
| repository | https://github.com/igankevich/elb |
| max_upload_size | |
| id | 1612748 |
| size | 58,772 |
A library that resolves ELF dependencies without loading and executing them.
Based on elb crate.
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(())
}
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(())
}