Schnauzer is both library and tool for parsing mach-o files
match
blocks for any type of load commandshell
cargo install schnauzer
```shell
schnauzer pathtobinary
schnauzer syms pathtobinary
schnauzer rpaths pathtobinary
schnauzer dylibs pathtobinary
schnauzer segs pathtobinary
schnauzer fat pathtobinary
schnauzer headers pathtobinary
```
Put something like in your console:
shell
schnauzer /bin/cat
And you get:
Some info may be too big to be printed with other info that may be inconvenient. So there separate subcommand to print all nlist
s:
shell
schnauzer syms /bin/cat
docs.rs/schnauzer/0.2.2
toml
[dependencies]
schnauzer = "0.2.2"
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);
}
You may email me: arsynthdev@gmail.com