elb-dl
A library that resolves ELF dependencies without loading and executing them.
Based on elb crate.
Examples
Resolve immediate dependencies
use ;
Resolve dependencies recursively
use ;
use ;
use Path;
A library that resolves ELF dependencies without loading and executing them.
Based on elb crate.
use elb_dl::{DynamicLoader, Error, glibc};
fn resolve_immediate() -> Result<(), Error> {
let loader = DynamicLoader::options()
.search_dirs(glibc::get_search_dirs("/")?)
.new_loader();
let (_elf, deps) = loader.resolve_dependencies("/bin/sh")?;
for path in deps.iter() {
eprintln!("{:?}", path);
}
Ok(())
}
use elb_dl::{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 all_deps = BTreeSet::new();
let mut queue = VecDeque::new();
queue.push_back(Path::new("/bin/sh").to_path_buf());
while let Some(path) = queue.pop_front() {
let (_elf, deps) = loader.resolve_dependencies(&path)?;
for path in deps.into_iter() {
if all_deps.insert(path.clone()) {
// Recurse into previously unseen dependency.
queue.push_back(path);
}
}
}
// Print deduplicated and ordered list of depedencies.
for path in all_deps.iter() {
eprintln!("{:?}", path);
}
Ok(())
}