2 个版本
0.15.1 | 2024年7月23日 |
---|---|
0.15.0 | 2024年7月21日 |
0.0.2 |
|
0.0.1 |
|
#254 在 解析器实现
每月331次下载
560KB
14K SLoC
LIEF Rust 绑定
这是 LIEF 的官方 Rust 绑定。
入门
[dependencies]
lief = "0.15.1"
绑定需要 Rust 版本 2021 和 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
此软件包提供了对 LIEF 的 Rust 绑定。它暴露了 LIEF API 的大部分功能,用于 读取 这些格式
- ELF
- PE
- Mach-O
绑定需要至少 Rust 版本 1.74.0,2021 版本及支持
- Windows x86-64(支持
/MT
和/MD
链接) - Linux x86-64/aarch64(Ubuntu 20.04,Almalinux 9,Debian 11.5,Fedora 29)
- macOS(
x86-64
和aarch64
至少 OS X Big Sur:11.0) - iOS(
aarch64
)
入门
[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;
}
注意,generic
模块实现了不同可执行格式结构(符号、重定位等)之间共享的不同特性
依赖
~3–8MB
~150K SLoC