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 解析器实现
4,485 每月下载量
用于 6 个 (5个直接使用) crates
235KB
4K SLoC
包含 (Mach-o可执行文件, 320KB) tests/hellorust, (Mach-o可执行文件, 10KB) tests/helloobjc, (Mach-o可执行文件, 9KB) tests/helloworld, (静态库, 3KB) tests/libfoo.a
rust-macho
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