Module object::read::macho

source ·
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§

Enums§

  • A slice of structs describing each subcache. The struct gained an additional field (the file suffix) in dyld-1042.1 (macOS 13 / iOS 16), so this is an enum of the two possible slice types.
  • A macho::LoadCommand that has been interpreted according to its cmd field.

Traits§

Functions§

Type Aliases§