/// A 32-bit Mach-O universal binary. /// /// This is a file that starts with [`macho::FatHeader`], and corresponds /// to [`crate::FileKind::MachOFat32`]. pubtype MachOFatFile32<'data> = MachOFatFile<'data, macho::FatArch32>;
/// A 64-bit Mach-O universal binary. /// /// This is a file that starts with [`macho::FatHeader`], and corresponds /// to [`crate::FileKind::MachOFat64`]. pubtype MachOFatFile64<'data> = MachOFatFile<'data, macho::FatArch64>;
/// A Mach-O universal binary. /// /// This is a file that starts with [`macho::FatHeader`], and corresponds /// to [`crate::FileKind::MachOFat32`] or [`crate::FileKind::MachOFat64`]. #[derive(Debug, Clone)] pubstruct MachOFatFile<'data, Fat: FatArch> {
header: &'data macho::FatHeader,
arches: &'data [Fat],
}
impl<'data, Fat: FatArch> MachOFatFile<'data, Fat> { /// Attempt to parse the fat header and fat arches. pubfn parse<R: ReadRef<'data>>(data: R) -> Result<Self> { letmut offset = 0; let header = data
.read::<FatHeader>(&mut offset)
.read_error("Invalid fat header size or alignment")?; if header.magic.get(BigEndian) != Fat::MAGIC { return Err(Error("Invalid fat magic"));
} let arches = data
.read_slice::<Fat>(&mut offset, header.nfat_arch.get(BigEndian) as usize)
.read_error("Invalid nfat_arch")?;
Ok(MachOFatFile { header, arches })
}
/// Return the array of fat arches. pubfn arches(&self) -> &'data [Fat] { self.arches
}
}
/// A trait for generic access to [`macho::FatArch32`] and [`macho::FatArch64`]. #[allow(missing_docs)] pubtrait FatArch: Pod { type Word: Into<u64>; const MAGIC: u32;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.