Schnauzer is both library and tool for parsing mach-o files
match
blocks for any type of load commandshell
cargo install schnauzer
Put something like in your console:
shell
schnauzer /bin/cat
And you get:
docs.rs/schnauzer/0.1.7
toml
[dependencies]
schnauzer = "0.1.7"
Simple debug print
```rust use schnauzer::ObjectType; use schnauzer::Parser; use std::path::Path;
fn main() { let mut args = std::env::args(); let execname = args.next();
let path = match args.next() {
Some(s) => s,
None => {
eprintln!("Not enough arguments. Provide a valid path to binary");
std::process::exit(1);
}
};
let path = Path::new(&path);
let parser = match Parser::build(path) {
Ok(b) => b,
Err(e) => {
eprintln!("Could not create parser at '{:?}': {e}", path);
std::process::exit(1);
}
};
let object = match parser.parse() {
Ok(o) => o,
Err(e) => {
eprintln!("Error while parsing: {:#?}", e);
std::process::exit(1);
}
};
handle_object(object);
}
fn handle_object(obj: ObjectType) { println!("Object"); println!("{:#?}", obj); } ```
Using AutoEnumFields
derive (code taken from src/main.rs
)
rust
let h = macho.header();
for field in h.all_fields() {
out_dashed_field(field.name, field.value, level);
}