Expand description
Support for reading Mach-O files.
Traits are used to abstract over the difference between 32-bit and 64-bit Mach-O
files. The primary trait for this is MachHeader
.
High level API
MachOFile
implements the Object
trait for Mach-O files.
MachOFile
is parameterised by MachHeader
to allow reading both 32-bit and
64-bit Mach-O files. There are type aliases for these parameters (MachOFile32
and
MachOFile64
).
Low level API
The MachHeader
trait can be directly used to parse both macho::MachHeader32
and macho::MachHeader64
. Additionally, FatHeader
and the FatArch
trait
can be used to iterate images in multi-architecture binaries, and DyldCache
can
be used to locate images in a dyld shared cache.
Example for low level API
use object::macho;
use object::read::macho::{MachHeader, Nlist};
use std::error::Error;
use std::fs;
/// Reads a file and displays the name of each symbol.
fn main() -> Result<(), Box<dyn Error>> {
let data = fs::read("path/to/binary")?;
let header = macho::MachHeader64::<object::Endianness>::parse(&*data, 0)?;
let endian = header.endian()?;
let mut commands = header.load_commands(endian, &*data, 0)?;
while let Some(command) = commands.next()? {
if let Some(symtab_command) = command.symtab()? {
let symbols = symtab_command.symbols::<macho::MachHeader64<_>, _>(endian, &*data)?;
for symbol in symbols.iter() {
let name = symbol.name(endian, symbols.strings())?;
println!("{}", String::from_utf8_lossy(name));
}
}
}
Ok(())
}
Re-exports
Structs
- A parsed representation of the dyld shared cache.
- One image (dylib) from inside the dyld shared cache.
- An iterator over all the images (dylibs) in the dyld shared cache.
- Information about a subcache.
- The data for a
macho::LoadCommand
. - An iterator for the load commands from a
MachHeader
. - A COMDAT section group in a
MachOFile
. - An iterator for the COMDAT section groups in a
MachOFile
. - An iterator for the sections in a COMDAT section group in a
MachOFile
. - A partially parsed Mach-O file.
- An iterator for the relocations in a
MachOSection
. - A section in a
MachOFile
. - An iterator for the sections in a
MachOFile
. - A segment in a
MachOFile
. - An iterator for the segments in a
MachOFile
. - A symbol in a
MachOFile
. - An iterator for the symbols in a
MachOFile
. - A symbol table in a
MachOFile
. - A table of symbol entries in a Mach-O file.
Enums
- A
macho::LoadCommand
that has been interpreted according to itscmd
field.
Traits
- A trait for generic access to
macho::FatArch32
andmacho::FatArch64
. - A trait for generic access to
macho::MachHeader32
andmacho::MachHeader64
. - A trait for generic access to
macho::Nlist32
andmacho::Nlist64
. - A trait for generic access to
macho::Section32
andmacho::Section64
. - A trait for generic access to
macho::SegmentCommand32
andmacho::SegmentCommand64
.
Functions
- Find the file offset of the image by looking up its address in the mappings.
Type Aliases
- A COMDAT section group in a
MachOFile32
. - A COMDAT section group in a
MachOFile64
. - An iterator for the COMDAT section groups in a
MachOFile64
. - An iterator for the COMDAT section groups in a
MachOFile64
. - An iterator for the sections in a COMDAT section group in a
MachOFile32
. - An iterator for the sections in a COMDAT section group in a
MachOFile64
. - A 32-bit Mach-O object file.
- A 64-bit Mach-O object file.
- An iterator for the relocations in a
MachOSection32
. - An iterator for the relocations in a
MachOSection64
. - A section in a
MachOFile32
. - A section in a
MachOFile64
. - An iterator for the sections in a
MachOFile32
. - An iterator for the sections in a
MachOFile64
. - A segment in a
MachOFile32
. - A segment in a
MachOFile64
. - An iterator for the segments in a
MachOFile32
. - An iterator for the segments in a
MachOFile64
. - A symbol in a
MachOFile32
. - A symbol in a
MachOFile64
. - An iterator for the symbols in a
MachOFile32
. - An iterator for the symbols in a
MachOFile64
. - A symbol table in a
MachOFile32
. - A symbol table in a
MachOFile64
.