libschnauzer

Schnauzer is both library and tool for parsing mach-o files

Features

Installation

shell cargo install schnauzer

Supported commands

```shell

Prints almost all binary info

schnauzer pathtobinary

Prints symtab

schnauzer syms pathtobinary

Prints relative paths

schnauzer rpaths pathtobinary

Prints used dynamic libraries

schnauzer dylibs pathtobinary

Prints all the segments with sections

schnauzer segs pathtobinary

Prints the fat archs

schnauzer fat pathtobinary

Prints headers

schnauzer headers pathtobinary

```

Example output

Put something like in your console:

shell schnauzer /bin/cat

And you get:

example output №1 example output №2

Some info may be too big to be printed with other info that may be inconvenient. So there separate subcommand to print all nlists:

shell schnauzer syms /bin/cat

example syms output

Documentation

docs.rs/schnauzer/0.2.1

Usage

toml [dependencies] schnauzer = "0.2.1"

Examples

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); }

Contacts

You may email me: arsynthdev@gmail.com

GitHub profile