Schnauzer is both library and tool for parsing mach-o files
match
blocks for any type of load commandshell
cargo install schnauzer
Since version 0.2.4
, schnauzer
requires -p
or --path
argument to specify path to file
```shell
schnauzer -p pathtobinary
schnauzer syms -p pathtobinary
schnauzer rpaths -p pathtobinary
schnauzer dylibs -p pathtobinary
schnauzer segs -p pathtobinary
schnauzer fat -p pathtobinary
schnauzer headers -p pathtobinary
```
Put something like in your console:
shell
schnauzer -p /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 -p path_to_binary
docs.rs/schnauzer/0.2.4
toml
[dependencies]
schnauzer = "0.2.4"
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