Package ghidra.app.util.opinion
Class MachoLoader
java.lang.Object
ghidra.app.util.opinion.AbstractProgramLoader
ghidra.app.util.opinion.AbstractLibrarySupportLoader
ghidra.app.util.opinion.MachoLoader
- All Implemented Interfaces:
Loader,ExtensionPoint,Comparable<Loader>
A
Loader for Mach-O files.-
Nested Class Summary
Nested classes/interfaces inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
AbstractLibrarySupportLoader.FileSystemSearchPath -
Field Summary
FieldsFields inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
DEPTH_OPTION_NAME, LIBRARY_DEST_FOLDER_OPTION_NAME, LINK_EXISTING_OPTION_NAME, LINK_SEARCH_FOLDER_OPTION_NAME, LOCAL_LIBRARY_OPTION_NAME, SYSTEM_LIBRARY_OPTION_NAMEFields inherited from class ghidra.app.util.opinion.AbstractProgramLoader
ANCHOR_LABELS_OPTION_NAME, APPLY_LABELS_OPTION_NAMEFields inherited from interface ghidra.app.util.opinion.Loader
COMMAND_LINE_ARG_PREFIX, OPTIONS_PROJECT_SAVE_STATE_KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected ByteProvidercreateLibraryByteProvider(FSRL libFsrl, LoadSpec loadSpec, MessageLog log, TaskMonitor monitor) Overrides the default implementation to account for Universal Binary (UBI) files.findSupportedLoadSpecs(ByteProvider provider) If thisLoadersupports loading the givenByteProvider, this methods returns aCollectionof all supportedLoadSpecs that contain discovered load specification information that thisLoaderwill need to load.getName()voidload(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log) Loads bytes in a particular format into the givenProgram.protected FSRLresolveLibraryFile(GFileSystem fs, Path libraryParentPath, String libraryName) Special Mach-O library file resolver to account for a "Versions" subdirectory being inserted in the library lookup path.Methods inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
getCustomLibrarySearchPaths, getDefaultOptions, getLibraryDestinationFolderPath, getLibraryDestinationSearchFolder, getLibraryLoadDepth, getLinkSearchFolder, getTier, getTierPriority, isCaseInsensitiveLibraryFilenames, isLinkExistingLibraries, isLoadLocalLibraries, isLoadSystemLibraries, isOptionalLibraryFilenameExtensions, loadProgram, loadProgramInto, matchSupportedLoadSpec, postLoadProgramFixups, processLibrary, shouldLoadLibrary, shouldSearchAllPaths, validateOptionsMethods inherited from class ghidra.app.util.opinion.AbstractProgramLoader
concatenatePaths, createDefaultMemoryBlocks, createProgram, generateBlockName, getLanguageService, load, loadInto, markAsFunction, postLoadCleanup, release, setProgramProperties, shouldApplyProcessorLabelsByDefaultMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ghidra.app.util.opinion.Loader
compareTo, getPreferredFileName, loadsIntoNewFolder, supportsLoadIntoProgram, supportsLoadIntoProgram
-
Field Details
-
MACH_O_NAME
- See Also:
-
-
Constructor Details
-
MachoLoader
public MachoLoader()
-
-
Method Details
-
findSupportedLoadSpecs
Description copied from interface:LoaderIf thisLoadersupports loading the givenByteProvider, this methods returns aCollectionof all supportedLoadSpecs that contain discovered load specification information that thisLoaderwill need to load. If thisLoadercannot support loading the givenByteProvider, an emptyCollectionis returned.- Parameters:
provider- The bytes being loaded.- Returns:
- A
CollectionofLoadSpecs that thisLoadersupports loading, or an emptyCollectionif thisLoaderdoesn't support loading the givenByteProvider. - Throws:
IOException- if there was an IO-related issue finding theLoadSpecs.
-
load
public void load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log) throws IOException Description copied from class:AbstractLibrarySupportLoaderLoads bytes in a particular format into the givenProgram.- Specified by:
loadin classAbstractLibrarySupportLoader- Parameters:
provider- The bytes to load.loadSpec- TheLoadSpecto use during load.options- The load options.program- TheProgramto load into.monitor- A cancelable task monitor.log- The message log.- Throws:
IOException- if there was an IO-related problem loading.
-
getName
Description copied from interface:LoaderGets theLoader's name, which is used both for display purposes, and to identify theLoaderin 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.FatHeaderis 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 aByteProviderfor the given libraryFSRL- Overrides:
createLibraryByteProviderin classAbstractLibrarySupportLoader- Parameters:
libFsrl- The libraryFSRLto get aByteProviderforloadSpec- An optionalLoadSpectheByteProvidershould conform tolog- The logmonitor- A cancellable monitor- Returns:
- A
ByteProviderfor the given libraryFSRL, or null if one could not be created that matches the givenLoadSpec - Throws:
IOException- If there was an IO-related issueCancelledException- 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/Foundationmight be found at:
/System/Library/Frameworks/Foundation.framework//Versions/C/Foundation
Resolves the given library path to an existingFSRL. SomeLoaders 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:
resolveLibraryFilein classAbstractLibrarySupportLoader- Parameters:
fs- Thefile systemto resolve inlibraryParentPath- ThePathof the libraries 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
-