pub mod constants;
mod container;
pub mod fat;
pub mod io;
pub mod load_commands;
pub mod macho;
pub mod relocations;
pub mod sections;
pub mod symbols;
pub use container::{parse, parse_with_options};
pub use fat::parse_fat_binary;
pub use macho::parse_macho_file;
pub use relocations::relocations_for_section;
pub use symbols::{fold_symbols, parse_symbol_table};
use crate::model::container::MachoContainer;
use crate::model::validate::Diagnostic;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum ParseMode {
Strict,
Forensic,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ParseLimits {
pub max_fat_arches: usize,
pub max_load_commands: usize,
pub max_sections: usize,
pub max_string_bytes: usize,
}
impl Default for ParseLimits {
fn default() -> Self {
Self {
max_fat_arches: 256,
max_load_commands: 10_000,
max_sections: 100_000,
max_string_bytes: 16 * 1024 * 1024,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ParseOptions {
pub mode: ParseMode,
pub limits: ParseLimits,
}
impl Default for ParseOptions {
fn default() -> Self {
Self {
mode: ParseMode::Strict,
limits: ParseLimits::default(),
}
}
}
pub struct ParseOutcome<'data> {
pub container: MachoContainer<'data>,
pub diagnostics: Vec<Diagnostic>,
}