60 个版本 (35 个重大更新)

0.36.3 2024年8月7日
0.36.2 2024年7月24日
0.36.1 2024年6月29日
0.34.0 2024年3月11日
0.1.0 2016年8月20日

#16 in 解析器实现

Download history 1369126/week @ 2024-05-04 1464149/week @ 2024-05-11 1467703/week @ 2024-05-18 1528361/week @ 2024-05-25 1701481/week @ 2024-06-01 1640435/week @ 2024-06-08 1616717/week @ 2024-06-15 1671703/week @ 2024-06-22 1600502/week @ 2024-06-29 1714803/week @ 2024-07-06 1734613/week @ 2024-07-13 1823121/week @ 2024-07-20 1775892/week @ 2024-07-27 1702309/week @ 2024-08-03 1807935/week @ 2024-08-10 1510203/week @ 2024-08-17

7,101,836 每月下载量
32,779 个crate中使用 (165 直接使用)

Apache-2.0 OR MIT

1.5MB
34K SLoC

object

object crate 为跨平台操作对象文件提供统一的接口。它支持读取可重定位对象文件和可执行文件,并写入 COFF/ELF/Mach-O/XCOFF 可重定位对象文件和 ELF/PE 可执行文件。

对于读取文件,它提供了多级支持

  • 适合零拷贝访问的原始结构定义
  • 访问原始结构的低级API (示例)
  • 访问对象文件常见功能(如段和符号)的高级统一API (示例)

支持的读取文件格式:ELF、Mach-O、Windows PE/COFF、Wasm、XCOFF 和 Unix 存档。

对于写入文件,它提供了

  • ELF、PE 和 COFF 的低级写入器
  • ELF 的高级构建器 (示例)
  • 用于写入可重定位对象文件的统一API(ELF、Mach-O、COFF、XCOFF)(示例)

统一读取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许可证定义的任何有意提交以包含在作品中的贡献,都将如上双许可,不附加任何额外条款或条件。

依赖项

~0.1–1.4MB
~26K SLoC