#文件格式 #mach-o #读取

mach_object

Mach-O文件格式解析器用于Rust

17个版本

0.1.17 2022年6月18日
0.1.15 2021年3月2日
0.1.14 2019年11月21日
0.1.13 2018年9月27日
0.1.1 2016年11月1日

#312 in 解析器实现

Download history 849/week @ 2024-03-14 780/week @ 2024-03-21 1131/week @ 2024-03-28 863/week @ 2024-04-04 842/week @ 2024-04-11 760/week @ 2024-04-18 1068/week @ 2024-04-25 1402/week @ 2024-05-02 1242/week @ 2024-05-09 1379/week @ 2024-05-16 1174/week @ 2024-05-23 1022/week @ 2024-05-30 1093/week @ 2024-06-06 1050/week @ 2024-06-13 1310/week @ 2024-06-20 865/week @ 2024-06-27

4,485 每月下载量
用于 6 (5个直接使用) crates

Apache-2.0

235KB
4K SLoC

包含 (Mach-o可执行文件, 320KB) tests/hellorust, (Mach-o可执行文件, 10KB) tests/helloobjc, (Mach-o可执行文件, 9KB) tests/helloworld, (静态库, 3KB) tests/libfoo.a

rust-macho travis crate docs

Mach-O文件格式解析器用于Rust

用法

要使用它,请将以下行添加到Cargo.toml中的[dependencies]

mach_object = "0.1"

或者

mach_object = { git = "https://github.com/flier/rust-macho.git" }

示例

使用OFile::parse从[u8]切片中读取mach-o文件。

use std::io::{Read, Cursor};
use std::fs::File;
use mach_object::{OFile, CPU_TYPE_X86_64, MachCommand, LoadCommand};

let mut f = File::open("test/helloworld").unwrap();
let mut buf = Vec::new();
let size = f.read_to_end(&mut buf).unwrap();
let mut cur = Cursor::new(&buf[..size]);
if let OFile::MachFile { ref header, ref commands } = OFile::parse(&mut cur).unwrap() {
    assert_eq!(header.cputype, CPU_TYPE_X86_64);
    assert_eq!(header.ncmds as usize, commands.len());
    for &MachCommand(ref cmd, cmdsize) in commands {
        if let &LoadCommand::Segment64 { ref segname, ref sections, .. } = cmd {
            println!("segment: {}", segname);

            for ref sect in sections {
                println!("  section: {}", sect.sectname);
            }
        }
    }
}

更多详情,请查看单元测试和otool示例。

依赖项

~0.7–1.5MB
~32K SLoC