Class MachoLoader

All Implemented Interfaces:
Loader, ExtensionPoint, Comparable<Loader>

public class MachoLoader extends AbstractLibrarySupportLoader
A Loader for Mach-O files.
  • Field Details

  • Constructor Details

    • MachoLoader

      public MachoLoader()
  • Method Details

    • findSupportedLoadSpecs

      public Collection<LoadSpec> findSupportedLoadSpecs(ByteProvider provider) throws IOException
      Description copied from interface: Loader
      If this Loader supports loading the given ByteProvider, this methods returns a Collection of all supported LoadSpecs that contain discovered load specification information that this Loader will need to load. If this Loader cannot support loading the given ByteProvider, an empty Collection is returned.
      Parameters:
      provider - The bytes being loaded.
      Returns:
      A Collection of LoadSpecs that this Loader supports loading, or an empty Collection if this Loader doesn't support loading the given ByteProvider.
      Throws:
      IOException - if there was an IO-related issue finding the LoadSpecs.
    • load

      public void load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log) throws IOException
      Description copied from class: AbstractLibrarySupportLoader
      Loads bytes in a particular format into the given Program.
      Specified by:
      load in class AbstractLibrarySupportLoader
      Parameters:
      provider - The bytes to load.
      loadSpec - The LoadSpec to use during load.
      options - The load options.
      program - The Program to load into.
      monitor - A cancelable task monitor.
      log - The message log.
      Throws:
      IOException - if there was an IO-related problem loading.
    • getName

      public String getName()
      Description copied from interface: Loader
      Gets the Loader's name, which is used both for display purposes, and to identify the Loader in the opinion files.
      Returns:
      The Loader's name.
    • createLibraryByteProvider

      protected ByteProvider createLibraryByteProvider(FSRL libFsrl, LoadSpec loadSpec, MessageLog log, TaskMonitor monitor) throws IOException, CancelledException
      Overrides the default implementation to account for Universal Binary (UBI) files. These must be specially parsed to find the internal file matching the current architecture.

      FatHeader is used to parse the file to determine if it is a UBI. If so, each file within the archive is run through the import process until one is found that is successful (meaning it matches the correct architecture). Only one file in the UBI will ever be imported. If the provided file is NOT a UBI, default import method will be invoked.


      Creates a ByteProvider for the given library FSRL
      Overrides:
      createLibraryByteProvider in class AbstractLibrarySupportLoader
      Parameters:
      libFsrl - The library FSRL to get a ByteProvider for
      loadSpec - An optional LoadSpec the ByteProvider should conform to
      log - The log
      monitor - A cancellable monitor
      Returns:
      A ByteProvider for the given library FSRL, or null if one could not be created that matches the given LoadSpec
      Throws:
      IOException - If there was an IO-related issue
      CancelledException - If the user cancelled the operation
    • resolveLibraryFile

      protected FSRL resolveLibraryFile(GFileSystem fs, Path libraryParentPath, String libraryName) throws IOException
      Special Mach-O library file resolver to account for a "Versions" subdirectory being inserted in the library lookup path. For example, a reference to:

      /System/Library/Frameworks/Foundation.framework/Foundation

      might be found at:

      /System/Library/Frameworks/Foundation.framework//Versions/C/Foundation


      Resolves the given library path to an existing FSRL. Some Loaders have relaxed requirements on what counts as a valid library filename match. For example, case-insensitive lookup may be allowed, and filename extensions may be optional.
      Overrides:
      resolveLibraryFile in class AbstractLibrarySupportLoader
      Parameters:
      fs - The file system to resolve in
      libraryParentPath - The Path of the library's parent directory, relative to the given file system (could be null)
      libraryName - The library name
      Returns:
      The library resolved to an existing FSRL, or null if it did not resolve
      Throws:
      IOException - If an IO-related problem occurred