2 个版本
0.1.1 | 2024年4月10日 |
---|---|
0.1.0 | 2024年3月5日 |
#2142 in 解析器实现
2MB
35K SLoC
对象
object
包提供了一种跨平台的统一接口来处理对象文件。它支持读取可重定位对象文件和可执行文件,并写入 COFF/ELF/Mach-O/XCOFF 可重定位对象文件和 ELF/PE 可执行文件。
对于文件读取,它提供了多级支持
支持的读取文件格式:ELF、Mach-O、Windows PE/COFF、Wasm、XCOFF 和 Unix 归档。
对于文件写入,它提供了
统一读取 API 的示例
use object::{Object, ObjectSection};
use std::error::Error;
use std::fs;
/// Reads a file and displays the name of each section.
fn main() -> Result<(), Box<dyn Error>> {
let binary_data = fs::read("path/to/binary")?;
let file = object::File::parse(&*binary_data)?;
for section in file.sections() {
println!("{}", section.name()?);
}
Ok(())
}
有关更多示例,请参阅《crates/examples
》。
最低支持的 Rust 版本 (MSRV)
MSRV 的更改被认为是破坏性更改。我们对更改 MSRV 非常谨慎,但有时由于依赖关系需要更改。MSRV 是 1.65.0。
许可协议
许可协议为以下之一
- Apache 许可协议,版本 2.0(《
LICENSE-APACHE
或 https://www.apache.org/licenses/LICENSE-2.0) - 麻省理工学院许可证(
LICENSE-MIT
或 https://opensource.org/licenses/MIT)
根据您的要求。
贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在作品中的贡献,应按照上述方式双许可,没有任何额外条款或条件。
lib.rs
:
一个用于重写对象和可执行文件的库。
使用 Rewriter
结构体读取文件、修改它并将其写回。可以使用 Rewriter
结构体上的方法执行修改,或者通过将 Options
结构体传递给 Rewriter::modify
方法。
目前,仅支持 ELF 文件,并且尚不支持许多修改。
示例
use object_rewrite::{Options, Rewriter};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut options = Options::default();
options.delete_symbols.insert(b"main".to_vec());
let input = std::fs::read("path/to/input")?;
let mut rewriter = Rewriter::read(&input)?;
rewriter.modify(options)?;
let mut output = std::fs::File::create("path/to/output")?;
rewriter.write(&mut output)?;
Ok(())
}