2 releases
0.15.1 | Jul 23, 2024 |
---|---|
0.15.0 | Jul 21, 2024 |
0.0.2 |
|
0.0.1 |
|
#313 in Parser implementations
78 downloads per month
560KB
14K
SLoC
LIEF Rust Bindings
These are the offical rust bindings for LIEF.
Getting Started
[dependencies]
lief = "0.15.1"
The bindings require Rust edition 2021 and rustc >= 1.74.0
use lief;
if let Some(lief::Binary::ELF(elf)) = lief::Binary::from(&mut file) {
println!("Dependencies:");
for entry in elf.dynamic_entries() {
if let dynamic::Entries::Library(lib) = entry {
println!(" - {}", lib.name());
}
}
println!("Versions:");
for version in elf.symbols_version_requirement() {
println!(" From {}", version.name());
for aux in version.auxiliary_symbols() {
println!(" - {}", aux.name());
}
}
}
lib.rs
:
LIEF
This package provides Rust bindings for LIEF. It exposes most of the LIEF API to read these formats:
- ELF
- PE
- Mach-O
The bindings require at least Rust version 1.74.0 with the 2021 edition and support:
- Windows x86-64 (support
/MT
and/MD
linking) - Linux x86-64/aarch64 (Ubuntu 20.04, Almalinux 9, Debian 11.5, Fedora 29)
- macOS (
x86-64
andaarch64
with at least OSX Big Sur: 11.0) - iOS (
aarch64
)
Getting Started
[package]
name = "my-awesome-project"
version = "0.0.1"
edition = "2021"
[dependencies]
# For nightly
lief = { git = "https://github.com/lief-project/LIEF", branch = "main" }
# For releases
lief = 0.15.0
fn main() {
let path = std::env::args().last().unwrap();
let mut file = std::fs::File::open(path).expect("Can't open the file");
match lief::Binary::from(&mut file) {
Some(lief::Binary::ELF(elf)) => {
// Process ELF file
},
Some(lief::Binary::PE(pe)) => {
// Process PE file
},
Some(lief::Binary::MachO(macho)) => {
// Process Mach-O file (including FatMachO)
},
None => {
// Parsing error
}
}
return;
}
Note that the generic
module implements the different traits shared by different structure
of executable formats (symbols, relocations, ...)
Dependencies
~3–8MB
~152K SLoC