| Crates.io | elb |
| lib.rs | elb |
| version | 0.3.2 |
| created_at | 2025-03-30 20:45:37.309914+00 |
| updated_at | 2025-04-19 20:20:51.319945+00 |
| description | A library that supports reading ELF files and patching RPATH, RUNPATH and interpreter. |
| homepage | https://github.com/igankevich/elb |
| repository | https://github.com/igankevich/elb |
| max_upload_size | |
| id | 1612747 |
| size | 179,528 |
ELF reader/patcher library that features
RPATH, RUNPATH and interpreter via high-level API,To resolve dependencies without loading and executing files,
you can use elb-dl that is based on this crate.
There is also an accompanying command-line utility.
use elb::{DynamicTag, Elf, ElfPatcher, Error};
use std::fs::{File, OpenOptions};
fn read_elf() -> Result<(), Error> {
let mut file = File::open("/bin/ls")?;
let page_size = 4096;
let elf = Elf::read(&mut file, page_size)?;
eprintln!("{:#?}", elf.header);
Ok(())
}
fn patch_elf() -> Result<(), Error> {
let mut file = OpenOptions::new().read(true).write(true).open("/chroot/bin/ls")?;
let page_size = 4096;
let elf = Elf::read(&mut file, page_size)?;
let mut patcher = ElfPatcher::new(elf, file);
patcher.set_interpreter(c"/chroot/lib64/ld-linux-x86-64.so.2")?;
patcher.set_library_search_path(DynamicTag::Runpath, c"/chroot/lib64:/chroot/usr/lib64")?;
patcher.finish()?;
Ok(())
}
Other ELF readers/patchers:
Dynamic linkers:
Man pages:
Linters:
eu-elflint.readelf --lint.